-
Notifications
You must be signed in to change notification settings - Fork 168
/
Copy pathauth.kt
125 lines (104 loc) · 4.71 KB
/
auth.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/*
* Copyright (c) 2020 GitLive Ltd. Use of this source code is governed by the Apache 2.0 license.
*/
package dev.gitlive.firebase.auth
import dev.gitlive.firebase.*
import kotlin.random.Random
import kotlin.test.*
expect val emulatorHost: String
expect val context: Any
expect fun runTest(test: suspend () -> Unit)
class FirebaseAuthTest {
@BeforeTest
fun initializeFirebase() {
Firebase
.takeIf { Firebase.apps(context).isEmpty() }
?.apply {
initialize(
context,
FirebaseOptions(
applicationId = "1:846484016111:ios:dd1f6688bad7af768c841a",
apiKey = "AIzaSyCK87dcMFhzCz_kJVs2cT2AVlqOTLuyWV0",
databaseUrl = "https://fir-kotlin-sdk.firebaseio.com",
storageBucket = "fir-kotlin-sdk.appspot.com",
projectId = "fir-kotlin-sdk",
gcmSenderId = "846484016111"
)
)
Firebase.auth.useEmulator(emulatorHost, 9099)
}
}
@Test
fun testSignInWithUsernameAndPassword() = runTest {
val uid = getTestUid("[email protected]", "test123")
val result = Firebase.auth.signInWithEmailAndPassword("[email protected]", "test123")
assertEquals(uid, result.user!!.uid)
}
@Test
fun testCreateUserWithEmailAndPassword() = runTest {
val email = "test+${Random.nextInt(100000)}@test.com"
val createResult = Firebase.auth.createUserWithEmailAndPassword(email, "test123")
assertNotEquals(null, createResult.user?.uid)
assertEquals(null, createResult.user?.displayName)
assertEquals(null, createResult.user?.phoneNumber)
assertEquals(email, createResult.user?.email)
val signInResult = Firebase.auth.signInWithEmailAndPassword(email, "test123")
assertEquals(createResult.user?.uid, signInResult.user?.uid)
signInResult.user!!.delete()
}
@Test
fun testFetchSignInMethods() = runTest {
val email = "test+${Random.nextInt(100000)}@test.com"
var signInMethodResult = Firebase.auth.fetchSignInMethodsForEmail(email)
assertEquals(emptyList(), signInMethodResult)
Firebase.auth.createUserWithEmailAndPassword(email, "test123")
signInMethodResult = Firebase.auth.fetchSignInMethodsForEmail(email)
assertEquals(listOf("password"), signInMethodResult)
Firebase.auth.signInWithEmailAndPassword(email, "test123").user!!.delete()
}
@Test
fun testSendEmailVerification() = runTest {
val email = "test+${Random.nextInt(100000)}@test.com"
val createResult = Firebase.auth.createUserWithEmailAndPassword(email, "test123")
assertNotEquals(null, createResult.user?.uid)
createResult.user!!.sendEmailVerification()
createResult.user!!.delete()
}
@Test
fun sendPasswordResetEmail() = runTest {
val email = "test+${Random.nextInt(100000)}@test.com"
val createResult = Firebase.auth.createUserWithEmailAndPassword(email, "test123")
assertNotEquals(null, createResult.user?.uid)
Firebase.auth.sendPasswordResetEmail(email)
createResult.user!!.delete()
}
@Test
fun testSignInWithCredential() = runTest {
val uid = getTestUid("[email protected]", "test123")
val credential = EmailAuthProvider.credential("[email protected]", "test123")
val result = Firebase.auth.signInWithCredential(credential)
assertEquals(uid, result.user!!.uid)
}
@Test
fun testIsSignInWithEmailLink() {
val validLink = "http://localhost:9099/emulator/action?mode=signIn&lang=en&oobCode=_vr0QcFcxcVeLZbrcU-GpTaZiuxlHquqdC8MSy0YM_vzWCTAQgV9Jq&apiKey=fake-api-key&continueUrl=https%3A%2F%2Fexample.com%2Fsignin"
val invalidLink = "http://localhost:9099/emulator/action?mode=signIn&lang=en&&apiKey=fake-api-key&continueUrl=https%3A%2F%2Fexample.com%2Fsignin"
assertTrue(Firebase.auth.isSignInWithEmailLink(validLink))
assertFalse(Firebase.auth.isSignInWithEmailLink(invalidLink))
}
private suspend fun getTestUid(email: String, password: String): String {
val uid = Firebase.auth.let {
val user = try {
it.createUserWithEmailAndPassword(email, password).user
} catch (e: FirebaseAuthUserCollisionException) {
// the user already exists, just sign in for getting user's ID
it.signInWithEmailAndPassword(email, password).user
}
user!!.uid
}
check(Firebase.auth.currentUser != null)
Firebase.auth.signOut()
check(Firebase.auth.currentUser == null)
return uid
}
}