BIT-1400 Fixing the vault item count to not include trash items (#722)

This commit is contained in:
Oleg Semenenko
2024-01-22 22:45:40 -06:00
committed by GitHub
parent 15a2bd93fe
commit 42f7776e68
5 changed files with 59 additions and 11 deletions

View File

@@ -19,13 +19,19 @@ private const val IOS_URI = "iosapp://"
/**
* Transforms [VaultData] into [VaultState.ViewState] using the given [vaultFilterType].
*/
@Suppress("LongMethod")
fun VaultData.toViewState(
isPremium: Boolean,
isIconLoadingDisabled: Boolean,
baseIconUrl: String,
vaultFilterType: VaultFilterType,
): VaultState.ViewState {
val filteredCipherViewList = cipherViewList.toFilteredList(vaultFilterType)
val filteredCipherViewListWithDeletedItems =
cipherViewList.toFilteredList(vaultFilterType)
val filteredCipherViewList = filteredCipherViewListWithDeletedItems
.filter { it.deletedDate == null }
val filteredFolderViewList = folderViewList.toFilteredList(vaultFilterType)
val filteredCollectionViewList = collectionViewList.toFilteredList(vaultFilterType)
@@ -56,7 +62,10 @@ fun VaultData.toViewState(
id = folderView.id,
name = folderView.name.asText(),
itemCount = filteredCipherViewList
.count { !it.id.isNullOrBlank() && folderView.id == it.folderId },
.count {
!it.id.isNullOrBlank() &&
folderView.id == it.folderId
},
)
},
noFolderItems = filteredCipherViewList
@@ -80,8 +89,9 @@ fun VaultData.toViewState(
},
)
},
// TODO need to populate trash item count in BIT-969
trashItemsCount = 0,
trashItemsCount = filteredCipherViewListWithDeletedItems.count {
it.deletedDate != null
},
)
}
}

View File

@@ -25,7 +25,7 @@ import java.time.ZonedDateTime
*/
fun createMockCipherView(
number: Int,
isDeleted: Boolean = true,
isDeleted: Boolean = false,
cipherType: CipherType = CipherType.LOGIN,
): CipherView =
CipherView(

View File

@@ -414,7 +414,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
runTest {
val dataState = DataState.Loaded(
data = VaultData(
cipherViewList = listOf(createMockCipherView(number = 1)),
cipherViewList = listOf(createMockCipherView(number = 1, isDeleted = true)),
folderViewList = listOf(createMockFolderView(number = 1)),
collectionViewList = listOf(createMockCollectionView(number = 1)),
sendViewList = listOf(createMockSendView(number = 1)),
@@ -480,7 +480,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
mutableVaultDataStateFlow.tryEmit(
value = DataState.Pending(
data = VaultData(
cipherViewList = listOf(createMockCipherView(number = 1)),
cipherViewList = listOf(createMockCipherView(number = 1, isDeleted = true)),
folderViewList = listOf(createMockFolderView(number = 1)),
collectionViewList = listOf(createMockCollectionView(number = 1)),
sendViewList = listOf(createMockSendView(number = 1)),
@@ -501,7 +501,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
mutableVaultDataStateFlow.tryEmit(
value = DataState.Pending(
data = VaultData(
cipherViewList = listOf(createMockCipherView(number = 1)),
cipherViewList = listOf(createMockCipherView(number = 1, isDeleted = true)),
folderViewList = listOf(createMockFolderView(number = 1)),
collectionViewList = listOf(createMockCollectionView(number = 1)),
sendViewList = listOf(createMockSendView(number = 1)),

View File

@@ -381,4 +381,42 @@ class VaultDataExtensionsTest {
unmockkStatic(Uri::class)
}
@Suppress("MaxLineLength")
@Test
fun `toViewState should only count deleted items for the trash count`() {
val vaultData = VaultData(
cipherViewList = listOf(
createMockCipherView(number = 1, isDeleted = true),
createMockCipherView(number = 2, isDeleted = true),
createMockCipherView(number = 3, isDeleted = false),
),
collectionViewList = listOf(),
folderViewList = listOf(),
sendViewList = listOf(),
)
val actual = vaultData.toViewState(
isPremium = true,
isIconLoadingDisabled = false,
baseIconUrl = Environment.Us.environmentUrlData.baseIconUrl,
vaultFilterType = VaultFilterType.AllVaults,
)
assertEquals(
VaultState.ViewState.Content(
loginItemsCount = 1,
cardItemsCount = 0,
identityItemsCount = 0,
secureNoteItemsCount = 0,
favoriteItems = listOf(),
folderItems = listOf(),
collectionItems = listOf(),
noFolderItems = listOf(),
trashItemsCount = 2,
totpItemsCount = 1,
),
actual,
)
}
}

View File

@@ -207,7 +207,7 @@ class VerificationCodeViewModelTest : BaseViewModelTest() {
runTest {
val dataState = DataState.Pending(
data = VaultData(
cipherViewList = listOf(createMockCipherView(number = 1)),
cipherViewList = listOf(createMockCipherView(number = 1, isDeleted = true)),
folderViewList = listOf(createMockFolderView(number = 1)),
collectionViewList = listOf(createMockCollectionView(number = 1)),
sendViewList = listOf(createMockSendView(number = 1)),
@@ -226,7 +226,7 @@ class VerificationCodeViewModelTest : BaseViewModelTest() {
fun `vaultDataStateFlow Pending with trash data should call NavigateBack event`() = runTest {
val dataState = DataState.Pending(
data = VaultData(
cipherViewList = listOf(createMockCipherView(number = 1)),
cipherViewList = listOf(createMockCipherView(number = 1, isDeleted = true)),
folderViewList = listOf(createMockFolderView(number = 1)),
collectionViewList = listOf(createMockCollectionView(number = 1)),
sendViewList = listOf(createMockSendView(number = 1)),
@@ -454,7 +454,7 @@ class VerificationCodeViewModelTest : BaseViewModelTest() {
runTest {
val dataState = DataState.Loaded(
data = VaultData(
cipherViewList = listOf(createMockCipherView(number = 1)),
cipherViewList = listOf(createMockCipherView(number = 1, isDeleted = true)),
folderViewList = listOf(createMockFolderView(number = 1)),
collectionViewList = listOf(createMockCollectionView(number = 1)),
sendViewList = listOf(createMockSendView(number = 1)),