BIT-1667: Navigate the user to the tooltip URI (#897)

This commit is contained in:
Oleg Semenenko 2024-01-31 11:15:28 -06:00 committed by Álison Fernandes
parent 2c092d9d2c
commit fc3cdeb798
4 changed files with 39 additions and 16 deletions

View file

@ -18,6 +18,7 @@ import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.core.net.toUri
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.x8bit.bitwarden.R
@ -34,7 +35,9 @@ import com.x8bit.bitwarden.ui.platform.components.BitwardenTopAppBar
import com.x8bit.bitwarden.ui.platform.components.BitwardenTwoButtonDialog
import com.x8bit.bitwarden.ui.platform.components.LoadingDialogState
import com.x8bit.bitwarden.ui.platform.components.OverflowMenuItemData
import com.x8bit.bitwarden.ui.platform.manager.intent.IntentManager
import com.x8bit.bitwarden.ui.platform.manager.permissions.PermissionsManager
import com.x8bit.bitwarden.ui.platform.theme.LocalIntentManager
import com.x8bit.bitwarden.ui.platform.theme.LocalPermissionsManager
import com.x8bit.bitwarden.ui.platform.util.persistentListOfNotNull
import com.x8bit.bitwarden.ui.tools.feature.generator.model.GeneratorMode
@ -54,6 +57,7 @@ fun VaultAddEditScreen(
onNavigateToQrCodeScanScreen: () -> Unit,
viewModel: VaultAddEditViewModel = hiltViewModel(),
permissionsManager: PermissionsManager = LocalPermissionsManager.current,
intentManager: IntentManager = LocalIntentManager.current,
onNavigateToManualCodeEntryScreen: () -> Unit,
onNavigateToGeneratorModal: (GeneratorMode.Modal) -> Unit,
onNavigateToAttachments: (cipherId: String) -> Unit,
@ -91,6 +95,12 @@ fun VaultAddEditScreen(
}
VaultAddEditEvent.NavigateBack -> onNavigateBack.invoke()
is VaultAddEditEvent.NavigateToTooltipUri -> {
intentManager.launchUri(
"https://bitwarden.com/help/managing-items/#protect-individual-items".toUri(),
)
}
}
}

View file

@ -502,12 +502,7 @@ class VaultAddEditViewModel @Inject constructor(
}
private fun handleTooltipClick() {
// TODO Add the text for the prompt (BIT-1079)
sendEvent(
event = VaultAddEditEvent.ShowToast(
message = "Not yet implemented".asText(),
),
)
sendEvent(VaultAddEditEvent.NavigateToTooltipUri)
}
@Suppress("MaxLineLength")
@ -1735,6 +1730,12 @@ sealed class VaultAddEditEvent {
val cipherId: String,
) : VaultAddEditEvent()
/**
* Navigate the user to the tooltip URI.
*/
data object NavigateToTooltipUri :
VaultAddEditEvent()
/**
* Navigate to the QR code scan screen.
*/

View file

@ -29,11 +29,13 @@ import androidx.compose.ui.test.performScrollTo
import androidx.compose.ui.test.performTextClearance
import androidx.compose.ui.test.performTextInput
import androidx.compose.ui.test.performTouchInput
import androidx.core.net.toUri
import com.bitwarden.core.UriMatchType
import com.x8bit.bitwarden.data.platform.repository.util.bufferedMutableSharedFlow
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockCipherView
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.generator.model.GeneratorMode
import com.x8bit.bitwarden.ui.util.assertNoDialogExists
@ -50,7 +52,9 @@ import com.x8bit.bitwarden.ui.vault.model.VaultCardBrand
import com.x8bit.bitwarden.ui.vault.model.VaultCardExpirationMonth
import com.x8bit.bitwarden.ui.vault.model.VaultIdentityTitle
import io.mockk.every
import io.mockk.just
import io.mockk.mockk
import io.mockk.runs
import io.mockk.verify
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.update
@ -79,6 +83,10 @@ class VaultAddEditScreenTest : BaseComposeTest() {
every { stateFlow } returns mutableStateFlow
}
private val intentManager: IntentManager = mockk {
every { launchUri(any()) } just runs
}
@Before
fun setup() {
composeTestRule.setContent {
@ -93,6 +101,7 @@ class VaultAddEditScreenTest : BaseComposeTest() {
onNavigateToMoveToOrganization = { id, _ -> onNavigateToMoveToOrganizationId = id },
viewModel = viewModel,
permissionsManager = fakePermissionManager,
intentManager = intentManager,
)
}
}
@ -103,6 +112,16 @@ class VaultAddEditScreenTest : BaseComposeTest() {
assertTrue(onNavigateBackCalled)
}
@Test
fun `on NavigateToTooltipUri Event should invoke IntentManager`() {
mutableEventFlow.tryEmit(VaultAddEditEvent.NavigateToTooltipUri)
verify {
intentManager.launchUri(
"https://bitwarden.com/help/managing-items/#protect-individual-items".toUri(),
)
}
}
@Suppress("MaxLineLength")
@Test
fun `on NavigateToQrCodeScan event should invoke NavigateToQrCodeScan`() {

View file

@ -1170,7 +1170,6 @@ class VaultAddEditViewModelTest : BaseViewModelTest() {
assertEquals(
expectedState,
viewModel.stateFlow.value,
)
}
}
@ -2025,17 +2024,11 @@ class VaultAddEditViewModelTest : BaseViewModelTest() {
}
@Test
fun `TooltipClick should emit ShowToast with 'Tooltip' message`() = runTest {
fun `TooltipClick should emit NavigateToToolTipUri`() = runTest {
viewModel.eventFlow.test {
viewModel
.actionChannel
.trySend(
VaultAddEditAction.Common.TooltipClick,
)
viewModel.trySendAction(VaultAddEditAction.Common.TooltipClick)
assertEquals(
VaultAddEditEvent.ShowToast(
"Not yet implemented".asText(),
),
VaultAddEditEvent.NavigateToTooltipUri,
awaitItem(),
)
}