Skip to content

Commit 34d514c

Browse files
committed
more test
1 parent c101fb8 commit 34d514c

File tree

1 file changed

+97
-0
lines changed

1 file changed

+97
-0
lines changed
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
package com.firebase.ui.auth.ui.email
2+
3+
import android.app.Application
4+
import androidx.compose.ui.semantics.SemanticsProperties
5+
import androidx.compose.ui.test.*
6+
import androidx.compose.ui.test.junit4.createComposeRule
7+
import androidx.test.core.app.ApplicationProvider
8+
import androidx.test.ext.junit.runners.AndroidJUnit4
9+
import com.firebase.ui.auth.IdpResponse
10+
import com.firebase.ui.auth.data.model.FlowParameters
11+
import com.firebase.ui.auth.data.model.User
12+
import com.firebase.ui.auth.viewmodel.email.WelcomeBackPasswordViewModel
13+
import com.google.common.truth.Truth.assertThat
14+
import com.google.firebase.FirebaseApp
15+
import com.google.firebase.FirebaseOptions
16+
import com.google.firebase.auth.EmailAuthProvider
17+
import org.junit.Before
18+
import org.junit.Rule
19+
import org.junit.Test
20+
import org.junit.runner.RunWith
21+
22+
23+
private fun hasAnyError(): SemanticsMatcher =
24+
SemanticsMatcher("has any error") { it.config.contains(SemanticsProperties.Error) }
25+
26+
private val signInButton =
27+
hasText("Sign in", ignoreCase = true).and(hasClickAction())
28+
29+
@RunWith(AndroidJUnit4::class)
30+
class WelcomeBackPasswordPromptTest {
31+
32+
@get:Rule
33+
val composeTestRule = createComposeRule()
34+
35+
private lateinit var flowParameters: FlowParameters
36+
private lateinit var idpResponse: IdpResponse
37+
private lateinit var appContext: Application
38+
39+
@Before
40+
fun setUp() {
41+
appContext = ApplicationProvider.getApplicationContext()
42+
43+
if (FirebaseApp.getApps(appContext).none { it.name == "test-app" }) {
44+
val opts = FirebaseOptions.Builder()
45+
.setApplicationId("1:123:android:dummy") // minimal stub values
46+
.setApiKey("dummy")
47+
.setProjectId("dummy")
48+
.build()
49+
FirebaseApp.initializeApp(appContext, opts, "test-app")
50+
}
51+
52+
flowParameters = FlowParameters(
53+
appName = "test-app",
54+
providers = emptyList(),
55+
defaultProvider = null,
56+
themeId = 0,
57+
logoId = 0,
58+
termsOfServiceUrl = "https://example.com/terms",
59+
privacyPolicyUrl = "https://example.com/privacy",
60+
enableCredentials = false,
61+
enableAnonymousUpgrade = false,
62+
alwaysShowProviderChoice = true,
63+
lockOrientation = false,
64+
emailLink = null,
65+
passwordResetSettings = null,
66+
authMethodPickerLayout = null
67+
)
68+
69+
val user = User.Builder(EmailAuthProvider.PROVIDER_ID, "[email protected]").build()
70+
idpResponse = IdpResponse.Builder(user).build()
71+
}
72+
73+
@Test
74+
fun blankPassword_showsError_andDoesNotInvokeSuccess() {
75+
var successCalled = false
76+
77+
composeTestRule.setContent {
78+
WelcomeBackPasswordPrompt(
79+
flowParameters = flowParameters,
80+
email = "[email protected]",
81+
idpResponse = idpResponse,
82+
onSignInSuccess = { successCalled = true },
83+
onSignInError = {},
84+
onForgotPassword = {},
85+
viewModel = WelcomeBackPasswordViewModel(appContext)
86+
)
87+
}
88+
89+
composeTestRule.onNode(signInButton).performClick()
90+
91+
composeTestRule
92+
.onNode(hasText("Password", ignoreCase = true).and(hasAnyError()))
93+
.assertExists()
94+
95+
assertThat(successCalled).isFalse()
96+
}
97+
}

0 commit comments

Comments
 (0)