@@ -73,7 +73,7 @@ void VerifyOverlayRoundTrips(const MutableDocument& doc,
73
73
MutableDocument doc_for_mutations = doc.Clone ();
74
74
MutableDocument doc_for_overlay = doc.Clone ();
75
75
76
- absl::optional<FieldMask> mask;
76
+ absl::optional<FieldMask> mask = FieldMask () ;
77
77
for (const Mutation& mutation : mutations) {
78
78
mask = mutation.ApplyToLocalView (doc_for_mutations, mask, now);
79
79
}
@@ -712,6 +712,43 @@ TEST(MutationTest, OverlayWithFieldDeletionOfNestedField) {
712
712
VerifyOverlayRoundTrips (doc, {patch1, patch2, patch3});
713
713
}
714
714
715
+ // See: https://github.com/firebase/firebase-ios-sdk/issues/9985
716
+ TEST (MutationTest, OverlayWithFieldDeletionOfNestedFieldAndParentField) {
717
+ MutableDocument doc = Doc (" collection/key" , 1 , Map (" foo" , 1 ));
718
+ Mutation patch1 =
719
+ PatchMutation (" collection/key" , Map (" foo" , " foo-patched-value" ),
720
+ {{" bar.baz" , Increment (1 )}});
721
+ Mutation patch2 =
722
+ PatchMutation (" collection/key" , Map (" foo" , " foo-patched-value" ),
723
+ {{" bar.baz" , ServerTimestamp ()}, {" a.b.c" , Increment (1 )}});
724
+ Mutation patch3 =
725
+ PatchMutation (" collection/key" , Map (" foo" , " foo-patched-value" ),
726
+ {Field (" bar.baz" ), Field (" a.b.c" )}, {});
727
+
728
+ Mutation patch4 =
729
+ PatchMutation (" collection/key" , Map (" foo" , " foo-patched-value" ),
730
+ {Field (" bar" ), Field (" a.b" )}, {});
731
+
732
+ VerifyOverlayRoundTrips (doc, {patch1, patch2, patch3, patch4});
733
+ }
734
+
735
+ // See: https://github.com/firebase/firebase-ios-sdk/issues/10018
736
+ // Same root cause as OverlayWithFieldDeletionOfNestedFieldAndParentField,
737
+ // different way to trigger.
738
+ TEST (MutationTest, OverlayWorksWithDeletingSameField) {
739
+ MutableDocument doc = Doc (" collection/key" , 1 , Map (" foo" , 1 ));
740
+ Mutation patch1 =
741
+ PatchMutation (" collection/key" , Map (" foo" , " foo-patched-value" ),
742
+ {{" bar" , ServerTimestamp ()}});
743
+ Mutation patch2 = PatchMutation (
744
+ " collection/key" , Map (" foo" , " foo-patched-value" ), {Field (" bar" )}, {});
745
+
746
+ Mutation patch3 = PatchMutation (
747
+ " collection/key" , Map (" foo" , " foo-patched-value" ), {Field (" bar" )}, {});
748
+
749
+ VerifyOverlayRoundTrips (doc, {patch1, patch2, patch3});
750
+ }
751
+
715
752
TEST (MutationTest, OverlayCreatedFromSetToEmptyWithMerge) {
716
753
MutableDocument doc = DeletedDoc (" collection/key" , 1 );
717
754
Mutation merge = MergeMutation (" collection/key" , Map (), {});
0 commit comments