diff options
author | Michael Lehenbauer <mikelehen@gmail.com> | 2018-04-17 15:07:25 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-04-17 15:07:25 -0700 |
commit | f2ec9e11fba82d4a76d989293d270a37ad1373a2 (patch) | |
tree | 48df0f0900c8e379557d9e43e385c4fde9f2b90b /Firestore/Example | |
parent | 9329e6e09bed6925b3292aa05fea28e2bcd4d9ef (diff) |
Serialize array transform mutations. (#1107)
* Serialize array transform mutations.
* Improve ArrayTransform constructor to avoid extra copying.
Diffstat (limited to 'Firestore/Example')
-rw-r--r-- | Firestore/Example/Tests/Remote/FSTSerializerBetaTests.mm | 34 |
1 files changed, 33 insertions, 1 deletions
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") |