mirror of
https://github.com/bitwarden/android.git
synced 2025-03-15 18:58:59 +03:00
Fix nullability bug in combineDataStates (#857)
This commit is contained in:
parent
d12776483d
commit
79988db49a
4 changed files with 38 additions and 11 deletions
|
@ -96,16 +96,14 @@ fun <T1, T2, R> combineDataStates(
|
|||
|
||||
// Pending state for everything while any one piece of data is updating.
|
||||
dataState1 is DataState.Pending || dataState2 is DataState.Pending -> {
|
||||
DataState.Pending(
|
||||
transform(requireNotNull(dataState1.data), requireNotNull(dataState2.data)),
|
||||
)
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
DataState.Pending(transform(dataState1.data as T1, dataState2.data as T2))
|
||||
}
|
||||
|
||||
// Both states are Loaded and have data
|
||||
else -> {
|
||||
DataState.Loaded(
|
||||
transform(requireNotNull(dataState1.data), requireNotNull(dataState2.data)),
|
||||
)
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
DataState.Loaded(transform(dataState1.data as T1, dataState2.data as T2))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -437,11 +437,10 @@ class VaultRepositoryImpl(
|
|||
cipher = cipher,
|
||||
)
|
||||
.map { totpCodeDataState ->
|
||||
val totpCodeData = totpCodeDataState.data
|
||||
combineDataStates(
|
||||
totpCodeDataState.map { Unit },
|
||||
totpCodeDataState,
|
||||
cipherDataState,
|
||||
) { _, _ ->
|
||||
) { totpCodeData, _ ->
|
||||
// Just return the verification items; we are only combining the
|
||||
// DataStates to know the overall state.
|
||||
totpCodeData
|
||||
|
|
|
@ -12,7 +12,6 @@ import com.x8bit.bitwarden.data.auth.repository.model.ValidatePasswordResult
|
|||
import com.x8bit.bitwarden.data.platform.manager.clipboard.BitwardenClipboardManager
|
||||
import com.x8bit.bitwarden.data.platform.repository.model.DataState
|
||||
import com.x8bit.bitwarden.data.platform.repository.util.combineDataStates
|
||||
import com.x8bit.bitwarden.data.platform.repository.util.map
|
||||
import com.x8bit.bitwarden.data.vault.repository.VaultRepository
|
||||
import com.x8bit.bitwarden.data.vault.repository.model.DeleteCipherResult
|
||||
import com.x8bit.bitwarden.data.vault.repository.model.RestoreCipherResult
|
||||
|
@ -76,7 +75,7 @@ class VaultItemViewModel @Inject constructor(
|
|||
userState = userState,
|
||||
vaultDataState = combineDataStates(
|
||||
cipherViewState,
|
||||
authCodeState.map { Unit },
|
||||
authCodeState,
|
||||
) { vaultData, _ ->
|
||||
VaultItemStateData(
|
||||
cipher = vaultData,
|
||||
|
|
|
@ -234,6 +234,22 @@ class DataStateExtensionsTest {
|
|||
assertEquals(DataState.Pending("data" to 5), result)
|
||||
}
|
||||
|
||||
@Suppress("MaxLineLength")
|
||||
@Test
|
||||
fun `combineDataStates should return Pending when both dataStates are Pending with null data`() {
|
||||
val dataState1: DataState<String?> = DataState.Pending(null)
|
||||
val dataState2: DataState<Int?> = DataState.Pending(null)
|
||||
|
||||
val result = combineDataStates(
|
||||
dataState1 = dataState1,
|
||||
dataState2 = dataState2,
|
||||
) { data1, data2 ->
|
||||
data1 to data2
|
||||
}
|
||||
|
||||
assertEquals(DataState.Pending<Pair<String?, Int?>>(null to null), result)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `combineDataStates should return Loaded when the both dataStates are Loaded`() {
|
||||
val dataState1 = DataState.Loaded("data")
|
||||
|
@ -248,4 +264,19 @@ class DataStateExtensionsTest {
|
|||
|
||||
assertEquals(DataState.Loaded("data" to 5), result)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `combineDataStates should return Loaded when both dataStates are Loaded with null data`() {
|
||||
val dataState1: DataState<String?> = DataState.Loaded(null)
|
||||
val dataState2: DataState<Int?> = DataState.Loaded(null)
|
||||
|
||||
val result = combineDataStates(
|
||||
dataState1 = dataState1,
|
||||
dataState2 = dataState2,
|
||||
) { data1, data2 ->
|
||||
data1 to data2
|
||||
}
|
||||
|
||||
assertEquals(DataState.Loaded<Pair<String?, Int?>>(null to null), result)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue