mirror of
https://github.com/bitwarden/android.git
synced 2026-05-29 16:07:18 -05:00
BIT-1337 Adding new section for verification codes (#567)
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package com.x8bit.bitwarden.ui.vault.feature.vault
|
||||
|
||||
import androidx.compose.ui.test.assertIsDisplayed
|
||||
import androidx.compose.ui.test.assertIsNotDisplayed
|
||||
import androidx.compose.ui.test.assertTextEquals
|
||||
import androidx.compose.ui.test.filterToOne
|
||||
import androidx.compose.ui.test.hasAnyAncestor
|
||||
@@ -622,6 +623,61 @@ class VaultScreenTest : BaseComposeTest() {
|
||||
verify { intentHandler.exitApplication() }
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `totp section should be visible based on state`() {
|
||||
mutableStateFlow.update { state ->
|
||||
state.copy(
|
||||
viewState = DEFAULT_CONTENT_VIEW_STATE.copy(
|
||||
totpItemsCount = 2,
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
composeTestRule
|
||||
.onNodeWithText("TOTP")
|
||||
.assertTextEquals("TOTP", "1")
|
||||
.assertIsDisplayed()
|
||||
|
||||
composeTestRule
|
||||
.onNodeWithText("Verification codes")
|
||||
.assertTextEquals("Verification codes", "2")
|
||||
.assertIsDisplayed()
|
||||
|
||||
mutableStateFlow.update { state ->
|
||||
state.copy(
|
||||
viewState = DEFAULT_CONTENT_VIEW_STATE.copy(
|
||||
totpItemsCount = 0,
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
composeTestRule
|
||||
.onNodeWithText("TOTP")
|
||||
.assertIsNotDisplayed()
|
||||
|
||||
composeTestRule
|
||||
.onNodeWithText("Verification codes")
|
||||
.assertIsNotDisplayed()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `clicking totp section should emit VerificationCodesClick action`() {
|
||||
mutableStateFlow.update { state ->
|
||||
state.copy(
|
||||
isPremium = true,
|
||||
viewState = DEFAULT_CONTENT_VIEW_STATE.copy(
|
||||
totpItemsCount = 2,
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
composeTestRule
|
||||
.onNodeWithText("Verification codes")
|
||||
.performClick()
|
||||
|
||||
verify { viewModel.trySendAction(VaultAction.VerificationCodesClick) }
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `clicking a favorite item should send VaultItemClick with the correct item`() {
|
||||
val itemText = "Test Item"
|
||||
@@ -1003,14 +1059,15 @@ private val VAULT_FILTER_DATA = VaultFilterData(
|
||||
)
|
||||
|
||||
private val DEFAULT_STATE: VaultState = VaultState(
|
||||
appBarTitle = R.string.my_vault.asText(),
|
||||
avatarColorString = "#aa00aa",
|
||||
initials = "AU",
|
||||
accountSummaries = persistentListOf(
|
||||
ACTIVE_ACCOUNT_SUMMARY,
|
||||
LOCKED_ACCOUNT_SUMMARY,
|
||||
),
|
||||
appBarTitle = R.string.my_vault.asText(),
|
||||
viewState = VaultState.ViewState.Loading,
|
||||
isPremium = false,
|
||||
)
|
||||
|
||||
private val DEFAULT_CONTENT_VIEW_STATE: VaultState.ViewState.Content = VaultState.ViewState.Content(
|
||||
@@ -1023,4 +1080,5 @@ private val DEFAULT_CONTENT_VIEW_STATE: VaultState.ViewState.Content = VaultStat
|
||||
noFolderItems = emptyList(),
|
||||
collectionItems = emptyList(),
|
||||
trashItemsCount = 0,
|
||||
totpItemsCount = 0,
|
||||
)
|
||||
|
||||
@@ -345,7 +345,10 @@ class VaultViewModelTest : BaseViewModelTest() {
|
||||
)
|
||||
val viewModel = createViewModel()
|
||||
val initialState = createMockVaultState(
|
||||
viewState = vaultData.toViewState(VaultFilterType.AllVaults),
|
||||
viewState = vaultData.toViewState(
|
||||
isPremium = true,
|
||||
vaultFilterType = VaultFilterType.AllVaults,
|
||||
),
|
||||
)
|
||||
.copy(
|
||||
appBarTitle = R.string.vaults.asText(),
|
||||
@@ -363,7 +366,10 @@ class VaultViewModelTest : BaseViewModelTest() {
|
||||
vaultFilterData = VAULT_FILTER_DATA.copy(
|
||||
selectedVaultFilterType = VaultFilterType.MyVault,
|
||||
),
|
||||
viewState = vaultData.toViewState(VaultFilterType.MyVault),
|
||||
viewState = vaultData.toViewState(
|
||||
isPremium = true,
|
||||
vaultFilterType = VaultFilterType.MyVault,
|
||||
),
|
||||
),
|
||||
viewModel.stateFlow.value,
|
||||
)
|
||||
@@ -408,6 +414,7 @@ class VaultViewModelTest : BaseViewModelTest() {
|
||||
),
|
||||
noFolderItems = listOf(),
|
||||
trashItemsCount = 0,
|
||||
totpItemsCount = 1,
|
||||
),
|
||||
),
|
||||
viewModel.stateFlow.value,
|
||||
@@ -429,6 +436,7 @@ class VaultViewModelTest : BaseViewModelTest() {
|
||||
collectionItems = listOf(),
|
||||
noFolderItems = listOf(),
|
||||
trashItemsCount = 0,
|
||||
totpItemsCount = 1,
|
||||
),
|
||||
)
|
||||
val viewModel = createViewModel()
|
||||
@@ -540,6 +548,7 @@ class VaultViewModelTest : BaseViewModelTest() {
|
||||
),
|
||||
noFolderItems = listOf(),
|
||||
trashItemsCount = 0,
|
||||
totpItemsCount = 1,
|
||||
),
|
||||
),
|
||||
viewModel.stateFlow.value,
|
||||
@@ -637,6 +646,7 @@ class VaultViewModelTest : BaseViewModelTest() {
|
||||
),
|
||||
noFolderItems = listOf(),
|
||||
trashItemsCount = 0,
|
||||
totpItemsCount = 1,
|
||||
),
|
||||
dialog = VaultState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
@@ -734,6 +744,7 @@ class VaultViewModelTest : BaseViewModelTest() {
|
||||
),
|
||||
noFolderItems = listOf(),
|
||||
trashItemsCount = 0,
|
||||
totpItemsCount = 1,
|
||||
),
|
||||
dialog = VaultState.DialogState.Error(
|
||||
title = R.string.internet_connection_required_title.asText(),
|
||||
@@ -806,6 +817,15 @@ class VaultViewModelTest : BaseViewModelTest() {
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `VerificationCodesClick should emit NavigateToVerificationCodeScreen`() = runTest {
|
||||
val viewModel = createViewModel()
|
||||
viewModel.eventFlow.test {
|
||||
viewModel.trySendAction(VaultAction.VerificationCodesClick)
|
||||
assertEquals(VaultEvent.NavigateToVerificationCodeScreen, awaitItem())
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `AddItemClick should emit NavigateToAddItemScreen`() = runTest {
|
||||
val viewModel = createViewModel()
|
||||
@@ -1057,4 +1077,5 @@ private fun createMockVaultState(
|
||||
viewState = viewState,
|
||||
dialog = dialog,
|
||||
isSwitchingAccounts = false,
|
||||
isPremium = true,
|
||||
)
|
||||
|
||||
@@ -23,7 +23,10 @@ class VaultDataExtensionsTest {
|
||||
sendViewList = listOf(createMockSendView(number = 1)),
|
||||
)
|
||||
|
||||
val actual = vaultData.toViewState(vaultFilterType = VaultFilterType.AllVaults)
|
||||
val actual = vaultData.toViewState(
|
||||
isPremium = true,
|
||||
vaultFilterType = VaultFilterType.AllVaults,
|
||||
)
|
||||
|
||||
assertEquals(
|
||||
VaultState.ViewState.Content(
|
||||
@@ -48,6 +51,7 @@ class VaultDataExtensionsTest {
|
||||
),
|
||||
noFolderItems = listOf(),
|
||||
trashItemsCount = 0,
|
||||
totpItemsCount = 1,
|
||||
),
|
||||
actual,
|
||||
)
|
||||
@@ -66,7 +70,10 @@ class VaultDataExtensionsTest {
|
||||
sendViewList = listOf(createMockSendView(number = 1)),
|
||||
)
|
||||
|
||||
val actual = vaultData.toViewState(vaultFilterType = VaultFilterType.MyVault)
|
||||
val actual = vaultData.toViewState(
|
||||
isPremium = true,
|
||||
vaultFilterType = VaultFilterType.MyVault,
|
||||
)
|
||||
|
||||
assertEquals(
|
||||
VaultState.ViewState.Content(
|
||||
@@ -85,6 +92,7 @@ class VaultDataExtensionsTest {
|
||||
collectionItems = listOf(),
|
||||
noFolderItems = listOf(),
|
||||
trashItemsCount = 0,
|
||||
totpItemsCount = 1,
|
||||
),
|
||||
actual,
|
||||
)
|
||||
@@ -107,6 +115,7 @@ class VaultDataExtensionsTest {
|
||||
)
|
||||
|
||||
val actual = vaultData.toViewState(
|
||||
isPremium = true,
|
||||
vaultFilterType = VaultFilterType.OrganizationVault(
|
||||
organizationId = "mockOrganizationId-1",
|
||||
organizationName = "Mock Organization 1",
|
||||
@@ -130,6 +139,7 @@ class VaultDataExtensionsTest {
|
||||
),
|
||||
noFolderItems = listOf(),
|
||||
trashItemsCount = 0,
|
||||
totpItemsCount = 1,
|
||||
),
|
||||
actual,
|
||||
)
|
||||
@@ -144,7 +154,10 @@ class VaultDataExtensionsTest {
|
||||
sendViewList = emptyList(),
|
||||
)
|
||||
|
||||
val actual = vaultData.toViewState(vaultFilterType = VaultFilterType.AllVaults)
|
||||
val actual = vaultData.toViewState(
|
||||
isPremium = true,
|
||||
vaultFilterType = VaultFilterType.AllVaults,
|
||||
)
|
||||
|
||||
assertEquals(
|
||||
VaultState.ViewState.NoItems,
|
||||
@@ -161,11 +174,78 @@ class VaultDataExtensionsTest {
|
||||
sendViewList = listOf(createMockSendView(number = 1)),
|
||||
)
|
||||
|
||||
val actual = vaultData.toViewState(vaultFilterType = VaultFilterType.AllVaults)
|
||||
val actual = vaultData.toViewState(
|
||||
isPremium = true,
|
||||
vaultFilterType = VaultFilterType.AllVaults,
|
||||
)
|
||||
|
||||
assertEquals(
|
||||
VaultState.ViewState.NoItems,
|
||||
actual,
|
||||
)
|
||||
}
|
||||
|
||||
@Suppress("MaxLineLength")
|
||||
@Test
|
||||
fun `toViewState should return 1 for totpItemsCount if user has premium and has one totp item`() {
|
||||
val vaultData = VaultData(
|
||||
cipherViewList = listOf(createMockCipherView(number = 1)),
|
||||
collectionViewList = listOf(),
|
||||
folderViewList = listOf(),
|
||||
sendViewList = listOf(),
|
||||
)
|
||||
|
||||
val actual = vaultData.toViewState(
|
||||
isPremium = true,
|
||||
vaultFilterType = VaultFilterType.AllVaults,
|
||||
)
|
||||
|
||||
assertEquals(
|
||||
VaultState.ViewState.Content(
|
||||
loginItemsCount = 1,
|
||||
cardItemsCount = 0,
|
||||
identityItemsCount = 0,
|
||||
secureNoteItemsCount = 0,
|
||||
favoriteItems = listOf(),
|
||||
folderItems = listOf(),
|
||||
collectionItems = listOf(),
|
||||
noFolderItems = listOf(),
|
||||
trashItemsCount = 0,
|
||||
totpItemsCount = 1,
|
||||
),
|
||||
actual,
|
||||
)
|
||||
}
|
||||
|
||||
@Suppress("MaxLineLength")
|
||||
@Test
|
||||
fun `toViewState should return 0 for totpItemsCount if user does not have premium and has any totp items`() {
|
||||
val vaultData = VaultData(
|
||||
cipherViewList = listOf(createMockCipherView(number = 1)),
|
||||
collectionViewList = listOf(),
|
||||
folderViewList = listOf(),
|
||||
sendViewList = listOf(),
|
||||
)
|
||||
|
||||
val actual = vaultData.toViewState(
|
||||
isPremium = false,
|
||||
vaultFilterType = VaultFilterType.AllVaults,
|
||||
)
|
||||
|
||||
assertEquals(
|
||||
VaultState.ViewState.Content(
|
||||
loginItemsCount = 1,
|
||||
cardItemsCount = 0,
|
||||
identityItemsCount = 0,
|
||||
secureNoteItemsCount = 0,
|
||||
favoriteItems = listOf(),
|
||||
folderItems = listOf(),
|
||||
collectionItems = listOf(),
|
||||
noFolderItems = listOf(),
|
||||
trashItemsCount = 0,
|
||||
totpItemsCount = 0,
|
||||
),
|
||||
actual,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user