diff --git a/app/src/main/java/com/x8bit/bitwarden/data/platform/datasource/network/core/ResultCall.kt b/app/src/main/java/com/x8bit/bitwarden/data/platform/datasource/network/core/ResultCall.kt index 14a558befd..eeb62576e8 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/platform/datasource/network/core/ResultCall.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/platform/datasource/network/core/ResultCall.kt @@ -1,6 +1,7 @@ package com.x8bit.bitwarden.data.platform.datasource.network.core import com.x8bit.bitwarden.data.platform.util.asFailure +import com.x8bit.bitwarden.data.platform.util.asSuccess import okhttp3.Request import okio.IOException import okio.Timeout @@ -25,9 +26,9 @@ class ResultCall( @Suppress("UNCHECKED_CAST") private fun createResult(body: T?): Result { return when { - body != null -> Result.success(body) - successType == Unit::class.java -> Result.success(Unit as T) - else -> Result.failure(IllegalStateException("Unexpected null body!")) + body != null -> body.asSuccess() + successType == Unit::class.java -> (Unit as T).asSuccess() + else -> IllegalStateException("Unexpected null body!").asFailure() } } @@ -36,7 +37,7 @@ class ResultCall( override fun onResponse(call: Call, response: Response) { val body = response.body() val result: Result = if (!response.isSuccessful) { - Result.failure(HttpException(response)) + HttpException(response).asFailure() } else { createResult(body) } @@ -44,7 +45,7 @@ class ResultCall( } override fun onFailure(call: Call, t: Throwable) { - val result: Result = Result.failure(t) + val result: Result = t.asFailure() callback.onResponse(this@ResultCall, success(result)) } }, diff --git a/app/src/main/java/com/x8bit/bitwarden/data/platform/util/ResultExtensions.kt b/app/src/main/java/com/x8bit/bitwarden/data/platform/util/ResultExtensions.kt index 926d7f3f45..7784700e84 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/platform/util/ResultExtensions.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/platform/util/ResultExtensions.kt @@ -9,7 +9,7 @@ import kotlinx.coroutines.coroutineScope */ inline fun Result.flatMap(transform: (T) -> Result): Result = this.exceptionOrNull() - ?.let { Result.failure(it) } + ?.asFailure() ?: transform(this.getOrThrow()) /** diff --git a/app/src/test/java/com/x8bit/bitwarden/data/auth/datasource/network/service/AccountsServiceTest.kt b/app/src/test/java/com/x8bit/bitwarden/data/auth/datasource/network/service/AccountsServiceTest.kt index 229852a1bd..cfa7496d34 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/auth/datasource/network/service/AccountsServiceTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/auth/datasource/network/service/AccountsServiceTest.kt @@ -11,6 +11,7 @@ import com.x8bit.bitwarden.data.auth.datasource.network.model.ResendEmailRequest import com.x8bit.bitwarden.data.auth.datasource.network.model.ResetPasswordRequestJson import com.x8bit.bitwarden.data.auth.datasource.network.model.SetPasswordRequestJson import com.x8bit.bitwarden.data.platform.base.BaseServiceTest +import com.x8bit.bitwarden.data.platform.util.asSuccess import kotlinx.coroutines.test.runTest import kotlinx.serialization.json.Json import okhttp3.mockwebserver.MockResponse @@ -100,7 +101,7 @@ class AccountsServiceTest : BaseServiceTest() { ) val response = MockResponse().setBody(json) server.enqueue(response) - assertEquals(Result.success(expectedResponse), service.preLogin(EMAIL)) + assertEquals(expectedResponse.asSuccess(), service.preLogin(EMAIL)) } @Test @@ -116,7 +117,7 @@ class AccountsServiceTest : BaseServiceTest() { ) val response = MockResponse().setBody(json) server.enqueue(response) - assertEquals(Result.success(expectedResponse), service.preLogin(EMAIL)) + assertEquals(expectedResponse.asSuccess(), service.preLogin(EMAIL)) } @Test @@ -131,7 +132,7 @@ class AccountsServiceTest : BaseServiceTest() { ) val response = MockResponse().setBody(json) server.enqueue(response) - assertEquals(Result.success(expectedResponse), service.register(registerRequestBody)) + assertEquals(expectedResponse.asSuccess(), service.register(registerRequestBody)) } @Test @@ -199,7 +200,7 @@ class AccountsServiceTest : BaseServiceTest() { ) val response = MockResponse().setResponseCode(400).setBody(json) server.enqueue(response) - assertEquals(Result.success(expectedResponse), service.register(registerRequestBody)) + assertEquals(expectedResponse.asSuccess(), service.register(registerRequestBody)) } @Test diff --git a/app/src/test/java/com/x8bit/bitwarden/data/auth/datasource/network/service/AuthRequestsServiceTest.kt b/app/src/test/java/com/x8bit/bitwarden/data/auth/datasource/network/service/AuthRequestsServiceTest.kt index 2e8f9dd2e8..98f5930893 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/auth/datasource/network/service/AuthRequestsServiceTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/auth/datasource/network/service/AuthRequestsServiceTest.kt @@ -3,6 +3,7 @@ package com.x8bit.bitwarden.data.auth.datasource.network.service import com.x8bit.bitwarden.data.auth.datasource.network.api.AuthenticatedAuthRequestsApi import com.x8bit.bitwarden.data.auth.datasource.network.model.AuthRequestsResponseJson import com.x8bit.bitwarden.data.platform.base.BaseServiceTest +import com.x8bit.bitwarden.data.platform.util.asSuccess import kotlinx.coroutines.test.runTest import okhttp3.mockwebserver.MockResponse import org.junit.jupiter.api.Assertions.assertEquals @@ -74,7 +75,7 @@ class AuthRequestsServiceTest : BaseServiceTest() { masterPasswordHash = "verySecureHash", isApproved = true, ) - assertEquals(Result.success(AUTH_REQUEST_RESPONSE), actual) + assertEquals(AUTH_REQUEST_RESPONSE.asSuccess(), actual) } @Test @@ -90,7 +91,7 @@ class AuthRequestsServiceTest : BaseServiceTest() { val response = MockResponse().setBody(AUTH_REQUEST_RESPONSE_JSON).setResponseCode(200) server.enqueue(response) val actual = service.getAuthRequest(requestId = "1") - assertEquals(Result.success(AUTH_REQUEST_RESPONSE), actual) + assertEquals(AUTH_REQUEST_RESPONSE.asSuccess(), actual) } } diff --git a/app/src/test/java/com/x8bit/bitwarden/data/auth/datasource/network/service/IdentityServiceTest.kt b/app/src/test/java/com/x8bit/bitwarden/data/auth/datasource/network/service/IdentityServiceTest.kt index 8845dc8508..b7b14118a0 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/auth/datasource/network/service/IdentityServiceTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/auth/datasource/network/service/IdentityServiceTest.kt @@ -52,7 +52,7 @@ class IdentityServiceTest : BaseServiceTest() { captchaToken = null, uniqueAppId = UNIQUE_APP_ID, ) - assertEquals(Result.success(LOGIN_SUCCESS), result) + assertEquals(LOGIN_SUCCESS.asSuccess(), result) } @Test @@ -82,7 +82,7 @@ class IdentityServiceTest : BaseServiceTest() { captchaToken = null, uniqueAppId = UNIQUE_APP_ID, ) - assertEquals(Result.success(CAPTCHA_BODY), result) + assertEquals(CAPTCHA_BODY.asSuccess(), result) } @Test @@ -97,7 +97,7 @@ class IdentityServiceTest : BaseServiceTest() { captchaToken = null, uniqueAppId = UNIQUE_APP_ID, ) - assertEquals(Result.success(TWO_FACTOR_BODY), result) + assertEquals(TWO_FACTOR_BODY.asSuccess(), result) } @Test @@ -112,7 +112,7 @@ class IdentityServiceTest : BaseServiceTest() { captchaToken = null, uniqueAppId = UNIQUE_APP_ID, ) - assertEquals(Result.success(INVALID_LOGIN), result) + assertEquals(INVALID_LOGIN.asSuccess(), result) } @Test @@ -121,7 +121,7 @@ class IdentityServiceTest : BaseServiceTest() { val organizationId = "organizationId" server.enqueue(MockResponse().setResponseCode(200).setBody(PREVALIDATE_SSO_JSON)) val result = identityService.prevalidateSso(organizationId) - assertEquals(Result.success(PREVALIDATE_SSO_BODY), result) + assertEquals(PREVALIDATE_SSO_BODY.asSuccess(), result) } @Test diff --git a/app/src/test/java/com/x8bit/bitwarden/data/auth/datasource/network/service/OrganizationServiceTest.kt b/app/src/test/java/com/x8bit/bitwarden/data/auth/datasource/network/service/OrganizationServiceTest.kt index 4071d74002..5b69855cb6 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/auth/datasource/network/service/OrganizationServiceTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/auth/datasource/network/service/OrganizationServiceTest.kt @@ -59,7 +59,7 @@ class OrganizationServiceTest : BaseServiceTest() { MockResponse().setResponseCode(200).setBody(ORGANIZATION_DOMAIN_SSO_DETAILS_JSON), ) val result = organizationService.getOrganizationDomainSsoDetails(email) - assertEquals(Result.success(ORGANIZATION_DOMAIN_SSO_BODY), result) + assertEquals(ORGANIZATION_DOMAIN_SSO_BODY.asSuccess(), result) } @Test @@ -78,7 +78,7 @@ class OrganizationServiceTest : BaseServiceTest() { MockResponse().setResponseCode(200).setBody(ORGANIZATION_AUTO_ENROLL_STATUS_JSON), ) val result = organizationService.getOrganizationAutoEnrollStatus("orgId") - assertEquals(Result.success(ORGANIZATION_AUTO_ENROLL_STATUS_RESPONSE), result) + assertEquals(ORGANIZATION_AUTO_ENROLL_STATUS_RESPONSE.asSuccess(), result) } @Test @@ -95,7 +95,7 @@ class OrganizationServiceTest : BaseServiceTest() { MockResponse().setResponseCode(200).setBody(ORGANIZATION_KEYS_JSON), ) val result = organizationService.getOrganizationKeys("orgId") - assertEquals(Result.success(ORGANIZATION_KEYS_RESPONSE), result) + assertEquals(ORGANIZATION_KEYS_RESPONSE.asSuccess(), result) } @Test diff --git a/app/src/test/java/com/x8bit/bitwarden/data/auth/manager/AuthRequestManagerTest.kt b/app/src/test/java/com/x8bit/bitwarden/data/auth/manager/AuthRequestManagerTest.kt index f4086f8673..b35e442125 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/auth/manager/AuthRequestManagerTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/auth/manager/AuthRequestManagerTest.kt @@ -517,7 +517,7 @@ class AuthRequestManagerTest { coEvery { authRequestsService.getAuthRequests() } returns responseJsonOne.asSuccess() coEvery { authRequestsService.getAuthRequest(requestId = REQUEST_ID) - } returns Result.success(authRequestsResponse) + } returns authRequestsResponse.asSuccess() fakeAuthDiskSource.userState = SINGLE_USER_STATE repository @@ -827,7 +827,7 @@ class AuthRequestManagerTest { ) coEvery { authSdkSource.getUserFingerprint(email = EMAIL, publicKey = PUBLIC_KEY) - } returns Result.success(fingerprint) + } returns fingerprint.asSuccess() coEvery { authRequestsService.getAuthRequests() } returns responseJson.asSuccess() fakeAuthDiskSource.userState = SINGLE_USER_STATE diff --git a/app/src/test/java/com/x8bit/bitwarden/data/platform/datasource/network/service/ConfigServiceTest.kt b/app/src/test/java/com/x8bit/bitwarden/data/platform/datasource/network/service/ConfigServiceTest.kt index 8db616ec35..e2d8c078a6 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/platform/datasource/network/service/ConfigServiceTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/platform/datasource/network/service/ConfigServiceTest.kt @@ -3,6 +3,7 @@ package com.x8bit.bitwarden.data.platform.datasource.network.service import com.x8bit.bitwarden.data.platform.base.BaseServiceTest import com.x8bit.bitwarden.data.platform.datasource.network.api.ConfigApi import com.x8bit.bitwarden.data.platform.datasource.network.model.ConfigResponseJson +import com.x8bit.bitwarden.data.platform.util.asSuccess import kotlinx.coroutines.test.runTest import okhttp3.mockwebserver.MockResponse import org.junit.jupiter.api.Assertions.assertEquals @@ -17,7 +18,7 @@ class ConfigServiceTest : BaseServiceTest() { @Test fun `getConfig should call ConfigApi`() = runTest { server.enqueue(MockResponse().setBody(CONFIG_RESPONSE_JSON)) - assertEquals(Result.success(CONFIG_RESPONSE), service.getConfig()) + assertEquals(CONFIG_RESPONSE.asSuccess(), service.getConfig()) } } diff --git a/app/src/test/java/com/x8bit/bitwarden/data/platform/repository/SettingsRepositoryTest.kt b/app/src/test/java/com/x8bit/bitwarden/data/platform/repository/SettingsRepositoryTest.kt index 39f080c37d..3f00005e55 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/platform/repository/SettingsRepositoryTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/platform/repository/SettingsRepositoryTest.kt @@ -603,7 +603,7 @@ class SettingsRepositoryTest { vaultSdkSource.getUserFingerprint( userId = MOCK_USER_STATE.activeUserId, ) - } returns Result.failure(Throwable()) + } returns Throwable().asFailure() val result = settingsRepository.getUserFingerprint() @@ -624,7 +624,7 @@ class SettingsRepositoryTest { vaultSdkSource.getUserFingerprint( userId = MOCK_USER_STATE.activeUserId, ) - } returns Result.success(fingerprint) + } returns fingerprint.asSuccess() val result = settingsRepository.getUserFingerprint() diff --git a/app/src/test/java/com/x8bit/bitwarden/data/tools/generator/datasource/sdk/GeneratorSdkSourceTest.kt b/app/src/test/java/com/x8bit/bitwarden/data/tools/generator/datasource/sdk/GeneratorSdkSourceTest.kt index 923985be75..56e43557c7 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/tools/generator/datasource/sdk/GeneratorSdkSourceTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/tools/generator/datasource/sdk/GeneratorSdkSourceTest.kt @@ -6,6 +6,7 @@ import com.bitwarden.generators.PassphraseGeneratorRequest import com.bitwarden.generators.PasswordGeneratorRequest import com.bitwarden.generators.UsernameGeneratorRequest import com.bitwarden.sdk.ClientGenerators +import com.x8bit.bitwarden.data.platform.util.asSuccess import io.mockk.coEvery import io.mockk.coVerify import io.mockk.mockk @@ -40,7 +41,7 @@ class GeneratorSdkSourceTest { val result = generatorSdkSource.generatePassword(request) - assertEquals(Result.success(expectedResult), result) + assertEquals(expectedResult.asSuccess(), result) coVerify { clientGenerators.password(request) @@ -64,7 +65,7 @@ class GeneratorSdkSourceTest { val result = generatorSdkSource.generatePassphrase(request) - assertEquals(Result.success(expectedResult), result) + assertEquals(expectedResult.asSuccess(), result) coVerify { clientGenerators.passphrase(request) @@ -87,7 +88,7 @@ class GeneratorSdkSourceTest { val result = generatorSdkSource.generatePlusAddressedEmail(request) - assertEquals(Result.success(expectedResult), result) + assertEquals(expectedResult.asSuccess(), result) coVerify { clientGenerators.username(request) } @@ -109,7 +110,7 @@ class GeneratorSdkSourceTest { val result = generatorSdkSource.generateCatchAllEmail(request) - assertEquals(Result.success(expectedResult), result) + assertEquals(expectedResult.asSuccess(), result) coVerify { clientGenerators.username(request) } @@ -131,7 +132,7 @@ class GeneratorSdkSourceTest { val result = generatorSdkSource.generateRandomWord(request) - assertEquals(Result.success(expectedResult), result) + assertEquals(expectedResult.asSuccess(), result) coVerify { clientGenerators.username(request) } @@ -153,7 +154,7 @@ class GeneratorSdkSourceTest { val result = generatorSdkSource.generateForwardedServiceEmail(request) - assertEquals(Result.success(expectedResult), result) + assertEquals(expectedResult.asSuccess(), result) coVerify { clientGenerators.username(request) diff --git a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/VaultSdkSourceTest.kt b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/VaultSdkSourceTest.kt index d37e49c05b..19cfb3ea52 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/VaultSdkSourceTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/VaultSdkSourceTest.kt @@ -846,10 +846,7 @@ class VaultSdkSourceTest { time = time, ) - assertEquals( - Result.success(totpResponse), - result, - ) + assertEquals(totpResponse.asSuccess(), result) coVerify { clientVault.generateTotp( key = "Totp", diff --git a/app/src/test/java/com/x8bit/bitwarden/data/vault/manager/TotpCodeManagerTest.kt b/app/src/test/java/com/x8bit/bitwarden/data/vault/manager/TotpCodeManagerTest.kt index f7e8260472..3ef92f6c3f 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/vault/manager/TotpCodeManagerTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/vault/manager/TotpCodeManagerTest.kt @@ -5,6 +5,8 @@ import com.bitwarden.core.TotpResponse import com.x8bit.bitwarden.data.platform.base.FakeDispatcherManager import com.x8bit.bitwarden.data.platform.manager.dispatcher.DispatcherManager import com.x8bit.bitwarden.data.platform.repository.model.DataState +import com.x8bit.bitwarden.data.platform.util.asFailure +import com.x8bit.bitwarden.data.platform.util.asSuccess import com.x8bit.bitwarden.data.vault.datasource.sdk.VaultSdkSource import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockCipherView import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockLoginView @@ -41,9 +43,9 @@ class TotpCodeManagerTest { @Test fun `getTotpCodeStateFlow should have loaded data with a valid values passed in`() = runTest { val totpResponse = TotpResponse("123456", 30u) - coEvery { vaultSdkSource.generateTotp(any(), any(), any()) } returns Result.success( - totpResponse, - ) + coEvery { + vaultSdkSource.generateTotp(any(), any(), any()) + } returns totpResponse.asSuccess() val expected = createVerificationCodeItem() @@ -57,9 +59,9 @@ class TotpCodeManagerTest { fun `getTotpCodeStateFlow should have loaded data with empty list if no totp code is provided`() = runTest { val totpResponse = TotpResponse("123456", 30u) - coEvery { vaultSdkSource.generateTotp(any(), any(), any()) } returns Result.success( - totpResponse, - ) + coEvery { + vaultSdkSource.generateTotp(any(), any(), any()) + } returns totpResponse.asSuccess() val cipherView = createMockCipherView(1).copy( login = createMockLoginView(number = 1, clock = clock).copy( @@ -76,10 +78,9 @@ class TotpCodeManagerTest { @Test fun `getTotpCodesStateFlow should have loaded data with empty list if unable to generate auth code`() = runTest { - coEvery { vaultSdkSource.generateTotp(any(), any(), any()) } returns - Result.failure( - exception = Exception(), - ) + coEvery { + vaultSdkSource.generateTotp(any(), any(), any()) + } returns Exception().asFailure() val cipherView = createMockCipherView(1).copy( login = createMockLoginView(number = 1, clock = clock).copy( @@ -96,9 +97,9 @@ class TotpCodeManagerTest { fun `getTotpCodeStateFlow should have loaded item with a valid data passed in`() = runTest { val totpResponse = TotpResponse("123456", 30u) - coEvery { vaultSdkSource.generateTotp(any(), any(), any()) } returns Result.success( - totpResponse, - ) + coEvery { + vaultSdkSource.generateTotp(any(), any(), any()) + } returns totpResponse.asSuccess() val cipherView = createMockCipherView(1) @@ -113,9 +114,9 @@ class TotpCodeManagerTest { fun `getTotpCodeFlow should have null data if unable to get item`() = runTest { val totpResponse = TotpResponse("123456", 30u) - coEvery { vaultSdkSource.generateTotp(any(), any(), any()) } returns Result.success( - totpResponse, - ) + coEvery { + vaultSdkSource.generateTotp(any(), any(), any()) + } returns totpResponse.asSuccess() val cipherView = createMockCipherView(1).copy( login = null, diff --git a/app/src/test/java/com/x8bit/bitwarden/data/vault/manager/VaultLockManagerTest.kt b/app/src/test/java/com/x8bit/bitwarden/data/vault/manager/VaultLockManagerTest.kt index 6beaf771ef..7ecd0790a9 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/vault/manager/VaultLockManagerTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/vault/manager/VaultLockManagerTest.kt @@ -53,7 +53,7 @@ class VaultLockManagerTest { kdf = MOCK_PROFILE.toSdkParams(), purpose = HashPurpose.LOCAL_AUTHORIZATION, ) - } returns Result.success("hashedPassword") + } returns "hashedPassword".asSuccess() } private val vaultSdkSource: VaultSdkSource = mockk { every { clearCrypto(userId = any()) } just runs