Skip to content

Commit 23bf6dc

Browse files
authored
Merge pull request #33 from splendo/32-add-timestamps-delete
Add Timestamp.ServerDelete and relatives tests.
2 parents b713011 + 3900742 commit 23bf6dc

File tree

3 files changed

+32
-1
lines changed

3 files changed

+32
-1
lines changed

firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/FirebaseTimestamp.kt

+3-1
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@ package dev.gitlive.firebase.firestore
33
sealed class FirebaseTimestamp {
44
data class Value(val value: Timestamp) : FirebaseTimestamp()
55
object ServerValue : FirebaseTimestamp()
6+
object ServerDelete : FirebaseTimestamp()
67
}
78

89
val FirebaseTimestamp.timestamp: Timestamp? get() = when (this) {
910
is FirebaseTimestamp.Value -> value
10-
is FirebaseTimestamp.ServerValue -> null
11+
is FirebaseTimestamp.ServerValue,
12+
is FirebaseTimestamp.ServerDelete -> null
1113
}

firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/TimestampSerializer.kt

+3
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ abstract class AbstractTimestampSerializer<T> : KSerializer<T> {
3939
is FirebaseTimestamp.ServerValue -> {
4040
objectEncoder.encodeObject(descriptor, 0, FieldValue.serverTimestamp())
4141
}
42+
is FirebaseTimestamp.ServerDelete -> {
43+
objectEncoder.encodeObject(descriptor, 0, FieldValue.delete)
44+
}
4245
}
4346
objectEncoder.endStructure(descriptor)
4447
}

firebase-firestore/src/commonTest/kotlin/dev/gitlive/firebase/firestore/TimestampTests.kt

+26
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,30 @@ class TimestampTests {
6262
assertEquals("uid123", decoded.uid)
6363
assertEquals(null, decoded.updatedAt)
6464
}
65+
66+
@Test
67+
fun decodeDeletedTimestampObject() = runTest {
68+
val timestamp = timestampWith(123, 345)
69+
val obj = mapOf(
70+
"uid" to "uid123",
71+
"createdAt" to timestampNow(),
72+
"updatedAt" to FieldValue.delete,
73+
"deletedAt" to FirebaseTimestamp.ServerDelete
74+
)
75+
val decoded: TestData = decode(obj)
76+
77+
assertEquals("uid123", decoded.uid)
78+
assertEquals(null, decoded.updatedAt)
79+
assertEquals(null, decoded.deletedAt)
80+
}
81+
82+
@Test
83+
fun encodeDeletedTimestampObject() = runTest {
84+
val timestamp = FieldValue.delete
85+
val item = TestData("uid123", timestamp, null, FirebaseTimestamp.ServerDelete)
86+
val encoded = encode(item, shouldEncodeElementDefault = false) as Map<String, Any?>
87+
assertEquals("uid123", encoded["uid"])
88+
assertEquals(timestamp, encoded["createdAt"])
89+
assertEquals(FieldValue.delete, encoded["deletedAt"])
90+
}
6591
}

0 commit comments

Comments
 (0)