@@ -149,7 +149,7 @@ class EmailAuthScreenTest {
149149 }
150150
151151 @Test
152- fun `initial EmailAuthMode is SignIn ` () {
152+ fun `single email provider starts on email screen when provider choice always shown is false ` () {
153153 val configuration = authUIConfiguration {
154154 context = applicationContext
155155 providers {
@@ -167,15 +167,30 @@ class EmailAuthScreenTest {
167167 TestFirebaseAuthScreen (configuration = configuration, authUI = authUI)
168168 }
169169
170- // Click on email provider in AuthMethodPicker
171- composeAndroidTestRule.onNodeWithText(stringProvider.signInWithEmail)
172- .assertIsDisplayed()
173- .performClick()
170+ assertDirectEmailStart()
171+ }
174172
175- composeAndroidTestRule.waitForIdle()
173+ @Test
174+ fun `single email provider shows method picker when provider choice always shown is true` () {
175+ val configuration = authUIConfiguration {
176+ context = applicationContext
177+ providers {
178+ provider(
179+ AuthProvider .Email (
180+ emailLinkActionCodeSettings = null ,
181+ passwordValidationRules = emptyList()
182+ )
183+ )
184+ }
185+ isCredentialManagerEnabled = false
186+ isProviderChoiceAlwaysShown = true
187+ }
176188
177- composeAndroidTestRule.onNodeWithText(stringProvider.signInDefault)
178- .assertIsDisplayed()
189+ composeAndroidTestRule.setContent {
190+ TestFirebaseAuthScreen (configuration = configuration, authUI = authUI)
191+ }
192+
193+ openEmailProviderFromMethodPicker()
179194 }
180195
181196 @Test
@@ -212,12 +227,7 @@ class EmailAuthScreenTest {
212227 currentAuthState = authState
213228 }
214229
215- // Click on email provider in AuthMethodPicker
216- composeAndroidTestRule.onNodeWithText(stringProvider.signInWithEmail)
217- .assertIsDisplayed()
218- .performClick()
219-
220- composeAndroidTestRule.waitForIdle()
230+ assertDirectEmailStart()
221231
222232 composeAndroidTestRule.onNodeWithText(stringProvider.emailHint)
223233 .performScrollTo()
@@ -306,12 +316,7 @@ class EmailAuthScreenTest {
306316 currentAuthState = authState
307317 }
308318
309- // Click on email provider in AuthMethodPicker
310- composeAndroidTestRule.onNodeWithText(stringProvider.signInWithEmail)
311- .assertIsDisplayed()
312- .performClick()
313-
314- composeAndroidTestRule.waitForIdle()
319+ assertDirectEmailStart()
315320
316321 composeAndroidTestRule.onNodeWithText(stringProvider.emailHint)
317322 .performScrollTo()
@@ -381,12 +386,7 @@ class EmailAuthScreenTest {
381386 currentAuthState = authState
382387 }
383388
384- // Click on email provider in AuthMethodPicker
385- composeAndroidTestRule.onNodeWithText(stringProvider.signInWithEmail)
386- .assertIsDisplayed()
387- .performClick()
388-
389- composeAndroidTestRule.waitForIdle()
389+ assertDirectEmailStart()
390390
391391 composeAndroidTestRule.onNodeWithText(stringProvider.signInDefault)
392392 .assertIsDisplayed()
@@ -471,12 +471,7 @@ class EmailAuthScreenTest {
471471 currentAuthState = authState
472472 }
473473
474- // Click on email provider in AuthMethodPicker
475- composeAndroidTestRule.onNodeWithText(stringProvider.signInWithEmail)
476- .assertIsDisplayed()
477- .performClick()
478-
479- composeAndroidTestRule.waitForIdle()
474+ assertDirectEmailStart()
480475
481476 composeAndroidTestRule.onNodeWithText(stringProvider.signInDefault)
482477 .assertIsDisplayed()
@@ -569,15 +564,7 @@ class EmailAuthScreenTest {
569564 currentAuthState = authState
570565 }
571566
572- // Click on email provider in AuthMethodPicker
573- composeAndroidTestRule.onNodeWithText(stringProvider.signInWithEmail)
574- .assertIsDisplayed()
575- .performClick()
576-
577- composeAndroidTestRule.waitForIdle()
578-
579- composeAndroidTestRule.onNodeWithText(stringProvider.signInDefault)
580- .assertIsDisplayed()
567+ assertDirectEmailStart()
581568
582569 // Click "Sign in with email link" button to switch to email link mode
583570 composeAndroidTestRule.onNodeWithText(stringProvider.signInWithEmailLink.uppercase())
@@ -744,6 +731,7 @@ class EmailAuthScreenTest {
744731 )
745732 )
746733 }
734+ isProviderChoiceAlwaysShown = true
747735 }
748736
749737 // Track auth state changes
@@ -758,12 +746,7 @@ class EmailAuthScreenTest {
758746 // STEP 1: Sign up and verify credential saved
759747 println (" TEST: Starting sign-up flow..." )
760748
761- // Click on email provider
762- composeAndroidTestRule.onNodeWithText(stringProvider.signInWithEmail)
763- .assertIsDisplayed()
764- .performClick()
765-
766- composeAndroidTestRule.waitForIdle()
749+ openEmailProviderFromMethodPicker()
767750
768751 // Click sign-up
769752 composeAndroidTestRule.onNodeWithText(stringProvider.signupPageTitle.uppercase())
@@ -816,13 +799,9 @@ class EmailAuthScreenTest {
816799 // STEP 3: Navigate to SignInUI screen to trigger credential retrieval
817800 println (" TEST: Navigating to sign-in screen to trigger credential retrieval..." )
818801
819- // Click on email provider to show SignInUI, which will trigger auto-retrieval
820- composeAndroidTestRule.onNodeWithText(stringProvider.signInWithEmail)
821- .assertIsDisplayed()
822- .performClick()
823-
824802 composeAndroidTestRule.waitForIdle()
825803 shadowOf(Looper .getMainLooper()).idle()
804+ clickEmailProviderFromMethodPicker()
826805
827806 // SignInUI's LaunchedEffect should now trigger credential retrieval and auto-sign-in
828807 println (" TEST: Waiting for automatic credential retrieval and auto-sign-in..." )
@@ -877,6 +856,7 @@ class EmailAuthScreenTest {
877856 )
878857 )
879858 }
859+ isProviderChoiceAlwaysShown = true
880860 }
881861
882862 var currentAuthState: AuthState = AuthState .Idle
@@ -890,11 +870,7 @@ class EmailAuthScreenTest {
890870 // STEP 1: Sign up and save credential
891871 println (" TEST: Starting sign-up flow..." )
892872
893- composeAndroidTestRule.onNodeWithText(stringProvider.signInWithEmail)
894- .assertIsDisplayed()
895- .performClick()
896-
897- composeAndroidTestRule.waitForIdle()
873+ openEmailProviderFromMethodPicker()
898874
899875 composeAndroidTestRule.onNodeWithText(stringProvider.signupPageTitle.uppercase())
900876 .assertIsDisplayed()
@@ -940,12 +916,9 @@ class EmailAuthScreenTest {
940916 // STEP 3: Navigate to SignInUI to trigger credential retrieval
941917 println (" TEST: Navigating to sign-in screen..." )
942918
943- composeAndroidTestRule.onNodeWithText(stringProvider.signInWithEmail)
944- .assertIsDisplayed()
945- .performClick()
946-
947919 composeAndroidTestRule.waitForIdle()
948920 shadowOf(Looper .getMainLooper()).idle()
921+ clickEmailProviderFromMethodPicker()
949922
950923 println (" TEST: Waiting for automatic credential retrieval and auto-sign-in..." )
951924
@@ -997,11 +970,7 @@ class EmailAuthScreenTest {
997970 }
998971
999972 // Sign up
1000- composeAndroidTestRule.onNodeWithText(stringProvider.signInWithEmail)
1001- .assertIsDisplayed()
1002- .performClick()
1003-
1004- composeAndroidTestRule.waitForIdle()
973+ assertDirectEmailStart()
1005974
1006975 composeAndroidTestRule.onNodeWithText(stringProvider.signupPageTitle.uppercase())
1007976 .assertIsDisplayed()
@@ -1078,4 +1047,21 @@ class EmailAuthScreenTest {
10781047 }
10791048 }
10801049 }
1050+
1051+ private fun assertDirectEmailStart () {
1052+ composeAndroidTestRule.waitForIdle()
1053+ composeAndroidTestRule.onNodeWithText(stringProvider.signInDefault)
1054+ .assertIsDisplayed()
1055+ }
1056+
1057+ private fun openEmailProviderFromMethodPicker () {
1058+ clickEmailProviderFromMethodPicker()
1059+ assertDirectEmailStart()
1060+ }
1061+
1062+ private fun clickEmailProviderFromMethodPicker () {
1063+ composeAndroidTestRule.onNodeWithText(stringProvider.signInWithEmail)
1064+ .assertIsDisplayed()
1065+ .performClick()
1066+ }
10811067}
0 commit comments