@@ -674,5 +674,118 @@ void main() {
674
674
{'description' : 'server updated' }
675
675
]));
676
676
});
677
+
678
+ test ('should revert a failing update' , () async {
679
+ await bucketStorage.saveSyncData (SyncDataBatch ([
680
+ SyncBucketData (
681
+ bucket: 'bucket1' ,
682
+ data: [putAsset1_1, putAsset2_2, putAsset1_3],
683
+ ),
684
+ ]));
685
+
686
+ await syncLocalChecked (Checkpoint (
687
+ lastOpId: '3' ,
688
+ writeCheckpoint: '3' ,
689
+ checksums: [BucketChecksum (bucket: 'bucket1' , checksum: 6 )]));
690
+
691
+ // Local save
692
+ db.execute ('INSERT INTO assets(id, description) VALUES(?, ?)' ,
693
+ ['O3' , 'inserted' ]);
694
+ final batch = bucketStorage.getCrudBatch ();
695
+ await batch! .complete ();
696
+ await bucketStorage.updateLocalTarget (() async {
697
+ return '4' ;
698
+ });
699
+
700
+ expect (
701
+ db.select ('SELECT description FROM assets WHERE id = \' O3\' ' ),
702
+ equals ([
703
+ {'description' : 'inserted' }
704
+ ]));
705
+
706
+ await syncLocalChecked (Checkpoint (
707
+ lastOpId: '3' ,
708
+ writeCheckpoint: '4' ,
709
+ checksums: [BucketChecksum (bucket: 'bucket1' , checksum: 6 )]));
710
+
711
+ expect (db.select ('SELECT description FROM assets WHERE id = \' O3\' ' ),
712
+ equals ([]));
713
+ });
714
+
715
+ test ('should revert a failing delete' , () async {
716
+ await bucketStorage.saveSyncData (SyncDataBatch ([
717
+ SyncBucketData (
718
+ bucket: 'bucket1' ,
719
+ data: [putAsset1_1, putAsset2_2, putAsset1_3],
720
+ ),
721
+ ]));
722
+
723
+ await syncLocalChecked (Checkpoint (
724
+ lastOpId: '3' ,
725
+ writeCheckpoint: '3' ,
726
+ checksums: [BucketChecksum (bucket: 'bucket1' , checksum: 6 )]));
727
+
728
+ // Local save
729
+ db.execute ('DELETE FROM assets WHERE id = ?' , ['O2' ]);
730
+
731
+ expect (db.select ('SELECT description FROM assets WHERE id = \' O2\' ' ),
732
+ equals ([]));
733
+ // Simulate a permissions error when uploading - data should be preserved.
734
+ final batch = bucketStorage.getCrudBatch ();
735
+ await batch! .complete ();
736
+
737
+ await bucketStorage.updateLocalTarget (() async {
738
+ return '4' ;
739
+ });
740
+
741
+ await syncLocalChecked (Checkpoint (
742
+ lastOpId: '3' ,
743
+ writeCheckpoint: '4' ,
744
+ checksums: [BucketChecksum (bucket: 'bucket1' , checksum: 6 )]));
745
+
746
+ expect (
747
+ db.select ('SELECT description FROM assets WHERE id = \' O2\' ' ),
748
+ equals ([
749
+ {'description' : 'bar' }
750
+ ]));
751
+ });
752
+
753
+ test ('should revert a failing insert' , () async {
754
+ await bucketStorage.saveSyncData (SyncDataBatch ([
755
+ SyncBucketData (
756
+ bucket: 'bucket1' ,
757
+ data: [putAsset1_1, putAsset2_2, putAsset1_3],
758
+ ),
759
+ ]));
760
+
761
+ await syncLocalChecked (Checkpoint (
762
+ lastOpId: '3' ,
763
+ writeCheckpoint: '3' ,
764
+ checksums: [BucketChecksum (bucket: 'bucket1' , checksum: 6 )]));
765
+
766
+ // Local save
767
+ db.execute ('DELETE FROM assets WHERE id = ?' , ['O2' ]);
768
+
769
+ expect (db.select ('SELECT description FROM assets WHERE id = \' O2\' ' ),
770
+ equals ([]));
771
+ // Simulate a permissions error when uploading - data should be preserved.
772
+ final batch = bucketStorage.getCrudBatch ();
773
+ await batch! .complete ();
774
+
775
+ await bucketStorage.updateLocalTarget (() async {
776
+ return '4' ;
777
+ });
778
+
779
+ await syncLocalChecked (Checkpoint (
780
+ lastOpId: '3' ,
781
+ writeCheckpoint: '4' ,
782
+ checksums: [BucketChecksum (bucket: 'bucket1' , checksum: 6 )]));
783
+
784
+ expect (
785
+ db.select ('SELECT description FROM assets WHERE id = \' O2\' ' ),
786
+ equals ([
787
+ {'description' : 'bar' }
788
+ ]));
789
+ });
677
790
});
678
791
}
0 commit comments