Skip to content

Commit 70cd57a

Browse files
committed
wip: Email provider integration
1 parent 7f73bcf commit 70cd57a

File tree

1 file changed

+59
-4
lines changed

1 file changed

+59
-4
lines changed

auth/src/test/java/com/firebase/ui/auth/compose/FirebaseAuthUITest.kt

Lines changed: 59 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,23 +25,25 @@ import com.google.firebase.FirebaseOptions
2525
import com.google.firebase.auth.FirebaseAuth
2626
import com.google.firebase.auth.FirebaseAuthRecentLoginRequiredException
2727
import com.google.firebase.auth.FirebaseUser
28-
import com.google.android.gms.tasks.Task
2928
import com.google.android.gms.tasks.TaskCompletionSource
29+
import com.google.firebase.auth.AuthCredential
3030
import com.google.firebase.auth.AuthResult
31-
import com.google.firebase.auth.actionCodeSettings
31+
import com.google.firebase.auth.EmailAuthProvider
3232
import kotlinx.coroutines.CancellationException
3333
import kotlinx.coroutines.flow.first
3434
import kotlinx.coroutines.test.runTest
3535
import org.junit.After
3636
import org.junit.Before
3737
import org.junit.Test
3838
import org.junit.runner.RunWith
39+
import org.mockito.ArgumentMatchers
3940
import org.mockito.Mock
4041
import org.mockito.Mockito.`when`
4142
import org.mockito.Mockito.mock
4243
import org.mockito.Mockito.verify
4344
import org.mockito.Mockito.doNothing
4445
import org.mockito.Mockito.doThrow
46+
import org.mockito.Mockito.mockStatic
4547
import org.mockito.MockitoAnnotations
4648
import org.robolectric.RobolectricTestRunner
4749
import org.robolectric.annotation.Config
@@ -70,7 +72,7 @@ class FirebaseAuthUITest {
7072
FirebaseAuthUI.clearInstanceCache()
7173

7274
// Clear any existing Firebase apps
73-
val context = ApplicationProvider.getApplicationContext<android.content.Context>()
75+
val context = ApplicationProvider.getApplicationContext<Context>()
7476
FirebaseApp.getApps(context).forEach { app ->
7577
app.delete()
7678
}
@@ -534,7 +536,7 @@ class FirebaseAuthUITest {
534536
// =============================================================================================
535537

536538
@Test
537-
fun `Create or link user with email and password without anonymous upgrade should succeed`() =
539+
fun `Create user with email and password without anonymous upgrade should succeed`() =
538540
runTest {
539541
val applicationContext = ApplicationProvider.getApplicationContext<Context>()
540542
val mockUser = mock(FirebaseUser::class.java)
@@ -573,4 +575,57 @@ class FirebaseAuthUITest {
573575
val successState = authState as AuthState.Success
574576
assertThat(successState.user.email).isEqualTo("[email protected]")
575577
}
578+
579+
@Test
580+
fun `Link user with email and password with anonymous upgrade should succeed`() = runTest {
581+
mockStatic(EmailAuthProvider::class.java).use { mockedProvider ->
582+
val applicationContext = ApplicationProvider.getApplicationContext<Context>()
583+
val mockCredential = mock(AuthCredential::class.java)
584+
mockedProvider.`when`<AuthCredential> {
585+
EmailAuthProvider.getCredential("[email protected]", "Pass@123")
586+
}.thenReturn(mockCredential)
587+
val mockAnonymousUser = mock(FirebaseUser::class.java)
588+
`when`(mockAnonymousUser.email).thenReturn("[email protected]")
589+
`when`(mockAnonymousUser.isAnonymous).thenReturn(true)
590+
`when`(mockFirebaseAuth.currentUser).thenReturn(mockAnonymousUser)
591+
val taskCompletionSource = TaskCompletionSource<AuthResult>()
592+
taskCompletionSource.setResult(null)
593+
`when`(
594+
mockFirebaseAuth.currentUser?.linkWithCredential(
595+
ArgumentMatchers.any(AuthCredential::class.java)
596+
)
597+
).thenReturn(taskCompletionSource.task)
598+
val instance = FirebaseAuthUI.create(defaultApp, mockFirebaseAuth)
599+
val emailProvider = AuthProvider.Email(
600+
actionCodeSettings = null,
601+
passwordValidationRules = emptyList()
602+
)
603+
val config = authUIConfiguration {
604+
context = applicationContext
605+
providers {
606+
provider(emailProvider)
607+
}
608+
isAnonymousUpgradeEnabled = true
609+
}
610+
611+
instance.createOrLinkUserWithEmailAndPassword(
612+
config = config,
613+
provider = emailProvider,
614+
email = "[email protected]",
615+
password = "Pass@123"
616+
)
617+
618+
mockedProvider.verify {
619+
EmailAuthProvider.getCredential("[email protected]", "Pass@123")
620+
}
621+
// Verify linkWithCredential was called with the mock credential
622+
verify(mockAnonymousUser).linkWithCredential(mockCredential)
623+
624+
val authState = instance.authStateFlow().first()
625+
assertThat(authState)
626+
.isEqualTo(AuthState.Success(result = null, user = mockAnonymousUser))
627+
val successState = authState as AuthState.Success
628+
assertThat(successState.user.email).isEqualTo("[email protected]")
629+
}
630+
}
576631
}

0 commit comments

Comments
 (0)