mirror of
https://github.com/bitwarden/android.git
synced 2026-06-01 10:16:47 -05:00
Add synchronous refresh token API (#271)
This commit is contained in:
@@ -5,10 +5,12 @@ import com.x8bit.bitwarden.data.auth.datasource.network.model.GetTokenResponseJs
|
||||
import com.x8bit.bitwarden.data.auth.datasource.network.model.KdfTypeJson
|
||||
import com.x8bit.bitwarden.data.auth.datasource.network.model.KeyConnectorUserDecryptionOptionsJson
|
||||
import com.x8bit.bitwarden.data.auth.datasource.network.model.MasterPasswordPolicyOptionsJson
|
||||
import com.x8bit.bitwarden.data.auth.datasource.network.model.RefreshTokenResponseJson
|
||||
import com.x8bit.bitwarden.data.auth.datasource.network.model.TrustedDeviceUserDecryptionOptionsJson
|
||||
import com.x8bit.bitwarden.data.auth.datasource.network.model.UserDecryptionOptionsJson
|
||||
import com.x8bit.bitwarden.data.platform.base.BaseServiceTest
|
||||
import com.x8bit.bitwarden.data.platform.util.DeviceModelProvider
|
||||
import com.x8bit.bitwarden.data.platform.util.asSuccess
|
||||
import io.mockk.every
|
||||
import io.mockk.mockk
|
||||
import kotlinx.coroutines.test.runTest
|
||||
@@ -76,12 +78,44 @@ class IdentityServiceTest : BaseServiceTest() {
|
||||
assertEquals(Result.success(INVALID_LOGIN), result)
|
||||
}
|
||||
|
||||
@Suppress("MaxLineLength")
|
||||
@Test
|
||||
fun `refreshTokenSynchronously when response is success should return RefreshTokenResponseJson`() {
|
||||
server.enqueue(MockResponse().setResponseCode(200).setBody(REFRESH_TOKEN_JSON))
|
||||
val result = identityService.refreshTokenSynchronously(refreshToken = REFRESH_TOKEN)
|
||||
assertEquals(REFRESH_TOKEN_BODY.asSuccess(), result)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `refreshTokenSynchronously when response is an error should return an error`() {
|
||||
server.enqueue(MockResponse().setResponseCode(400))
|
||||
val result = identityService.refreshTokenSynchronously(refreshToken = REFRESH_TOKEN)
|
||||
assertTrue(result.isFailure)
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val REFRESH_TOKEN = "refreshToken"
|
||||
private const val EMAIL = "email"
|
||||
private const val PASSWORD_HASH = "passwordHash"
|
||||
}
|
||||
}
|
||||
|
||||
private const val REFRESH_TOKEN_JSON = """
|
||||
{
|
||||
"access_token": "accessToken",
|
||||
"expires_in": 3600,
|
||||
"refresh_token": "refreshToken",
|
||||
"token_type": "Bearer"
|
||||
}
|
||||
"""
|
||||
|
||||
private val REFRESH_TOKEN_BODY = RefreshTokenResponseJson(
|
||||
accessToken = "accessToken",
|
||||
expiresIn = 3600,
|
||||
refreshToken = "refreshToken",
|
||||
tokenType = "Bearer",
|
||||
)
|
||||
|
||||
private const val CAPTCHA_BODY_JSON = """
|
||||
{
|
||||
"HCaptcha_SiteKey": "123"
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
package com.x8bit.bitwarden.data.platform.datasource.network.util
|
||||
|
||||
import com.x8bit.bitwarden.data.platform.util.asSuccess
|
||||
import io.mockk.every
|
||||
import io.mockk.mockk
|
||||
import okhttp3.ResponseBody.Companion.toResponseBody
|
||||
import org.junit.jupiter.api.Assertions.assertEquals
|
||||
import org.junit.jupiter.api.Assertions.assertTrue
|
||||
import org.junit.jupiter.api.Test
|
||||
import retrofit2.Call
|
||||
import retrofit2.Response
|
||||
import java.io.IOException
|
||||
|
||||
class CallExtensionsTest {
|
||||
|
||||
@Test
|
||||
fun `executeForResult returns failure when execute throws IOException`() {
|
||||
val call = mockk<Call<Unit>> {
|
||||
every { execute() } throws IOException("Fail")
|
||||
}
|
||||
|
||||
val result = call.executeForResult()
|
||||
|
||||
assertTrue(result.isFailure)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `executeForResult returns failure when execute throws RuntimeException`() {
|
||||
val call = mockk<Call<Unit>> {
|
||||
every { execute() } throws RuntimeException("Fail")
|
||||
}
|
||||
|
||||
val result = call.executeForResult()
|
||||
|
||||
assertTrue(result.isFailure)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `executeForResult returns failure when response is failure`() {
|
||||
val call = mockk<Call<Unit>> {
|
||||
every { execute() } returns Response.error(400, "".toResponseBody())
|
||||
}
|
||||
|
||||
val result = call.executeForResult()
|
||||
|
||||
assertTrue(result.isFailure)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `executeForResult returns success when response is failure`() {
|
||||
val call = mockk<Call<Unit>> {
|
||||
every { execute() } returns Response.success(Unit)
|
||||
}
|
||||
|
||||
val result = call.executeForResult()
|
||||
|
||||
assertEquals(Unit.asSuccess(), result)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user