mirror of
https://github.com/bitwarden/android.git
synced 2026-06-02 02:36:58 -05:00
BIT-764: Chrome Custom Tabs for hcpatcha verification (#105)
This commit is contained in:
@@ -3,23 +3,25 @@ package com.x8bit.bitwarden.data.auth.datasource.network.util
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import com.x8bit.bitwarden.data.auth.datasource.network.model.LoginResult
|
||||
import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest
|
||||
import io.mockk.every
|
||||
import io.mockk.mockk
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Test
|
||||
|
||||
class LoginResultExtensionsTest {
|
||||
class LoginResultExtensionsTest : BaseComposeTest() {
|
||||
|
||||
@Test
|
||||
fun `generateIntentForCaptcha should return valid Intent`() {
|
||||
fun `generateIntentForCaptcha should return valid Uri`() {
|
||||
val captchaRequired = LoginResult.CaptchaRequired("testCaptchaId")
|
||||
val intent = captchaRequired.generateIntentForCaptcha()
|
||||
val actualUri = captchaRequired.generateUriForCaptcha()
|
||||
val expectedUrl = "https://vault.bitwarden.com/captcha-mobile-connector.html" +
|
||||
"?data=eyJzaXRlS2V5IjoidGVzdENhcHRjaGkxZGQiLCJsb2NhbGUiOiJlbl9VUyJ9" +
|
||||
"&parent=bitwarden%3A%2F%2Fcaptcha-callback&v=1"
|
||||
val expectedIntent = Intent(Intent.ACTION_VIEW, Uri.parse(expectedUrl))
|
||||
assertEquals(expectedIntent.action, intent.action)
|
||||
assertEquals(expectedIntent.data, intent.data)
|
||||
"?data=eyJzaXRlS2V5IjoidGVzdENhcHRjaGFJZCIsImxvY2FsZSI6ImVuX1VTIiwiY2Fsb" +
|
||||
"GJhY2tVcmkiOiJiaXR3YXJkZW46Ly9jYXB0Y2hhLWNhbGxiYWNrIiwiY2FwdGNoYVJlcXVp" +
|
||||
"cmVkVGV4dCI6IkNhcHRjaGEgcmVxdWlyZWQifQ==&parent=bitwarden%3A%2F%2F" +
|
||||
"captcha-callback&v=1"
|
||||
val expectedUri = Uri.parse(expectedUrl)
|
||||
assertEquals(expectedUri, actualUri)
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.x8bit.bitwarden.ui.auth.feature.login
|
||||
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import androidx.compose.ui.test.assertCountEquals
|
||||
import androidx.compose.ui.test.filter
|
||||
import androidx.compose.ui.test.filterToOne
|
||||
@@ -200,13 +200,13 @@ class LoginScreenTest : BaseComposeTest() {
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `NavigateToCaptcha should call intentHandler startActivity`() {
|
||||
fun `NavigateToCaptcha should call intentHandler startCustomTabsActivity`() {
|
||||
val intentHandler = mockk<IntentHandler>(relaxed = true) {
|
||||
every { startActivity(any()) } returns Unit
|
||||
every { startCustomTabsActivity(any()) } returns Unit
|
||||
}
|
||||
val mockIntent = mockk<Intent>()
|
||||
val mockUri = mockk<Uri>()
|
||||
val viewModel = mockk<LoginViewModel>(relaxed = true) {
|
||||
every { eventFlow } returns flowOf(LoginEvent.NavigateToCaptcha(mockIntent))
|
||||
every { eventFlow } returns flowOf(LoginEvent.NavigateToCaptcha(mockUri))
|
||||
every { stateFlow } returns MutableStateFlow(
|
||||
LoginState(
|
||||
emailAddress = "",
|
||||
@@ -225,6 +225,6 @@ class LoginScreenTest : BaseComposeTest() {
|
||||
viewModel = viewModel,
|
||||
)
|
||||
}
|
||||
verify { intentHandler.startActivity(mockIntent) }
|
||||
verify { intentHandler.startCustomTabsActivity(mockUri) }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package com.x8bit.bitwarden.ui.auth.feature.login
|
||||
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import androidx.lifecycle.SavedStateHandle
|
||||
import app.cash.turbine.test
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.auth.datasource.network.model.LoginResult
|
||||
import com.x8bit.bitwarden.data.auth.datasource.network.util.CaptchaCallbackTokenResult
|
||||
import com.x8bit.bitwarden.data.auth.datasource.network.util.generateIntentForCaptcha
|
||||
import com.x8bit.bitwarden.data.auth.datasource.network.util.generateUriForCaptcha
|
||||
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
|
||||
import com.x8bit.bitwarden.ui.platform.base.BaseViewModelTest
|
||||
import com.x8bit.bitwarden.ui.platform.base.util.asText
|
||||
@@ -174,12 +174,12 @@ class LoginViewModelTest : BaseViewModelTest() {
|
||||
@Test
|
||||
fun `LoginButtonClick login returns CaptchaRequired should emit NavigateToCaptcha`() =
|
||||
runTest {
|
||||
val mockkIntent = mockk<Intent>()
|
||||
val mockkUri = mockk<Uri>()
|
||||
every {
|
||||
LoginResult
|
||||
.CaptchaRequired(captchaId = "mock_captcha_id")
|
||||
.generateIntentForCaptcha()
|
||||
} returns mockkIntent
|
||||
.generateUriForCaptcha()
|
||||
} returns mockkUri
|
||||
val authRepository = mockk<AuthRepository> {
|
||||
coEvery { login("test@gmail.com", "", captchaToken = null) } returns
|
||||
LoginResult.CaptchaRequired(captchaId = "mock_captcha_id")
|
||||
@@ -192,7 +192,7 @@ class LoginViewModelTest : BaseViewModelTest() {
|
||||
viewModel.eventFlow.test {
|
||||
viewModel.actionChannel.trySend(LoginAction.LoginButtonClick)
|
||||
assertEquals(DEFAULT_STATE, viewModel.stateFlow.value)
|
||||
assertEquals(LoginEvent.NavigateToCaptcha(intent = mockkIntent), awaitItem())
|
||||
assertEquals(LoginEvent.NavigateToCaptcha(uri = mockkUri), awaitItem())
|
||||
}
|
||||
coVerify {
|
||||
authRepository.login(email = "test@gmail.com", password = "", captchaToken = null)
|
||||
|
||||
Reference in New Issue
Block a user