From f2ec9e11fba82d4a76d989293d270a37ad1373a2 Mon Sep 17 00:00:00 2001 From: Michael Lehenbauer Date: Tue, 17 Apr 2018 15:07:25 -0700 Subject: Serialize array transform mutations. (#1107) * Serialize array transform mutations. * Improve ArrayTransform constructor to avoid extra copying. --- .../Example/Tests/Remote/FSTSerializerBetaTests.mm | 34 +++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) (limited to 'Firestore/Example/Tests/Remote/FSTSerializerBetaTests.mm') diff --git a/Firestore/Example/Tests/Remote/FSTSerializerBetaTests.mm b/Firestore/Example/Tests/Remote/FSTSerializerBetaTests.mm index a648cd8..8ddddb0 100644 --- a/Firestore/Example/Tests/Remote/FSTSerializerBetaTests.mm +++ b/Firestore/Example/Tests/Remote/FSTSerializerBetaTests.mm @@ -367,7 +367,7 @@ NS_ASSUME_NONNULL_BEGIN [self assertRoundTripForMutation:mutation proto:proto]; } -- (void)testEncodesTransformMutation { +- (void)testEncodesServerTimestampTransformMutation { FSTTransformMutation *mutation = FSTTestTransformMutation(@"docs/1", @{ @"a" : [FIRFieldValue fieldValueForServerTimestamp], @"bar.baz" : [FIRFieldValue fieldValueForServerTimestamp] @@ -382,6 +382,38 @@ NS_ASSUME_NONNULL_BEGIN [self assertRoundTripForMutation:mutation proto:proto]; } +- (void)testEncodesArrayTransformMutations { + FSTTransformMutation *mutation = FSTTestTransformMutation(@"docs/1", @{ + @"a" : [FIRFieldValue fieldValueForArrayUnion:@[ @"a", @2 ]], + @"bar.baz" : [FIRFieldValue fieldValueForArrayRemove:@[ + @{ @"x" : @1 } + ]] + }); + GCFSWrite *proto = [GCFSWrite message]; + proto.transform = [GCFSDocumentTransform message]; + proto.transform.document = [self.serializer encodedDocumentKey:mutation.key]; + + GCFSDocumentTransform_FieldTransform *arrayUnion = [GCFSDocumentTransform_FieldTransform message]; + arrayUnion.fieldPath = @"a"; + arrayUnion.appendMissingElements = [GCFSArrayValue message]; + NSMutableArray *unionElements = arrayUnion.appendMissingElements.valuesArray; + [unionElements addObject:[self.serializer encodedFieldValue:FSTTestFieldValue(@"a")]]; + [unionElements addObject:[self.serializer encodedFieldValue:FSTTestFieldValue(@2)]]; + [proto.transform.fieldTransformsArray addObject:arrayUnion]; + + GCFSDocumentTransform_FieldTransform *arrayRemove = + [GCFSDocumentTransform_FieldTransform message]; + arrayRemove.fieldPath = @"bar.baz"; + arrayRemove.removeAllFromArray_p = [GCFSArrayValue message]; + NSMutableArray *removeElements = arrayRemove.removeAllFromArray_p.valuesArray; + [removeElements addObject:[self.serializer encodedFieldValue:FSTTestFieldValue(@{ @"x" : @1 })]]; + [proto.transform.fieldTransformsArray addObject:arrayRemove]; + + proto.currentDocument.exists = YES; + + [self assertRoundTripForMutation:mutation proto:proto]; +} + - (void)testEncodesSetMutationWithPrecondition { FSTSetMutation *mutation = [[FSTSetMutation alloc] initWithKey:FSTTestDocKey(@"foo/bar") -- cgit v1.2.3