Skip to content

Commit 0972225

Browse files
committed
email property partially implemented - not all EPs return it
simple tests added for createUserWithEmailAndPassword, signInWithEmailAndPassword, and signInAnonymously.
1 parent f63e1b3 commit 0972225

File tree

3 files changed

+86
-11
lines changed

3 files changed

+86
-11
lines changed

src/main/java/com/google/firebase/auth/FirebaseAuth.kt

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -52,17 +52,24 @@ class FirebaseUserImpl private constructor(
5252
val idToken: String,
5353
val refreshToken: String,
5454
val expiresIn: Int,
55-
val createdAt: Long
55+
val createdAt: Long,
56+
override val email: String
5657
) : FirebaseUser() {
5758

58-
constructor(app: FirebaseApp, data: JsonObject, isAnonymous: Boolean = data["isAnonymous"]?.jsonPrimitive?.booleanOrNull ?: false) : this(
59-
app,
60-
isAnonymous,
61-
data["uid"]?.jsonPrimitive?.contentOrNull ?: data["user_id"]?.jsonPrimitive?.contentOrNull ?: data["localId"]?.jsonPrimitive?.contentOrNull ?: "",
62-
data["idToken"]?.jsonPrimitive?.contentOrNull ?: data.getValue("id_token").jsonPrimitive.content,
63-
data["refreshToken"]?.jsonPrimitive?.contentOrNull ?: data.getValue("refresh_token").jsonPrimitive.content,
64-
data["expiresIn"]?.jsonPrimitive?.intOrNull ?: data.getValue("expires_in").jsonPrimitive.int,
65-
data["createdAt"]?.jsonPrimitive?.longOrNull ?: System.currentTimeMillis()
59+
constructor(
60+
app: FirebaseApp,
61+
data: JsonObject,
62+
isAnonymous: Boolean = data["isAnonymous"]?.jsonPrimitive?.booleanOrNull ?: false,
63+
email: String = data.getOrElse("email"){ null }?.jsonPrimitive?.contentOrNull ?: ""
64+
): this(
65+
app = app,
66+
isAnonymous = isAnonymous,
67+
uid = data["uid"]?.jsonPrimitive?.contentOrNull ?: data["user_id"]?.jsonPrimitive?.contentOrNull ?: data["localId"]?.jsonPrimitive?.contentOrNull ?: "",
68+
idToken = data["idToken"]?.jsonPrimitive?.contentOrNull ?: data.getValue("id_token").jsonPrimitive.content,
69+
refreshToken = data["refreshToken"]?.jsonPrimitive?.contentOrNull ?: data.getValue("refresh_token").jsonPrimitive.content,
70+
expiresIn = data["expiresIn"]?.jsonPrimitive?.intOrNull ?: data.getValue("expires_in").jsonPrimitive.int,
71+
createdAt = data["createdAt"]?.jsonPrimitive?.longOrNull ?: System.currentTimeMillis(),
72+
email = email
6673
)
6774

6875
val claims: Map<String, Any?> by lazy {
@@ -385,7 +392,7 @@ class FirebaseAuth constructor(val app: FirebaseApp) : InternalAuthProvider {
385392
signOutAndThrowInvalidUserException(body.orEmpty(), "token API returned an error: $body")
386393
} else {
387394
jsonParser.parseToJsonElement(body!!).jsonObject.apply {
388-
val user = FirebaseUserImpl(app, this, user.isAnonymous)
395+
val user = FirebaseUserImpl(app, this, user.isAnonymous, user.email)
389396
if (user.claims["aud"] != app.options.projectId) {
390397
signOutAndThrowInvalidUserException(
391398
user.claims.toString(),

src/main/java/com/google/firebase/auth/FirebaseUser.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ abstract class FirebaseUser {
77
abstract val isAnonymous: Boolean
88
abstract fun delete(): Task<Void>
99
abstract fun reload(): Task<Void>
10+
abstract val email: String
1011

11-
val email: String get() = TODO()
1212
val displayName: String get() = TODO()
1313
val phoneNumber: String get() = TODO()
1414
val photoUrl: String? get() = TODO()

src/test/kotlin/FirebaseAuthTest.kt

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
import android.app.Application
2+
import com.google.firebase.Firebase
3+
import com.google.firebase.FirebaseOptions
4+
import com.google.firebase.FirebasePlatform
5+
import com.google.firebase.auth.FirebaseAuth
6+
import com.google.firebase.firestore.firestore
7+
import com.google.firebase.initialize
8+
import kotlinx.coroutines.tasks.await
9+
import kotlinx.coroutines.test.runTest
10+
import org.junit.Assert.assertArrayEquals
11+
import org.junit.Assert.assertEquals
12+
import org.junit.Assert.assertNotEquals
13+
import org.junit.Before
14+
import org.junit.Test
15+
import java.io.File
16+
import kotlin.random.Random
17+
18+
internal class FirebaseAuthTest: FirebaseTest() {
19+
20+
private lateinit var auth: FirebaseAuth
21+
22+
@Before
23+
fun initialize() {
24+
FirebasePlatform.initializeFirebasePlatform(object : FirebasePlatform() {
25+
val storage = mutableMapOf<String, String>()
26+
override fun store(key: String, value: String) = storage.set(key, value)
27+
override fun retrieve(key: String) = storage[key]
28+
override fun clear(key: String) { storage.remove(key) }
29+
override fun log(msg: String) = println(msg)
30+
override fun getDatabasePath(name: String) = File("./build/$name")
31+
})
32+
val options = FirebaseOptions.Builder()
33+
.setProjectId("my-firebase-project")
34+
.setApplicationId("1:27992087142:android:ce3b6448250083d1")
35+
.setApiKey("AIzaSyADUe90ULnQDuGShD9W23RDP0xmeDc6Mvw")
36+
// setDatabaseURL(...)
37+
// setStorageBucket(...)
38+
.build()
39+
val firebaseApp = Firebase.initialize(Application(), options)
40+
auth = FirebaseAuth.getInstance(app = firebaseApp)
41+
}
42+
43+
@Test
44+
fun testCreateUserWithEmailAndPassword() = runTest {
45+
val email = "test+${Random.nextInt(100000)}@test.com"
46+
val createResult = auth.createUserWithEmailAndPassword(
47+
email,
48+
"test123"
49+
).await()
50+
assertNotEquals(null, createResult.user?.uid)
51+
//assertEquals(null, createResult.user?.displayName)
52+
//assertEquals(null, createResult.user?.phoneNumber)
53+
assertEquals(false, createResult.user?.isAnonymous)
54+
assertEquals(email, createResult.user?.email)
55+
56+
val signInResult = auth.signInWithEmailAndPassword(email, "test123").await()
57+
assertEquals(createResult.user?.uid, signInResult.user?.uid)
58+
59+
signInResult.user!!.delete()
60+
}
61+
62+
@Test
63+
fun testSignInAnonymously() = runTest {
64+
val signInResult = auth.signInAnonymously().await()
65+
assertEquals(true, signInResult.user?.isAnonymous)
66+
signInResult.user!!.delete()
67+
}
68+
}

0 commit comments

Comments
 (0)