Replace the generic Result class in the auth repo with specific result classes (#301)

This commit is contained in:
David Perez
2023-11-30 09:00:32 -06:00
committed by GitHub
parent 083c431262
commit 46eb18d0a5
9 changed files with 163 additions and 65 deletions

View File

@@ -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 {

View File

@@ -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,

View File

@@ -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))