mirror of
https://github.com/bitwarden/android.git
synced 2025-02-17 12:30:00 +03:00
Add send data to VaultDataStateFlow (#553)
This commit is contained in:
parent
70b5bdfe17
commit
84d8afd027
7 changed files with 71 additions and 2 deletions
|
@ -1,5 +1,6 @@
|
|||
package com.x8bit.bitwarden.data.platform.repository.util
|
||||
|
||||
import com.x8bit.bitwarden.data.platform.annotation.OmitFromCoverage
|
||||
import com.x8bit.bitwarden.data.platform.repository.model.DataState
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
|
@ -115,6 +116,7 @@ fun <T1, T2, R> combineDataStates(
|
|||
*
|
||||
* See [combineDataStates] for details.
|
||||
*/
|
||||
@OmitFromCoverage
|
||||
fun <T1, T2, T3, R> combineDataStates(
|
||||
dataState1: DataState<T1>,
|
||||
dataState2: DataState<T2>,
|
||||
|
@ -127,11 +129,35 @@ fun <T1, T2, T3, R> combineDataStates(
|
|||
transform(t1t2Pair.first, t1t2Pair.second, t3)
|
||||
}
|
||||
|
||||
/**
|
||||
* Combines the [dataState1], [dataState2], [dataState3], and [dataState4] [DataState]s together
|
||||
* using the provided [transform].
|
||||
*
|
||||
* See [combineDataStates] for details.
|
||||
*/
|
||||
@OmitFromCoverage
|
||||
fun <T1, T2, T3, T4, R> combineDataStates(
|
||||
dataState1: DataState<T1>,
|
||||
dataState2: DataState<T2>,
|
||||
dataState3: DataState<T3>,
|
||||
dataState4: DataState<T4>,
|
||||
transform: (t1: T1, t2: T2, t3: T3, t4: T4) -> R,
|
||||
): DataState<R> =
|
||||
dataState1
|
||||
.combineDataStatesWith(dataState2) { t1, t2 -> t1 to t2 }
|
||||
.combineDataStatesWith(dataState3) { t1t2Pair, t3 ->
|
||||
Triple(t1t2Pair.first, t1t2Pair.second, t3)
|
||||
}
|
||||
.combineDataStatesWith(dataState4) { t1t2t3Triple, t3 ->
|
||||
transform(t1t2t3Triple.first, t1t2t3Triple.second, t1t2t3Triple.third, t3)
|
||||
}
|
||||
|
||||
/**
|
||||
* Combines [dataState2] with the given [DataState] using the provided [transform].
|
||||
*
|
||||
* See [combineDataStates] for details.
|
||||
*/
|
||||
@OmitFromCoverage
|
||||
fun <T1, T2, R> DataState<T1>.combineDataStatesWith(
|
||||
dataState2: DataState<T2>,
|
||||
transform: (t1: T1, t2: T2) -> R,
|
||||
|
|
|
@ -107,16 +107,19 @@ class VaultRepositoryImpl(
|
|||
ciphersStateFlow,
|
||||
foldersStateFlow,
|
||||
collectionsStateFlow,
|
||||
) { ciphersDataState, foldersDataState, collectionsDataState ->
|
||||
sendDataStateFlow,
|
||||
) { ciphersDataState, foldersDataState, collectionsDataState, sendsDataState ->
|
||||
combineDataStates(
|
||||
ciphersDataState,
|
||||
foldersDataState,
|
||||
collectionsDataState,
|
||||
) { ciphersData, foldersData, collectionsData ->
|
||||
sendsDataState,
|
||||
) { ciphersData, foldersData, collectionsData, sendsData ->
|
||||
VaultData(
|
||||
cipherViewList = ciphersData,
|
||||
folderViewList = foldersData,
|
||||
collectionViewList = collectionsData,
|
||||
sendViewList = sendsData.sendViewList,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ package com.x8bit.bitwarden.data.vault.repository.model
|
|||
import com.bitwarden.core.CipherView
|
||||
import com.bitwarden.core.CollectionView
|
||||
import com.bitwarden.core.FolderView
|
||||
import com.bitwarden.core.SendView
|
||||
|
||||
/**
|
||||
* Represents decrypted vault data.
|
||||
|
@ -10,9 +11,11 @@ import com.bitwarden.core.FolderView
|
|||
* @param cipherViewList List of decrypted ciphers.
|
||||
* @param collectionViewList List of decrypted collections.
|
||||
* @param folderViewList List of decrypted folders.
|
||||
* @param sendViewList List of decrypted sends.
|
||||
*/
|
||||
data class VaultData(
|
||||
val cipherViewList: List<CipherView>,
|
||||
val collectionViewList: List<CollectionView>,
|
||||
val folderViewList: List<FolderView>,
|
||||
val sendViewList: List<SendView>,
|
||||
)
|
||||
|
|
|
@ -966,10 +966,12 @@ class VaultRepositoryTest {
|
|||
val ciphersFlow = bufferedMutableSharedFlow<List<SyncResponseJson.Cipher>>()
|
||||
val collectionsFlow = bufferedMutableSharedFlow<List<SyncResponseJson.Collection>>()
|
||||
val foldersFlow = bufferedMutableSharedFlow<List<SyncResponseJson.Folder>>()
|
||||
val sendsFlow = bufferedMutableSharedFlow<List<SyncResponseJson.Send>>()
|
||||
setupVaultDiskSourceFlows(
|
||||
ciphersFlow = ciphersFlow,
|
||||
collectionsFlow = collectionsFlow,
|
||||
foldersFlow = foldersFlow,
|
||||
sendsFlow = sendsFlow,
|
||||
)
|
||||
|
||||
vaultRepository.vaultDataStateFlow.test {
|
||||
|
@ -978,6 +980,7 @@ class VaultRepositoryTest {
|
|||
ciphersFlow.tryEmit(listOf(createMockCipher(number = 1)))
|
||||
collectionsFlow.tryEmit(listOf(createMockCollection(number = 1)))
|
||||
foldersFlow.tryEmit(listOf(createMockFolder(number = 1)))
|
||||
sendsFlow.tryEmit(listOf(createMockSend(number = 1)))
|
||||
|
||||
assertEquals(
|
||||
DataState.Loaded(
|
||||
|
@ -985,6 +988,7 @@ class VaultRepositoryTest {
|
|||
cipherViewList = listOf(createMockCipherView(number = 1)),
|
||||
collectionViewList = listOf(createMockCollectionView(number = 1)),
|
||||
folderViewList = listOf(createMockFolderView(number = 1)),
|
||||
sendViewList = listOf(createMockSendView(number = 1)),
|
||||
),
|
||||
),
|
||||
awaitItem(),
|
||||
|
|
|
@ -7,6 +7,7 @@ import com.x8bit.bitwarden.data.platform.repository.model.DataState
|
|||
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockCipherView
|
||||
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockCollectionView
|
||||
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockFolderView
|
||||
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockSendView
|
||||
import com.x8bit.bitwarden.data.vault.repository.VaultRepository
|
||||
import com.x8bit.bitwarden.data.vault.repository.model.VaultData
|
||||
import com.x8bit.bitwarden.ui.platform.base.BaseViewModelTest
|
||||
|
@ -102,6 +103,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
|
|||
),
|
||||
folderViewList = listOf(createMockFolderView(number = 1)),
|
||||
collectionViewList = listOf(createMockCollectionView(number = 1)),
|
||||
sendViewList = listOf(createMockSendView(number = 1)),
|
||||
),
|
||||
),
|
||||
)
|
||||
|
@ -129,6 +131,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
|
|||
cipherViewList = emptyList(),
|
||||
folderViewList = emptyList(),
|
||||
collectionViewList = emptyList(),
|
||||
sendViewList = emptyList(),
|
||||
),
|
||||
),
|
||||
)
|
||||
|
@ -148,6 +151,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
|
|||
cipherViewList = listOf(createMockCipherView(number = 1)),
|
||||
folderViewList = listOf(createMockFolderView(number = 1)),
|
||||
collectionViewList = listOf(createMockCollectionView(number = 1)),
|
||||
sendViewList = listOf(createMockSendView(number = 1)),
|
||||
),
|
||||
),
|
||||
)
|
||||
|
@ -180,6 +184,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
|
|||
cipherViewList = listOf(createMockCipherView(number = 1, isDeleted = false)),
|
||||
folderViewList = listOf(createMockFolderView(number = 1)),
|
||||
collectionViewList = listOf(createMockCollectionView(number = 1)),
|
||||
sendViewList = listOf(createMockSendView(number = 1)),
|
||||
),
|
||||
),
|
||||
)
|
||||
|
@ -206,6 +211,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
|
|||
cipherViewList = listOf(createMockCipherView(number = 1)),
|
||||
folderViewList = listOf(createMockFolderView(number = 1)),
|
||||
collectionViewList = listOf(createMockCollectionView(number = 1)),
|
||||
sendViewList = listOf(createMockSendView(number = 1)),
|
||||
),
|
||||
),
|
||||
)
|
||||
|
@ -226,6 +232,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
|
|||
cipherViewList = listOf(createMockCipherView(number = 1)),
|
||||
folderViewList = listOf(createMockFolderView(number = 1)),
|
||||
collectionViewList = listOf(createMockCollectionView(number = 1)),
|
||||
sendViewList = listOf(createMockSendView(number = 1)),
|
||||
),
|
||||
),
|
||||
)
|
||||
|
@ -266,6 +273,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
|
|||
cipherViewList = listOf(createMockCipherView(number = 1, isDeleted = false)),
|
||||
folderViewList = listOf(createMockFolderView(number = 1)),
|
||||
collectionViewList = listOf(createMockCollectionView(number = 1)),
|
||||
sendViewList = listOf(createMockSendView(number = 1)),
|
||||
),
|
||||
error = IllegalStateException(),
|
||||
),
|
||||
|
@ -293,6 +301,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
|
|||
cipherViewList = emptyList(),
|
||||
folderViewList = emptyList(),
|
||||
collectionViewList = emptyList(),
|
||||
sendViewList = emptyList(),
|
||||
),
|
||||
error = IllegalStateException(),
|
||||
),
|
||||
|
@ -316,6 +325,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
|
|||
cipherViewList = listOf(createMockCipherView(number = 1, isDeleted = true)),
|
||||
folderViewList = listOf(createMockFolderView(number = 1)),
|
||||
collectionViewList = listOf(createMockCollectionView(number = 1)),
|
||||
sendViewList = listOf(createMockSendView(number = 1)),
|
||||
),
|
||||
error = IllegalStateException(),
|
||||
),
|
||||
|
@ -359,6 +369,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
|
|||
cipherViewList = listOf(createMockCipherView(number = 1, isDeleted = false)),
|
||||
folderViewList = listOf(createMockFolderView(number = 1)),
|
||||
collectionViewList = listOf(createMockCollectionView(number = 1)),
|
||||
sendViewList = listOf(createMockSendView(number = 1)),
|
||||
),
|
||||
),
|
||||
)
|
||||
|
@ -385,6 +396,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
|
|||
cipherViewList = emptyList(),
|
||||
folderViewList = emptyList(),
|
||||
collectionViewList = emptyList(),
|
||||
sendViewList = emptyList(),
|
||||
),
|
||||
),
|
||||
)
|
||||
|
@ -407,6 +419,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
|
|||
cipherViewList = listOf(createMockCipherView(number = 1, isDeleted = true)),
|
||||
folderViewList = listOf(createMockFolderView(number = 1)),
|
||||
collectionViewList = listOf(createMockCollectionView(number = 1)),
|
||||
sendViewList = listOf(createMockSendView(number = 1)),
|
||||
),
|
||||
),
|
||||
)
|
||||
|
|
|
@ -12,6 +12,7 @@ import com.x8bit.bitwarden.data.platform.repository.model.Environment
|
|||
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockCipherView
|
||||
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockCollectionView
|
||||
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockFolderView
|
||||
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockSendView
|
||||
import com.x8bit.bitwarden.data.vault.repository.VaultRepository
|
||||
import com.x8bit.bitwarden.data.vault.repository.model.VaultData
|
||||
import com.x8bit.bitwarden.ui.platform.base.BaseViewModelTest
|
||||
|
@ -321,6 +322,7 @@ class VaultViewModelTest : BaseViewModelTest() {
|
|||
cipherViewList = listOf(createMockCipherView(number = 1)),
|
||||
collectionViewList = listOf(createMockCollectionView(number = 1)),
|
||||
folderViewList = listOf(createMockFolderView(number = 1)),
|
||||
sendViewList = listOf(createMockSendView(number = 1)),
|
||||
)
|
||||
mutableVaultDataStateFlow.tryEmit(
|
||||
value = DataState.Loaded(
|
||||
|
@ -375,6 +377,7 @@ class VaultViewModelTest : BaseViewModelTest() {
|
|||
cipherViewList = listOf(createMockCipherView(number = 1)),
|
||||
collectionViewList = listOf(createMockCollectionView(number = 1)),
|
||||
folderViewList = listOf(createMockFolderView(number = 1)),
|
||||
sendViewList = listOf(createMockSendView(number = 1)),
|
||||
),
|
||||
),
|
||||
)
|
||||
|
@ -438,6 +441,7 @@ class VaultViewModelTest : BaseViewModelTest() {
|
|||
cipherViewList = listOf(createMockCipherView(number = 1)),
|
||||
collectionViewList = emptyList(),
|
||||
folderViewList = emptyList(),
|
||||
sendViewList = emptyList(),
|
||||
),
|
||||
),
|
||||
)
|
||||
|
@ -458,6 +462,7 @@ class VaultViewModelTest : BaseViewModelTest() {
|
|||
cipherViewList = emptyList(),
|
||||
collectionViewList = emptyList(),
|
||||
folderViewList = emptyList(),
|
||||
sendViewList = emptyList(),
|
||||
),
|
||||
),
|
||||
)
|
||||
|
@ -484,6 +489,7 @@ class VaultViewModelTest : BaseViewModelTest() {
|
|||
cipherViewList = emptyList(),
|
||||
collectionViewList = emptyList(),
|
||||
folderViewList = emptyList(),
|
||||
sendViewList = emptyList(),
|
||||
),
|
||||
)
|
||||
|
||||
|
@ -503,6 +509,7 @@ class VaultViewModelTest : BaseViewModelTest() {
|
|||
cipherViewList = listOf(createMockCipherView(number = 1)),
|
||||
collectionViewList = listOf(createMockCollectionView(number = 1)),
|
||||
folderViewList = listOf(createMockFolderView(number = 1)),
|
||||
sendViewList = listOf(createMockSendView(number = 1)),
|
||||
),
|
||||
),
|
||||
)
|
||||
|
@ -547,6 +554,7 @@ class VaultViewModelTest : BaseViewModelTest() {
|
|||
cipherViewList = emptyList(),
|
||||
collectionViewList = emptyList(),
|
||||
folderViewList = emptyList(),
|
||||
sendViewList = emptyList(),
|
||||
),
|
||||
),
|
||||
)
|
||||
|
@ -598,6 +606,7 @@ class VaultViewModelTest : BaseViewModelTest() {
|
|||
cipherViewList = listOf(createMockCipherView(number = 1)),
|
||||
collectionViewList = listOf(createMockCollectionView(number = 1)),
|
||||
folderViewList = listOf(createMockFolderView(number = 1)),
|
||||
sendViewList = listOf(createMockSendView(number = 1)),
|
||||
),
|
||||
),
|
||||
)
|
||||
|
@ -649,6 +658,7 @@ class VaultViewModelTest : BaseViewModelTest() {
|
|||
cipherViewList = emptyList(),
|
||||
collectionViewList = emptyList(),
|
||||
folderViewList = emptyList(),
|
||||
sendViewList = emptyList(),
|
||||
),
|
||||
),
|
||||
)
|
||||
|
@ -693,6 +703,7 @@ class VaultViewModelTest : BaseViewModelTest() {
|
|||
cipherViewList = listOf(createMockCipherView(number = 1)),
|
||||
collectionViewList = listOf(createMockCollectionView(number = 1)),
|
||||
folderViewList = listOf(createMockFolderView(number = 1)),
|
||||
sendViewList = listOf(createMockSendView(number = 1)),
|
||||
),
|
||||
),
|
||||
)
|
||||
|
@ -743,6 +754,7 @@ class VaultViewModelTest : BaseViewModelTest() {
|
|||
cipherViewList = emptyList(),
|
||||
collectionViewList = emptyList(),
|
||||
folderViewList = emptyList(),
|
||||
sendViewList = emptyList(),
|
||||
),
|
||||
),
|
||||
)
|
||||
|
@ -784,6 +796,7 @@ class VaultViewModelTest : BaseViewModelTest() {
|
|||
cipherViewList = emptyList(),
|
||||
collectionViewList = emptyList(),
|
||||
folderViewList = emptyList(),
|
||||
sendViewList = emptyList(),
|
||||
),
|
||||
)
|
||||
|
||||
|
@ -940,6 +953,7 @@ class VaultViewModelTest : BaseViewModelTest() {
|
|||
cipherViewList = emptyList(),
|
||||
collectionViewList = emptyList(),
|
||||
folderViewList = emptyList(),
|
||||
sendViewList = emptyList(),
|
||||
),
|
||||
)
|
||||
val initialState = DEFAULT_STATE.copy(
|
||||
|
|
|
@ -3,6 +3,7 @@ package com.x8bit.bitwarden.ui.vault.feature.vault.util
|
|||
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockCipherView
|
||||
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockCollectionView
|
||||
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockFolderView
|
||||
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockSendView
|
||||
import com.x8bit.bitwarden.data.vault.repository.model.VaultData
|
||||
import com.x8bit.bitwarden.ui.platform.base.util.asText
|
||||
import com.x8bit.bitwarden.ui.vault.feature.vault.VaultState
|
||||
|
@ -19,6 +20,7 @@ class VaultDataExtensionsTest {
|
|||
cipherViewList = listOf(createMockCipherView(number = 1)),
|
||||
collectionViewList = listOf(createMockCollectionView(number = 1)),
|
||||
folderViewList = listOf(createMockFolderView(number = 1)),
|
||||
sendViewList = listOf(createMockSendView(number = 1)),
|
||||
)
|
||||
|
||||
val actual = vaultData.toViewState(vaultFilterType = VaultFilterType.AllVaults)
|
||||
|
@ -61,6 +63,7 @@ class VaultDataExtensionsTest {
|
|||
),
|
||||
collectionViewList = listOf(createMockCollectionView(number = 1)),
|
||||
folderViewList = listOf(createMockFolderView(number = 1)),
|
||||
sendViewList = listOf(createMockSendView(number = 1)),
|
||||
)
|
||||
|
||||
val actual = vaultData.toViewState(vaultFilterType = VaultFilterType.MyVault)
|
||||
|
@ -100,6 +103,7 @@ class VaultDataExtensionsTest {
|
|||
createMockCollectionView(number = 2),
|
||||
),
|
||||
folderViewList = listOf(createMockFolderView(number = 1)),
|
||||
sendViewList = listOf(createMockSendView(number = 1)),
|
||||
)
|
||||
|
||||
val actual = vaultData.toViewState(
|
||||
|
@ -137,6 +141,7 @@ class VaultDataExtensionsTest {
|
|||
cipherViewList = emptyList(),
|
||||
collectionViewList = emptyList(),
|
||||
folderViewList = emptyList(),
|
||||
sendViewList = emptyList(),
|
||||
)
|
||||
|
||||
val actual = vaultData.toViewState(vaultFilterType = VaultFilterType.AllVaults)
|
||||
|
@ -153,6 +158,7 @@ class VaultDataExtensionsTest {
|
|||
cipherViewList = listOf(createMockCipherView(number = 1).copy(id = null)),
|
||||
collectionViewList = listOf(createMockCollectionView(number = 1)),
|
||||
folderViewList = listOf(createMockFolderView(number = 1)),
|
||||
sendViewList = listOf(createMockSendView(number = 1)),
|
||||
)
|
||||
|
||||
val actual = vaultData.toViewState(vaultFilterType = VaultFilterType.AllVaults)
|
||||
|
|
Loading…
Add table
Reference in a new issue