@@ -1490,4 +1490,117 @@ describeSpec('Writes:', [], () => {
1490
1490
. expectEvents ( query1 , { added : [ docA , docB ] , fromCache : true } ) ;
1491
1491
}
1492
1492
) ;
1493
+
1494
+ specTest (
1495
+ 'Wait for pending writes resolves after write acknowledgment' ,
1496
+ [ ] ,
1497
+ ( ) => {
1498
+ return spec ( )
1499
+ . userSets ( 'collection/a' , { k : 'a' } )
1500
+ . userSets ( 'collection/b' , { k : 'b' } )
1501
+ . waitForPendingWrites ( )
1502
+ . writeAcks ( 'collection/a' , 1001 )
1503
+ . failWrite (
1504
+ 'collection/b' ,
1505
+ new RpcError ( Code . FAILED_PRECONDITION , 'Write error' )
1506
+ )
1507
+ . expectWaitForPendingWritesEvent ( ) ;
1508
+ }
1509
+ ) ;
1510
+
1511
+ specTest ( 'Wait for pending writes resolves with no writes' , [ ] , ( ) => {
1512
+ return spec ( ) . waitForPendingWrites ( ) . expectWaitForPendingWritesEvent ( ) ;
1513
+ } ) ;
1514
+
1515
+ specTest ( 'Wait for pending writes resolves multiple times' , [ ] , ( ) => {
1516
+ return spec ( )
1517
+ . userSets ( 'collection/a' , { k : 'a' } )
1518
+ . waitForPendingWrites ( )
1519
+ . waitForPendingWrites ( )
1520
+ . writeAcks ( 'collection/a' , 1001 )
1521
+ . expectWaitForPendingWritesEvent ( 2 ) ;
1522
+ } ) ;
1523
+
1524
+ specTest (
1525
+ 'Wait for pending writes resolves if another write is issued' ,
1526
+ [ ] ,
1527
+ ( ) => {
1528
+ return spec ( )
1529
+ . userSets ( 'collection/a' , { k : 'a' } )
1530
+ . waitForPendingWrites ( )
1531
+ . userSets ( 'collection/b' , { k : 'b' } )
1532
+ . writeAcks ( 'collection/a' , 1001 )
1533
+ . expectWaitForPendingWritesEvent ( )
1534
+ . writeAcks ( 'collection/b' , 1002 ) ;
1535
+ }
1536
+ ) ;
1537
+
1538
+ specTest (
1539
+ 'Wait for pending writes waits after restart' ,
1540
+ [ 'durable-persistence' ] ,
1541
+ ( ) => {
1542
+ return spec ( )
1543
+ . userSets ( 'collection/a' , { k : 'a' } )
1544
+ . restart ( )
1545
+ . waitForPendingWrites ( )
1546
+ . writeAcks ( 'collection/a' , 1001 , { expectUserCallback : false } )
1547
+ . expectWaitForPendingWritesEvent ( ) ;
1548
+ }
1549
+ ) ;
1550
+
1551
+ specTest (
1552
+ 'Wait for pending writes resolves for write in secondary tab' ,
1553
+ [ 'multi-client' ] ,
1554
+ ( ) => {
1555
+ return client ( 0 )
1556
+ . expectPrimaryState ( true )
1557
+ . client ( 1 )
1558
+ . userSets ( 'collection/a' , { k : 'a' } )
1559
+ . waitForPendingWrites ( )
1560
+ . client ( 0 )
1561
+ . writeAcks ( 'collection/a' , 1001 , { expectUserCallback : false } )
1562
+ . client ( 1 )
1563
+ . expectUserCallbacks ( { acknowledged : [ 'collection/a' ] } )
1564
+ . expectWaitForPendingWritesEvent ( ) ;
1565
+ }
1566
+ ) ;
1567
+
1568
+ specTest (
1569
+ 'Wait for pending writes resolves independently for different tabs' ,
1570
+ [ 'multi-client' ] ,
1571
+ ( ) => {
1572
+ return client ( 0 )
1573
+ . userSets ( 'collection/a' , { k : 'a' } )
1574
+ . waitForPendingWrites ( )
1575
+ . client ( 1 )
1576
+ . userSets ( 'collection/b' , { k : 'b' } )
1577
+ . waitForPendingWrites ( )
1578
+ . client ( 2 )
1579
+ . userSets ( 'collection/c' , { k : 'c' } )
1580
+ . waitForPendingWrites ( )
1581
+ . client ( 0 )
1582
+ . writeAcks ( 'collection/a' , 1001 )
1583
+ . expectWaitForPendingWritesEvent ( /* count= */ 1 )
1584
+ . client ( 1 )
1585
+ . expectWaitForPendingWritesEvent ( /* count= */ 0 )
1586
+ . client ( 2 )
1587
+ . expectWaitForPendingWritesEvent ( /* count= */ 0 )
1588
+ . client ( 0 )
1589
+ . writeAcks ( 'collection/b' , 1002 , { expectUserCallback : false } )
1590
+ . expectWaitForPendingWritesEvent ( /* count= */ 0 )
1591
+ . client ( 1 )
1592
+ . expectUserCallbacks ( { acknowledged : [ 'collection/b' ] } )
1593
+ . expectWaitForPendingWritesEvent ( /* count= */ 1 )
1594
+ . client ( 2 )
1595
+ . expectWaitForPendingWritesEvent ( /* count= */ 0 )
1596
+ . client ( 0 )
1597
+ . writeAcks ( 'collection/c' , 1003 , { expectUserCallback : false } )
1598
+ . expectWaitForPendingWritesEvent ( /* count= */ 0 )
1599
+ . client ( 1 )
1600
+ . expectWaitForPendingWritesEvent ( /* count= */ 0 )
1601
+ . client ( 2 )
1602
+ . expectUserCallbacks ( { acknowledged : [ 'collection/c' ] } )
1603
+ . expectWaitForPendingWritesEvent ( /* count= */ 1 ) ;
1604
+ }
1605
+ ) ;
1493
1606
} ) ;
0 commit comments