@@ -15,7 +15,7 @@ expect fun runTest(test: suspend () -> Unit)
15
15
class FirebaseFirestoreTest {
16
16
17
17
@Serializable
18
- data class FirestoreTest (val prop1 : String , val time : Double = 0.0 )
18
+ data class FirestoreTest (val prop1 : String , val time : Double? = 0.0 )
19
19
20
20
@BeforeTest
21
21
fun initializeFirebase () {
@@ -51,7 +51,6 @@ class FirebaseFirestoreTest {
51
51
@Test
52
52
fun testFieldOrderBy () = runTest {
53
53
setupFirestoreData()
54
-
55
54
val resultDocs = Firebase .firestore.collection(" FirebaseFirestoreTest" )
56
55
.orderBy(FieldPath (" prop1" )).get().documentChanges
57
56
assertEquals(3 , resultDocs.size)
@@ -63,7 +62,6 @@ class FirebaseFirestoreTest {
63
62
@Test
64
63
fun testStringOrderByAscending () = runTest {
65
64
setupFirestoreData()
66
-
67
65
val resultDocs = Firebase .firestore.collection(" FirebaseFirestoreTest" )
68
66
.orderBy(" prop1" , Direction .ASCENDING ).get().documentChanges
69
67
assertEquals(3 , resultDocs.size)
@@ -113,12 +111,117 @@ class FirebaseFirestoreTest {
113
111
val doc = Firebase .firestore
114
112
.collection(" testServerTimestampFieldValue" )
115
113
.document(" test" )
114
+ doc.set(
115
+ FirestoreTest .serializer(),
116
+ FirestoreTest (" ServerTimestamp" ),
117
+ )
118
+ assertEquals(0.0 , doc.get().get(" time" ))
119
+
120
+ doc.update(
121
+ fieldsAndValues = arrayOf(
122
+ " time" to 123.0
123
+ )
124
+ )
125
+ assertEquals(123.0 , doc.get().data(FirestoreTest .serializer()).time)
126
+
127
+ }
116
128
117
- doc.set(FirestoreTest .serializer(), FirestoreTest (" ServerTimestamp" , FieldValue .serverTimestamp().toString().toDouble()))
129
+ @Test
130
+ fun testExtendedSetBatch () = runTest {
131
+ val doc = Firebase .firestore
132
+ .collection(" testServerTestSetBatch" )
133
+ .document(" test" )
134
+ val batch = Firebase .firestore.batch()
135
+ batch.set(
136
+ documentRef = doc,
137
+ strategy = FirestoreTest .serializer(),
138
+ data = FirestoreTest (
139
+ prop1 = " prop1" ,
140
+ time = 123.0
141
+ ),
142
+ fieldsAndValues = arrayOf(
143
+ " time" to 124.0
144
+ )
145
+ )
146
+ batch.commit()
147
+
148
+ assertEquals(124.0 , doc.get().get(" time" ))
149
+ assertEquals(" prop1" , doc.get().data(FirestoreTest .serializer()).prop1)
118
150
119
- assertNotEquals(FieldValue .serverTimestamp(), doc.get().get(" time" ))
120
- assertNotEquals(FieldValue .serverTimestamp(), doc.get().data(FirestoreTest .serializer()).time)
151
+ }
121
152
153
+ @Test
154
+ fun testSetBatchDoesNotEncodeEmptyValues () = runTest {
155
+ val doc = Firebase .firestore
156
+ .collection(" testServerTestSetBatch" )
157
+ .document(" test" )
158
+ val batch = Firebase .firestore.batch()
159
+ batch.set(
160
+ documentRef = doc,
161
+ strategy = FirestoreTest .serializer(),
162
+ data = FirestoreTest (
163
+ prop1 = " prop1-set" ,
164
+ time = 125.0
165
+ ),
166
+ fieldsAndValues = arrayOf<Pair <String , Any >>()
167
+ )
168
+ batch.commit()
169
+
170
+ assertEquals(125.0 , doc.get().get(" time" ) as Double? )
171
+ assertEquals(" prop1-set" , doc.get().data(FirestoreTest .serializer()).prop1)
172
+ }
173
+
174
+ @Test
175
+ fun testExtendedUpdateBatch () = runTest {
176
+ val doc = Firebase .firestore
177
+ .collection(" testServerTestSetBatch" )
178
+ .document(" test" ).apply {
179
+ set(
180
+ FirestoreTest (
181
+ prop1 = " prop1" ,
182
+ time = 123.0
183
+ )
184
+ )
185
+ }
186
+ val batch = Firebase .firestore.batch()
187
+ batch.update(
188
+ documentRef = doc,
189
+ strategy = FirestoreTest .serializer(),
190
+ data = FirestoreTest (
191
+ prop1 = " prop1-updated" ,
192
+ time = 123.0
193
+ ),
194
+ encodeDefaults = false ,
195
+ fieldsAndValues = arrayOf(
196
+ " time" to FieldValue .delete
197
+ )
198
+ )
199
+ batch.commit()
200
+
201
+ assertEquals(null , doc.get().get(" time" ) as Double? )
202
+ assertEquals(" prop1-updated" , doc.get().data(FirestoreTest .serializer()).prop1)
203
+ }
204
+
205
+ @Test
206
+ fun testUpdateBatchDoesNotEncodeEmptyValues () = runTest {
207
+ val doc = Firebase .firestore
208
+ .collection(" testServerTestSetBatch" )
209
+ .document(" test" )
210
+ val batch = Firebase .firestore.batch()
211
+ batch.update(
212
+ documentRef = doc,
213
+ strategy = FirestoreTest .serializer(),
214
+ data = FirestoreTest (
215
+ prop1 = " prop1-set" ,
216
+ time = 126.0
217
+ ),
218
+ encodeDefaults = false ,
219
+ fieldsAndValues = arrayOf<Pair <String , Any >>()
220
+ )
221
+ batch.commit()
222
+
223
+ assertEquals(126.0 , doc.get().get(" time" ) as Double? )
224
+ assertEquals(" prop1-set" , doc.get().data(FirestoreTest .serializer()).prop1)
122
225
}
123
226
124
227
private suspend fun setupFirestoreData () {
0 commit comments