@@ -31,7 +31,12 @@ expect fun runTest(test: suspend CoroutineScope.() -> Unit)
3131class FirebaseFirestoreTest {
3232
3333 @Serializable
34- data class FirestoreTest (val prop1 : String , val time : Double = 0.0 , val count : Int = 0 )
34+ data class FirestoreTest (
35+ val prop1 : String ,
36+ val time : Double = 0.0 ,
37+ val count : Int = 0 ,
38+ val list : List <String > = emptyList(),
39+ )
3540
3641 @BeforeTest
3742 fun initializeFirebase () {
@@ -234,11 +239,148 @@ class FirebaseFirestoreTest {
234239
235240 val lastDocumentSnapshot = firstPage.lastOrNull()
236241 assertNotNull(lastDocumentSnapshot)
237- val secondPage = query.startAfter(lastDocumentSnapshot).limit(2 ).get().documents // Second 2 results (only one left)
242+
243+ val secondPage = query.startAfter(lastDocumentSnapshot).get().documents
238244 assertEquals(1 , secondPage.size)
239245 assertEquals(" ccc" , secondPage[0 ].get(" prop1" ))
240246 }
241247
248+ @Test
249+ fun testStartAfterFieldValues () = runTest {
250+ setupFirestoreData()
251+ val query = Firebase .firestore
252+ .collection(" testFirestoreQuerying" )
253+ .orderBy(" prop1" , Direction .ASCENDING )
254+
255+ val firstPage = query.get().documents
256+ assertEquals(3 , firstPage.size)
257+ assertEquals(" aaa" , firstPage[0 ].get(" prop1" ))
258+ assertEquals(" bbb" , firstPage[1 ].get(" prop1" ))
259+ assertEquals(" ccc" , firstPage[2 ].get(" prop1" ))
260+
261+ val secondPage = query.startAfter(" bbb" ).get().documents
262+ assertEquals(1 , secondPage.size)
263+ assertEquals(" ccc" , secondPage[0 ].get(" prop1" ))
264+ }
265+
266+ @Test
267+ fun testStartAtDocumentSnapshot () = runTest {
268+ setupFirestoreData()
269+ val query = Firebase .firestore
270+ .collection(" testFirestoreQuerying" )
271+ .orderBy(" prop1" , Direction .ASCENDING )
272+
273+ val firstPage = query.limit(2 ).get().documents // First 2 results
274+ assertEquals(2 , firstPage.size)
275+ assertEquals(" aaa" , firstPage[0 ].get(" prop1" ))
276+ assertEquals(" bbb" , firstPage[1 ].get(" prop1" ))
277+
278+ val lastDocumentSnapshot = firstPage.lastOrNull()
279+ assertNotNull(lastDocumentSnapshot)
280+
281+ val secondPage = query.startAt(lastDocumentSnapshot).get().documents
282+ assertEquals(2 , secondPage.size)
283+ assertEquals(" bbb" , secondPage[0 ].get(" prop1" ))
284+ assertEquals(" ccc" , secondPage[1 ].get(" prop1" ))
285+ }
286+
287+ @Test
288+ fun testStartAtFieldValues () = runTest {
289+ setupFirestoreData()
290+ val query = Firebase .firestore
291+ .collection(" testFirestoreQuerying" )
292+ .orderBy(" prop1" , Direction .ASCENDING )
293+
294+ val firstPage = query.get().documents // First 2 results
295+ assertEquals(3 , firstPage.size)
296+ assertEquals(" aaa" , firstPage[0 ].get(" prop1" ))
297+ assertEquals(" bbb" , firstPage[1 ].get(" prop1" ))
298+ assertEquals(" ccc" , firstPage[2 ].get(" prop1" ))
299+
300+ val secondPage = query.startAt(" bbb" ).get().documents
301+ assertEquals(2 , secondPage.size)
302+ assertEquals(" bbb" , secondPage[0 ].get(" prop1" ))
303+ assertEquals(" ccc" , secondPage[1 ].get(" prop1" ))
304+ }
305+
306+ @Test
307+ fun testEndBeforeDocumentSnapshot () = runTest {
308+ setupFirestoreData()
309+ val query = Firebase .firestore
310+ .collection(" testFirestoreQuerying" )
311+ .orderBy(" prop1" , Direction .ASCENDING )
312+
313+ val firstPage = query.limit(2 ).get().documents // First 2 results
314+ assertEquals(2 , firstPage.size)
315+ assertEquals(" aaa" , firstPage[0 ].get(" prop1" ))
316+ assertEquals(" bbb" , firstPage[1 ].get(" prop1" ))
317+
318+ val lastDocumentSnapshot = firstPage.lastOrNull()
319+ assertNotNull(lastDocumentSnapshot)
320+
321+ val secondPage = query.endBefore(lastDocumentSnapshot).get().documents
322+ assertEquals(1 , secondPage.size)
323+ assertEquals(" aaa" , secondPage[0 ].get(" prop1" ))
324+ }
325+
326+ @Test
327+ fun testEndBeforeFieldValues () = runTest {
328+ setupFirestoreData()
329+ val query = Firebase .firestore
330+ .collection(" testFirestoreQuerying" )
331+ .orderBy(" prop1" , Direction .ASCENDING )
332+
333+ val firstPage = query.get().documents
334+ assertEquals(3 , firstPage.size)
335+ assertEquals(" aaa" , firstPage[0 ].get(" prop1" ))
336+ assertEquals(" bbb" , firstPage[1 ].get(" prop1" ))
337+ assertEquals(" ccc" , firstPage[2 ].get(" prop1" ))
338+
339+ val secondPage = query.endBefore(" bbb" ).get().documents
340+ assertEquals(1 , secondPage.size)
341+ assertEquals(" aaa" , secondPage[0 ].get(" prop1" ))
342+ }
343+
344+ @Test
345+ fun testEndAtDocumentSnapshot () = runTest {
346+ setupFirestoreData()
347+ val query = Firebase .firestore
348+ .collection(" testFirestoreQuerying" )
349+ .orderBy(" prop1" , Direction .ASCENDING )
350+
351+ val firstPage = query.limit(2 ).get().documents // First 2 results
352+ assertEquals(2 , firstPage.size)
353+ assertEquals(" aaa" , firstPage[0 ].get(" prop1" ))
354+ assertEquals(" bbb" , firstPage[1 ].get(" prop1" ))
355+
356+ val lastDocumentSnapshot = firstPage.lastOrNull()
357+ assertNotNull(lastDocumentSnapshot)
358+
359+ val secondPage = query.endAt(lastDocumentSnapshot).get().documents
360+ assertEquals(2 , secondPage.size)
361+ assertEquals(" aaa" , secondPage[0 ].get(" prop1" ))
362+ assertEquals(" bbb" , secondPage[1 ].get(" prop1" ))
363+ }
364+
365+ @Test
366+ fun testEndAtFieldValues () = runTest {
367+ setupFirestoreData()
368+ val query = Firebase .firestore
369+ .collection(" testFirestoreQuerying" )
370+ .orderBy(" prop1" , Direction .ASCENDING )
371+
372+ val firstPage = query.get().documents // First 2 results
373+ assertEquals(3 , firstPage.size)
374+ assertEquals(" aaa" , firstPage[0 ].get(" prop1" ))
375+ assertEquals(" bbb" , firstPage[1 ].get(" prop1" ))
376+ assertEquals(" ccc" , firstPage[2 ].get(" prop1" ))
377+
378+ val secondPage = query.endAt(" bbb" ).get().documents
379+ assertEquals(2 , secondPage.size)
380+ assertEquals(" aaa" , secondPage[0 ].get(" prop1" ))
381+ assertEquals(" bbb" , secondPage[1 ].get(" prop1" ))
382+ }
383+
242384 @Test
243385 fun testIncrementFieldValue () = runTest {
244386 val doc = Firebase .firestore
@@ -254,6 +396,36 @@ class FirebaseFirestoreTest {
254396 assertEquals(5 , dataAfter.count)
255397 }
256398
399+ @Test
400+ fun testArrayUnion () = runTest {
401+ val doc = Firebase .firestore
402+ .collection(" testFirestoreArrayUnion" )
403+ .document(" test1" )
404+
405+ doc.set(FirestoreTest .serializer(), FirestoreTest (" increment1" , list = listOf (" first" )))
406+ val dataBefore = doc.get().data(FirestoreTest .serializer())
407+ assertEquals(listOf (" first" ), dataBefore.list)
408+
409+ doc.update(" list" to FieldValue .arrayUnion(" second" ))
410+ val dataAfter = doc.get().data(FirestoreTest .serializer())
411+ assertEquals(listOf (" first" , " second" ), dataAfter.list)
412+ }
413+
414+ @Test
415+ fun testArrayRemove () = runTest {
416+ val doc = Firebase .firestore
417+ .collection(" testFirestoreArrayRemove" )
418+ .document(" test1" )
419+
420+ doc.set(FirestoreTest .serializer(), FirestoreTest (" increment1" , list = listOf (" first" , " second" )))
421+ val dataBefore = doc.get().data(FirestoreTest .serializer())
422+ assertEquals(listOf (" first" , " second" ), dataBefore.list)
423+
424+ doc.update(" list" to FieldValue .arrayRemove(" second" ))
425+ val dataAfter = doc.get().data(FirestoreTest .serializer())
426+ assertEquals(listOf (" first" ), dataAfter.list)
427+ }
428+
257429 private suspend fun setupFirestoreData () {
258430 Firebase .firestore.collection(" testFirestoreQuerying" )
259431 .document(" one" )
0 commit comments