From b36714acefb6fa029927886a6f5b2fdf96b97691 Mon Sep 17 00:00:00 2001 From: Florent Vilmart Date: Sun, 29 May 2016 13:28:43 -0400 Subject: [PATCH] Let the iOS SDK handle Delete ops when sent from the server --- Parse/Internal/Object/State/PFObjectState.m | 7 ++++++- Tests/Unit/DecoderTests.m | 11 +++++++++++ Tests/Unit/ObjectStateTests.m | 11 +++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/Parse/Internal/Object/State/PFObjectState.m b/Parse/Internal/Object/State/PFObjectState.m index c4729cb95..19cc9cf2a 100644 --- a/Parse/Internal/Object/State/PFObjectState.m +++ b/Parse/Internal/Object/State/PFObjectState.m @@ -15,6 +15,7 @@ #import "PFMutableObjectState.h" #import "PFObjectConstants.h" #import "PFObjectUtilities.h" +#import "PFFieldOperation.h" @implementation PFObjectState @@ -129,7 +130,11 @@ - (NSDictionary *)dictionaryRepresentationWithObjectEncoder:(PFEncoder *)objectE #pragma mark Accessors - (void)setServerDataObject:(id)object forKey:(NSString *)key { - _serverData[key] = object; + if (!object || [object isKindOfClass:[PFDeleteOperation class]]) { + [self removeServerDataObjectForKey:key]; + } else { + _serverData[key] = object; + } } - (void)removeServerDataObjectForKey:(NSString *)key { diff --git a/Tests/Unit/DecoderTests.m b/Tests/Unit/DecoderTests.m index b8f0cfec4..d0bdbcd9b 100644 --- a/Tests/Unit/DecoderTests.m +++ b/Tests/Unit/DecoderTests.m @@ -45,6 +45,17 @@ - (void)testDecodingFieldOperations { XCTAssertEqualObjects(operation.amount, @100500); } +- (void)testDecodingDeleteOperation { + PFDecoder *decoder = [[PFDecoder alloc] init]; + + NSDictionary *decoded = [decoder decodeObject:@{ @"key" : @{@"__op" : @"Delete"} }]; + XCTAssertNotNil(decoded); + + id operation = decoded[@"key"]; + XCTAssertNotNil(operation); + PFAssertIsKindOfClass(operation, [PFDeleteOperation class]); +} + - (void)testDecodingDates { PFDecoder *decoder = [[PFDecoder alloc] init]; diff --git a/Tests/Unit/ObjectStateTests.m b/Tests/Unit/ObjectStateTests.m index 0b869ee64..baec00811 100644 --- a/Tests/Unit/ObjectStateTests.m +++ b/Tests/Unit/ObjectStateTests.m @@ -166,6 +166,17 @@ - (void)testServerData { XCTAssertEqualObjects(mutableState.serverData, @{ @"foo": @"bar" }); } +- (void)testDeleteFromServerData { + PFMutableObjectState *mutableState = [[PFMutableObjectState alloc] init]; + XCTAssertEqualObjects(mutableState.serverData, @{}); + + [mutableState setServerDataObject:@"foo" forKey:@"bar"]; + XCTAssertEqualObjects(mutableState.serverData, @{ @"bar": @"foo" }); + + [mutableState setServerDataObject:[PFDeleteOperation new] forKey:@"bar"]; + XCTAssertEqualObjects(mutableState.serverData, @{}); +} + - (void)testEncode { PFMutableObjectState *mutableState = [[PFMutableObjectState alloc] init]; mutableState.objectId = @"objectId";