mirror of
https://github.com/bitwarden/android.git
synced 2026-05-12 23:01:13 -05:00
BIT-1400 Fixing the vault item count to not include trash items (#722)
This commit is contained in:
@@ -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
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ import java.time.ZonedDateTime
|
||||
*/
|
||||
fun createMockCipherView(
|
||||
number: Int,
|
||||
isDeleted: Boolean = true,
|
||||
isDeleted: Boolean = false,
|
||||
cipherType: CipherType = CipherType.LOGIN,
|
||||
): CipherView =
|
||||
CipherView(
|
||||
|
||||
@@ -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)),
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)),
|
||||
|
||||
Reference in New Issue
Block a user