mirror of
https://github.com/bitwarden/android.git
synced 2025-03-15 18:58:59 +03:00
Replace the generic Result class in the auth repo with specific result classes (#301)
This commit is contained in:
parent
c9c313230f
commit
798fdf3e19
9 changed files with 163 additions and 65 deletions
|
@ -1,8 +1,9 @@
|
|||
package com.x8bit.bitwarden.data.auth.repository
|
||||
|
||||
import com.x8bit.bitwarden.data.auth.datasource.sdk.model.PasswordStrength
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.AuthState
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.DeleteAccountResult
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.LoginResult
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.PasswordStrengthResult
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.RegisterResult
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.UserState
|
||||
import com.x8bit.bitwarden.data.auth.repository.util.CaptchaCallbackTokenResult
|
||||
|
@ -38,7 +39,7 @@ interface AuthRepository : AuthenticatorProvider {
|
|||
/**
|
||||
* Attempt to delete the current account and logout them out upon success.
|
||||
*/
|
||||
suspend fun deleteAccount(password: String): Result<Unit>
|
||||
suspend fun deleteAccount(password: String): DeleteAccountResult
|
||||
|
||||
/**
|
||||
* Attempt to login with the given email and password. Updated access token will be reflected
|
||||
|
@ -74,5 +75,5 @@ interface AuthRepository : AuthenticatorProvider {
|
|||
/**
|
||||
* Get the password strength for the given [email] and [password] combo.
|
||||
*/
|
||||
suspend fun getPasswordStrength(email: String, password: String): Result<PasswordStrength>
|
||||
suspend fun getPasswordStrength(email: String, password: String): PasswordStrengthResult
|
||||
}
|
||||
|
|
|
@ -15,7 +15,9 @@ import com.x8bit.bitwarden.data.auth.datasource.sdk.AuthSdkSource
|
|||
import com.x8bit.bitwarden.data.auth.datasource.sdk.model.PasswordStrength
|
||||
import com.x8bit.bitwarden.data.auth.datasource.sdk.util.toKdfTypeJson
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.AuthState
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.DeleteAccountResult
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.LoginResult
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.PasswordStrengthResult
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.RegisterResult
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.UserState
|
||||
import com.x8bit.bitwarden.data.auth.repository.util.CaptchaCallbackTokenResult
|
||||
|
@ -27,7 +29,6 @@ import com.x8bit.bitwarden.data.auth.util.toSdkParams
|
|||
import com.x8bit.bitwarden.data.platform.manager.dispatcher.DispatcherManager
|
||||
import com.x8bit.bitwarden.data.platform.repository.EnvironmentRepository
|
||||
import com.x8bit.bitwarden.data.platform.util.asFailure
|
||||
import com.x8bit.bitwarden.data.platform.util.asSuccess
|
||||
import com.x8bit.bitwarden.data.platform.util.flatMap
|
||||
import com.x8bit.bitwarden.data.vault.repository.VaultRepository
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
|
@ -107,9 +108,9 @@ class AuthRepositoryImpl constructor(
|
|||
authDiskSource.rememberedEmailAddress = value
|
||||
}
|
||||
|
||||
override suspend fun deleteAccount(password: String): Result<Unit> {
|
||||
override suspend fun deleteAccount(password: String): DeleteAccountResult {
|
||||
val profile = authDiskSource.userState?.activeAccount?.profile
|
||||
?: return IllegalStateException("Not logged in.").asFailure()
|
||||
?: return DeleteAccountResult.Error
|
||||
return authSdkSource
|
||||
.hashPassword(
|
||||
email = profile.email,
|
||||
|
@ -118,6 +119,10 @@ class AuthRepositoryImpl constructor(
|
|||
)
|
||||
.flatMap { hashedPassword -> accountsService.deleteAccount(hashedPassword) }
|
||||
.onSuccess { logout() }
|
||||
.fold(
|
||||
onFailure = { DeleteAccountResult.Error },
|
||||
onSuccess = { DeleteAccountResult.Success },
|
||||
)
|
||||
}
|
||||
|
||||
override suspend fun login(
|
||||
|
@ -322,17 +327,18 @@ class AuthRepositoryImpl constructor(
|
|||
override suspend fun getPasswordStrength(
|
||||
email: String,
|
||||
password: String,
|
||||
): Result<PasswordStrength> {
|
||||
): PasswordStrengthResult {
|
||||
// TODO: Replace with SDK call (BIT-964)
|
||||
// Ex: return authSdkSource.passwordStrength(email, password)
|
||||
val length = password.length
|
||||
return when {
|
||||
length <= 3 -> PasswordStrength.LEVEL_0
|
||||
length <= 6 -> PasswordStrength.LEVEL_1
|
||||
length <= 9 -> PasswordStrength.LEVEL_2
|
||||
length <= 11 -> PasswordStrength.LEVEL_3
|
||||
else -> PasswordStrength.LEVEL_4
|
||||
}
|
||||
.asSuccess()
|
||||
return PasswordStrengthResult.Success(
|
||||
passwordStrength = when {
|
||||
length <= 3 -> PasswordStrength.LEVEL_0
|
||||
length <= 6 -> PasswordStrength.LEVEL_1
|
||||
length <= 9 -> PasswordStrength.LEVEL_2
|
||||
length <= 11 -> PasswordStrength.LEVEL_3
|
||||
else -> PasswordStrength.LEVEL_4
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
package com.x8bit.bitwarden.data.auth.repository.model
|
||||
|
||||
/**
|
||||
* Models result of deleting an account.
|
||||
*/
|
||||
sealed class DeleteAccountResult {
|
||||
/**
|
||||
* Delete succeeded.
|
||||
*/
|
||||
data object Success : DeleteAccountResult()
|
||||
|
||||
/**
|
||||
* There was an error deleting the account.
|
||||
*/
|
||||
data object Error : DeleteAccountResult()
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
package com.x8bit.bitwarden.data.auth.repository.model
|
||||
|
||||
import com.x8bit.bitwarden.data.auth.datasource.sdk.model.PasswordStrength
|
||||
|
||||
/**
|
||||
* Models result of determining the strength of a password.
|
||||
*/
|
||||
sealed class PasswordStrengthResult {
|
||||
/**
|
||||
* The contains the password strength.
|
||||
*/
|
||||
data class Success(
|
||||
val passwordStrength: PasswordStrength,
|
||||
) : PasswordStrengthResult()
|
||||
|
||||
/**
|
||||
* There was an error determining the password strength.
|
||||
*/
|
||||
data object Error : PasswordStrengthResult()
|
||||
}
|
|
@ -7,6 +7,7 @@ import androidx.lifecycle.viewModelScope
|
|||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.auth.datasource.sdk.model.PasswordStrength
|
||||
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.PasswordStrengthResult
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.RegisterResult
|
||||
import com.x8bit.bitwarden.data.auth.repository.util.CaptchaCallbackTokenResult
|
||||
import com.x8bit.bitwarden.data.auth.repository.util.generateUriForCaptcha
|
||||
|
@ -111,18 +112,24 @@ class CreateAccountViewModel @Inject constructor(
|
|||
}
|
||||
|
||||
private fun handlePasswordStrengthResult(action: ReceivePasswordStrengthResult) {
|
||||
action.result.onSuccess {
|
||||
val updatedState = when (it) {
|
||||
PasswordStrength.LEVEL_0 -> PasswordStrengthState.WEAK_1
|
||||
PasswordStrength.LEVEL_1 -> PasswordStrengthState.WEAK_2
|
||||
PasswordStrength.LEVEL_2 -> PasswordStrengthState.WEAK_3
|
||||
PasswordStrength.LEVEL_3 -> PasswordStrengthState.GOOD
|
||||
PasswordStrength.LEVEL_4 -> PasswordStrengthState.STRONG
|
||||
when (val result = action.result) {
|
||||
is PasswordStrengthResult.Success -> {
|
||||
val updatedState = when (result.passwordStrength) {
|
||||
PasswordStrength.LEVEL_0 -> PasswordStrengthState.WEAK_1
|
||||
PasswordStrength.LEVEL_1 -> PasswordStrengthState.WEAK_2
|
||||
PasswordStrength.LEVEL_2 -> PasswordStrengthState.WEAK_3
|
||||
PasswordStrength.LEVEL_3 -> PasswordStrengthState.GOOD
|
||||
PasswordStrength.LEVEL_4 -> PasswordStrengthState.STRONG
|
||||
}
|
||||
mutableStateFlow.update { oldState ->
|
||||
oldState.copy(
|
||||
passwordStrengthState = updatedState,
|
||||
)
|
||||
}
|
||||
}
|
||||
mutableStateFlow.update { oldState ->
|
||||
oldState.copy(
|
||||
passwordStrengthState = updatedState,
|
||||
)
|
||||
|
||||
PasswordStrengthResult.Error -> {
|
||||
// TODO: Assess possible error conditions (BIT-964)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -510,7 +517,7 @@ sealed class CreateAccountAction {
|
|||
* Indicates a password strength result has been received.
|
||||
*/
|
||||
data class ReceivePasswordStrengthResult(
|
||||
val result: Result<PasswordStrength>,
|
||||
val result: PasswordStrengthResult,
|
||||
) : Internal()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ import androidx.lifecycle.SavedStateHandle
|
|||
import androidx.lifecycle.viewModelScope
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.DeleteAccountResult
|
||||
import com.x8bit.bitwarden.ui.platform.base.BaseViewModel
|
||||
import com.x8bit.bitwarden.ui.platform.base.util.Text
|
||||
import com.x8bit.bitwarden.ui.platform.base.util.asText
|
||||
|
@ -74,12 +75,13 @@ class DeleteAccountViewModel @Inject constructor(
|
|||
private fun handleDeleteAccountComplete(
|
||||
action: DeleteAccountAction.Internal.DeleteAccountComplete,
|
||||
) {
|
||||
action.result.fold(
|
||||
onSuccess = {
|
||||
when (action.result) {
|
||||
DeleteAccountResult.Success -> {
|
||||
mutableStateFlow.update { it.copy(dialog = null) }
|
||||
// TODO: Display a dialog confirming account deletion (BIT-1184)
|
||||
},
|
||||
onFailure = {
|
||||
}
|
||||
|
||||
DeleteAccountResult.Error -> {
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialog = DeleteAccountState.DeleteAccountDialog.Error(
|
||||
|
@ -87,8 +89,8 @@ class DeleteAccountViewModel @Inject constructor(
|
|||
),
|
||||
)
|
||||
}
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -171,7 +173,7 @@ sealed class DeleteAccountAction {
|
|||
* Indicates that the delete account request has completed.
|
||||
*/
|
||||
data class DeleteAccountComplete(
|
||||
val result: Result<Unit>,
|
||||
val result: DeleteAccountResult,
|
||||
) : Internal()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,7 +25,9 @@ import com.x8bit.bitwarden.data.auth.datasource.sdk.model.PasswordStrength.LEVEL
|
|||
import com.x8bit.bitwarden.data.auth.datasource.sdk.model.PasswordStrength.LEVEL_3
|
||||
import com.x8bit.bitwarden.data.auth.datasource.sdk.model.PasswordStrength.LEVEL_4
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.AuthState
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.DeleteAccountResult
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.LoginResult
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.PasswordStrengthResult
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.RegisterResult
|
||||
import com.x8bit.bitwarden.data.auth.repository.util.CaptchaCallbackTokenResult
|
||||
import com.x8bit.bitwarden.data.auth.repository.util.toSdkParams
|
||||
|
@ -187,7 +189,7 @@ class AuthRepositoryTest {
|
|||
fun `delete account fails if not logged in`() = runTest {
|
||||
val masterPassword = "hello world"
|
||||
val result = repository.deleteAccount(password = masterPassword)
|
||||
assertTrue(result.isFailure)
|
||||
assertEquals(DeleteAccountResult.Error, result)
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -201,7 +203,7 @@ class AuthRepositoryTest {
|
|||
|
||||
val result = repository.deleteAccount(password = masterPassword)
|
||||
|
||||
assertTrue(result.isFailure)
|
||||
assertEquals(DeleteAccountResult.Error, result)
|
||||
coVerify {
|
||||
authSdkSource.hashPassword(EMAIL, masterPassword, kdf)
|
||||
}
|
||||
|
@ -222,7 +224,7 @@ class AuthRepositoryTest {
|
|||
|
||||
val result = repository.deleteAccount(password = masterPassword)
|
||||
|
||||
assertTrue(result.isFailure)
|
||||
assertEquals(DeleteAccountResult.Error, result)
|
||||
coVerify {
|
||||
authSdkSource.hashPassword(EMAIL, masterPassword, kdf)
|
||||
accountsService.deleteAccount(hashedMasterPassword)
|
||||
|
@ -244,7 +246,7 @@ class AuthRepositoryTest {
|
|||
|
||||
val result = repository.deleteAccount(password = masterPassword)
|
||||
|
||||
assertTrue(result.isSuccess)
|
||||
assertEquals(DeleteAccountResult.Success, result)
|
||||
coVerify {
|
||||
authSdkSource.hashPassword(EMAIL, masterPassword, kdf)
|
||||
accountsService.deleteAccount(hashedMasterPassword)
|
||||
|
@ -962,22 +964,58 @@ class AuthRepositoryTest {
|
|||
@Test
|
||||
fun `getPasswordStrength should be based on password length`() = runTest {
|
||||
// TODO: Replace with SDK call (BIT-964)
|
||||
assertEquals(LEVEL_0.asSuccess(), repository.getPasswordStrength(EMAIL, "1"))
|
||||
assertEquals(LEVEL_0.asSuccess(), repository.getPasswordStrength(EMAIL, "12"))
|
||||
assertEquals(LEVEL_0.asSuccess(), repository.getPasswordStrength(EMAIL, "123"))
|
||||
assertEquals(
|
||||
PasswordStrengthResult.Success(LEVEL_0),
|
||||
repository.getPasswordStrength(EMAIL, "1"),
|
||||
)
|
||||
assertEquals(
|
||||
PasswordStrengthResult.Success(LEVEL_0),
|
||||
repository.getPasswordStrength(EMAIL, "12"),
|
||||
)
|
||||
assertEquals(
|
||||
PasswordStrengthResult.Success(LEVEL_0),
|
||||
repository.getPasswordStrength(EMAIL, "123"),
|
||||
)
|
||||
|
||||
assertEquals(LEVEL_1.asSuccess(), repository.getPasswordStrength(EMAIL, "1234"))
|
||||
assertEquals(LEVEL_1.asSuccess(), repository.getPasswordStrength(EMAIL, "12345"))
|
||||
assertEquals(LEVEL_1.asSuccess(), repository.getPasswordStrength(EMAIL, "123456"))
|
||||
assertEquals(
|
||||
PasswordStrengthResult.Success(LEVEL_1),
|
||||
repository.getPasswordStrength(EMAIL, "1234"),
|
||||
)
|
||||
assertEquals(
|
||||
PasswordStrengthResult.Success(LEVEL_1),
|
||||
repository.getPasswordStrength(EMAIL, "12345"),
|
||||
)
|
||||
assertEquals(
|
||||
PasswordStrengthResult.Success(LEVEL_1),
|
||||
repository.getPasswordStrength(EMAIL, "123456"),
|
||||
)
|
||||
|
||||
assertEquals(LEVEL_2.asSuccess(), repository.getPasswordStrength(EMAIL, "1234567"))
|
||||
assertEquals(LEVEL_2.asSuccess(), repository.getPasswordStrength(EMAIL, "12345678"))
|
||||
assertEquals(LEVEL_2.asSuccess(), repository.getPasswordStrength(EMAIL, "123456789"))
|
||||
assertEquals(
|
||||
PasswordStrengthResult.Success(LEVEL_2),
|
||||
repository.getPasswordStrength(EMAIL, "1234567"),
|
||||
)
|
||||
assertEquals(
|
||||
PasswordStrengthResult.Success(LEVEL_2),
|
||||
repository.getPasswordStrength(EMAIL, "12345678"),
|
||||
)
|
||||
assertEquals(
|
||||
PasswordStrengthResult.Success(LEVEL_2),
|
||||
repository.getPasswordStrength(EMAIL, "123456789"),
|
||||
)
|
||||
|
||||
assertEquals(LEVEL_3.asSuccess(), repository.getPasswordStrength(EMAIL, "123456789a"))
|
||||
assertEquals(LEVEL_3.asSuccess(), repository.getPasswordStrength(EMAIL, "123456789ab"))
|
||||
assertEquals(
|
||||
PasswordStrengthResult.Success(LEVEL_3),
|
||||
repository.getPasswordStrength(EMAIL, "123456789a"),
|
||||
)
|
||||
assertEquals(
|
||||
PasswordStrengthResult.Success(LEVEL_3),
|
||||
repository.getPasswordStrength(EMAIL, "123456789ab"),
|
||||
)
|
||||
|
||||
assertEquals(LEVEL_4.asSuccess(), repository.getPasswordStrength(EMAIL, "123456789abc"))
|
||||
assertEquals(
|
||||
PasswordStrengthResult.Success(LEVEL_4),
|
||||
repository.getPasswordStrength(EMAIL, "123456789abc"),
|
||||
)
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
|
|
@ -11,10 +11,9 @@ import com.x8bit.bitwarden.data.auth.datasource.sdk.model.PasswordStrength.LEVEL
|
|||
import com.x8bit.bitwarden.data.auth.datasource.sdk.model.PasswordStrength.LEVEL_3
|
||||
import com.x8bit.bitwarden.data.auth.datasource.sdk.model.PasswordStrength.LEVEL_4
|
||||
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.PasswordStrengthResult
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.RegisterResult
|
||||
import com.x8bit.bitwarden.data.auth.repository.util.generateUriForCaptcha
|
||||
import com.x8bit.bitwarden.data.platform.util.asFailure
|
||||
import com.x8bit.bitwarden.data.platform.util.asSuccess
|
||||
import com.x8bit.bitwarden.ui.auth.feature.createaccount.CreateAccountAction.AcceptPoliciesToggle
|
||||
import com.x8bit.bitwarden.ui.auth.feature.createaccount.CreateAccountAction.CloseClick
|
||||
import com.x8bit.bitwarden.ui.auth.feature.createaccount.CreateAccountAction.ConfirmPasswordInputChange
|
||||
|
@ -141,7 +140,7 @@ class CreateAccountViewModelTest : BaseViewModelTest() {
|
|||
val input = "abcdefghikl"
|
||||
coEvery {
|
||||
mockAuthRepository.getPasswordStrength("test@test.com", input)
|
||||
} returns Throwable().asFailure()
|
||||
} returns PasswordStrengthResult.Error
|
||||
val viewModel = CreateAccountViewModel(
|
||||
savedStateHandle = SavedStateHandle(),
|
||||
authRepository = mockAuthRepository,
|
||||
|
@ -169,7 +168,7 @@ class CreateAccountViewModelTest : BaseViewModelTest() {
|
|||
val input = "testtesttesttest"
|
||||
coEvery {
|
||||
mockAuthRepository.getPasswordStrength("test@test.com", input)
|
||||
} returns Throwable().asFailure()
|
||||
} returns PasswordStrengthResult.Error
|
||||
val viewModel = CreateAccountViewModel(
|
||||
savedStateHandle = SavedStateHandle(),
|
||||
authRepository = mockAuthRepository,
|
||||
|
@ -197,7 +196,7 @@ class CreateAccountViewModelTest : BaseViewModelTest() {
|
|||
val password = "testtesttesttest"
|
||||
coEvery {
|
||||
mockAuthRepository.getPasswordStrength("test@test.com", password)
|
||||
} returns Throwable().asFailure()
|
||||
} returns PasswordStrengthResult.Error
|
||||
val viewModel = CreateAccountViewModel(
|
||||
savedStateHandle = SavedStateHandle(),
|
||||
authRepository = mockAuthRepository,
|
||||
|
@ -504,7 +503,7 @@ class CreateAccountViewModelTest : BaseViewModelTest() {
|
|||
fun `PasswordInputChange update passwordInput and call getPasswordStrength`() = runTest {
|
||||
coEvery {
|
||||
mockAuthRepository.getPasswordStrength("", "input")
|
||||
} returns Result.failure(Throwable())
|
||||
} returns PasswordStrengthResult.Error
|
||||
val viewModel = CreateAccountViewModel(
|
||||
savedStateHandle = SavedStateHandle(),
|
||||
authRepository = mockAuthRepository,
|
||||
|
@ -554,7 +553,9 @@ class CreateAccountViewModelTest : BaseViewModelTest() {
|
|||
awaitItem(),
|
||||
)
|
||||
|
||||
viewModel.trySendAction(ReceivePasswordStrengthResult(LEVEL_0.asSuccess()))
|
||||
viewModel.trySendAction(
|
||||
ReceivePasswordStrengthResult(PasswordStrengthResult.Success(LEVEL_0)),
|
||||
)
|
||||
assertEquals(
|
||||
DEFAULT_STATE.copy(
|
||||
passwordStrengthState = PasswordStrengthState.WEAK_1,
|
||||
|
@ -562,7 +563,9 @@ class CreateAccountViewModelTest : BaseViewModelTest() {
|
|||
awaitItem(),
|
||||
)
|
||||
|
||||
viewModel.trySendAction(ReceivePasswordStrengthResult(LEVEL_1.asSuccess()))
|
||||
viewModel.trySendAction(
|
||||
ReceivePasswordStrengthResult(PasswordStrengthResult.Success(LEVEL_1)),
|
||||
)
|
||||
assertEquals(
|
||||
DEFAULT_STATE.copy(
|
||||
passwordStrengthState = PasswordStrengthState.WEAK_2,
|
||||
|
@ -570,7 +573,9 @@ class CreateAccountViewModelTest : BaseViewModelTest() {
|
|||
awaitItem(),
|
||||
)
|
||||
|
||||
viewModel.trySendAction(ReceivePasswordStrengthResult(LEVEL_2.asSuccess()))
|
||||
viewModel.trySendAction(
|
||||
ReceivePasswordStrengthResult(PasswordStrengthResult.Success(LEVEL_2)),
|
||||
)
|
||||
assertEquals(
|
||||
DEFAULT_STATE.copy(
|
||||
passwordStrengthState = PasswordStrengthState.WEAK_3,
|
||||
|
@ -578,7 +583,9 @@ class CreateAccountViewModelTest : BaseViewModelTest() {
|
|||
awaitItem(),
|
||||
)
|
||||
|
||||
viewModel.trySendAction(ReceivePasswordStrengthResult(LEVEL_3.asSuccess()))
|
||||
viewModel.trySendAction(
|
||||
ReceivePasswordStrengthResult(PasswordStrengthResult.Success(LEVEL_3)),
|
||||
)
|
||||
assertEquals(
|
||||
DEFAULT_STATE.copy(
|
||||
passwordStrengthState = PasswordStrengthState.GOOD,
|
||||
|
@ -586,7 +593,9 @@ class CreateAccountViewModelTest : BaseViewModelTest() {
|
|||
awaitItem(),
|
||||
)
|
||||
|
||||
viewModel.trySendAction(ReceivePasswordStrengthResult(LEVEL_4.asSuccess()))
|
||||
viewModel.trySendAction(
|
||||
ReceivePasswordStrengthResult(PasswordStrengthResult.Success(LEVEL_4)),
|
||||
)
|
||||
assertEquals(
|
||||
DEFAULT_STATE.copy(
|
||||
passwordStrengthState = PasswordStrengthState.STRONG,
|
||||
|
|
|
@ -4,8 +4,7 @@ import androidx.lifecycle.SavedStateHandle
|
|||
import app.cash.turbine.test
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
|
||||
import com.x8bit.bitwarden.data.platform.util.asFailure
|
||||
import com.x8bit.bitwarden.data.platform.util.asSuccess
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.DeleteAccountResult
|
||||
import com.x8bit.bitwarden.ui.platform.base.BaseViewModelTest
|
||||
import com.x8bit.bitwarden.ui.platform.base.util.asText
|
||||
import io.mockk.coEvery
|
||||
|
@ -56,7 +55,7 @@ class DeleteAccountViewModelTest : BaseViewModelTest() {
|
|||
fun `on DeleteAccountClick should make the delete call`() = runTest {
|
||||
val viewModel = createViewModel()
|
||||
val masterPassword = "ckasb kcs ja"
|
||||
coEvery { authRepo.deleteAccount(masterPassword) } returns Unit.asSuccess()
|
||||
coEvery { authRepo.deleteAccount(masterPassword) } returns DeleteAccountResult.Success
|
||||
|
||||
viewModel.trySendAction(DeleteAccountAction.DeleteAccountClick(masterPassword))
|
||||
|
||||
|
@ -70,7 +69,7 @@ class DeleteAccountViewModelTest : BaseViewModelTest() {
|
|||
fun `on DeleteAccountClick should update dialog state`() = runTest {
|
||||
val viewModel = createViewModel()
|
||||
val masterPassword = "ckasb kcs ja"
|
||||
coEvery { authRepo.deleteAccount(masterPassword) } returns Throwable("Fail").asFailure()
|
||||
coEvery { authRepo.deleteAccount(masterPassword) } returns DeleteAccountResult.Error
|
||||
|
||||
viewModel.trySendAction(DeleteAccountAction.DeleteAccountClick(masterPassword))
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue