Add initial file chooser (#639)

This commit is contained in:
David Perez
2024-01-16 16:25:59 -06:00
committed by GitHub
parent a9338cc743
commit b30a4368d8
10 changed files with 295 additions and 17 deletions

View File

@@ -24,6 +24,7 @@ import com.x8bit.bitwarden.data.platform.repository.util.bufferedMutableSharedFl
import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest
import com.x8bit.bitwarden.ui.platform.base.util.asText
import com.x8bit.bitwarden.ui.platform.manager.intent.IntentManager
import com.x8bit.bitwarden.ui.platform.manager.permissions.FakePermissionManager
import com.x8bit.bitwarden.ui.tools.feature.send.addsend.model.AddSendType
import com.x8bit.bitwarden.ui.util.isEditableText
import com.x8bit.bitwarden.ui.util.isProgressBar
@@ -44,7 +45,8 @@ class AddSendScreenTest : BaseComposeTest() {
private var onNavigateBackCalled = false
private val intentManager: IntentManager = mockk {
private val permissionsManager = FakePermissionManager()
private val intentManager: IntentManager = mockk(relaxed = true) {
every { shareText(any()) } just runs
}
private val mutableEventFlow = bufferedMutableSharedFlow<AddSendEvent>()
@@ -60,6 +62,7 @@ class AddSendScreenTest : BaseComposeTest() {
AddSendScreen(
viewModel = viewModel,
intentManager = intentManager,
permissionsManager = permissionsManager,
onNavigateBack = { onNavigateBackCalled = true },
)
}
@@ -329,7 +332,8 @@ class AddSendScreenTest : BaseComposeTest() {
}
@Test
fun `Choose file button click should send ChooseFileClick`() {
fun `Choose file button click with permission should send ChooseFileClick`() {
permissionsManager.checkPermissionResult = true
mutableStateFlow.value = DEFAULT_STATE.copy(
viewState = DEFAULT_VIEW_STATE.copy(
selectedType = AddSendState.ViewState.Content.SendType.File,
@@ -339,7 +343,32 @@ class AddSendScreenTest : BaseComposeTest() {
.onNodeWithText("Choose file")
.performScrollTo()
.performClick()
verify { viewModel.trySendAction(AddSendAction.ChooseFileClick) }
verify {
viewModel.trySendAction(
AddSendAction.ChooseFileClick(isCameraPermissionGranted = true),
)
}
}
@Suppress("MaxLineLength")
@Test
fun `Choose file button click without permission should request permission and send ChooseFileClick`() {
permissionsManager.checkPermissionResult = false
permissionsManager.getPermissionsResult = false
mutableStateFlow.value = DEFAULT_STATE.copy(
viewState = DEFAULT_VIEW_STATE.copy(
selectedType = AddSendState.ViewState.Content.SendType.File,
),
)
composeTestRule
.onNodeWithText("Choose file")
.performScrollTo()
.performClick()
verify {
viewModel.trySendAction(
AddSendAction.ChooseFileClick(isCameraPermissionGranted = false),
)
}
}
@Test

View File

@@ -581,14 +581,21 @@ class AddSendViewModelTest : BaseViewModelTest() {
}
@Test
fun `ChooseFileClick should emit ShowToast`() = runTest {
fun `FileChose should emit ShowToast`() = runTest {
val viewModel = createViewModel()
viewModel.eventFlow.test {
viewModel.trySendAction(AddSendAction.ChooseFileClick)
assertEquals(
AddSendEvent.ShowToast("Not Implemented: File Upload".asText()),
awaitItem(),
)
viewModel.trySendAction(AddSendAction.FileChoose(fileData = mockk()))
assertEquals(AddSendEvent.ShowToast("Not Yet Implemented".asText()), awaitItem())
}
}
@Test
fun `ChooseFileClick should emit ShowToast`() = runTest {
val arePermissionsGranted = true
val viewModel = createViewModel()
viewModel.eventFlow.test {
viewModel.trySendAction(AddSendAction.ChooseFileClick(arePermissionsGranted))
assertEquals(AddSendEvent.ShowChooserSheet(arePermissionsGranted), awaitItem())
}
}