mirror of
https://github.com/bitwarden/android.git
synced 2025-03-15 18:58:59 +03:00
Apply result extension consistently (#1210)
This commit is contained in:
parent
0561879d6b
commit
663c9785cf
13 changed files with 55 additions and 52 deletions
|
@ -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<T>(
|
|||
@Suppress("UNCHECKED_CAST")
|
||||
private fun createResult(body: T?): Result<T> {
|
||||
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<T>(
|
|||
override fun onResponse(call: Call<T>, response: Response<T>) {
|
||||
val body = response.body()
|
||||
val result: Result<T> = if (!response.isSuccessful) {
|
||||
Result.failure(HttpException(response))
|
||||
HttpException(response).asFailure()
|
||||
} else {
|
||||
createResult(body)
|
||||
}
|
||||
|
@ -44,7 +45,7 @@ class ResultCall<T>(
|
|||
}
|
||||
|
||||
override fun onFailure(call: Call<T>, t: Throwable) {
|
||||
val result: Result<T> = Result.failure(t)
|
||||
val result: Result<T> = t.asFailure()
|
||||
callback.onResponse(this@ResultCall, success(result))
|
||||
}
|
||||
},
|
||||
|
|
|
@ -9,7 +9,7 @@ import kotlinx.coroutines.coroutineScope
|
|||
*/
|
||||
inline fun <T, R> Result<T>.flatMap(transform: (T) -> Result<R>): Result<R> =
|
||||
this.exceptionOrNull()
|
||||
?.let { Result.failure(it) }
|
||||
?.asFailure()
|
||||
?: transform(this.getOrThrow())
|
||||
|
||||
/**
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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())
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -846,10 +846,7 @@ class VaultSdkSourceTest {
|
|||
time = time,
|
||||
)
|
||||
|
||||
assertEquals(
|
||||
Result.success(totpResponse),
|
||||
result,
|
||||
)
|
||||
assertEquals(totpResponse.asSuccess(), result)
|
||||
coVerify {
|
||||
clientVault.generateTotp(
|
||||
key = "Totp",
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue