Fix issue where targetObject was not set appropriately when mapping a non-managed object via RKManagedObjectResponseMapperOperation. fixes #1268

This commit is contained in:
Blake Watters
2013-03-10 13:12:17 -04:00
parent 59ced3b32a
commit dd74867c79
2 changed files with 22 additions and 0 deletions

View File

@@ -422,6 +422,7 @@ static NSURL *RKRelativeURLFromURLAndResponseDescriptors(NSURL *URL, NSArray *re
responseDescriptors:self.responseDescriptors];
self.responseMapperOperation.mapperDelegate = self;
self.responseMapperOperation.mappingMetadata = self.mappingMetadata;
self.responseMapperOperation.targetObject = self.targetObject;
self.responseMapperOperation.targetObjectID = self.targetObjectID;
self.responseMapperOperation.managedObjectContext = self.privateContext;
self.responseMapperOperation.managedObjectCache = self.managedObjectCache;

View File

@@ -469,6 +469,27 @@ NSSet *RKSetByRemovingSubkeypathsFromSet(NSSet *setOfKeyPaths);
expect([[testUser.friendsOrderedSet firstObject] managedObjectContext]).to.equal(managedObjectStore.persistentStoreManagedObjectContext);
}
- (void)testMappingRespectsTargetObjectWhenMappingNonManagedThatIncludesChildManagedObject
{
RKTestUser *testUser = [RKTestUser new];
RKManagedObjectStore *managedObjectStore = [RKTestFactory managedObjectStore];
RKObjectMapping *userMapping = [RKObjectMapping mappingForClass:[RKTestUser class]];
RKEntityMapping *entityMapping = [RKEntityMapping mappingForEntityForName:@"Human" inManagedObjectStore:managedObjectStore];
[entityMapping addAttributeMappingsFromArray:@[ @"name" ]];
[userMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"favorite_cat" toKeyPath:@"friendsOrderedSet" withMapping:entityMapping]];
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:userMapping pathPattern:nil keyPath:@"human" statusCodes:[NSIndexSet indexSetWithIndex:200]];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/JSON/humans/with_to_one_relationship.json" relativeToURL:[RKTestFactory baseURL]]];
RKManagedObjectRequestOperation *managedObjectRequestOperation = [[RKManagedObjectRequestOperation alloc] initWithRequest:request responseDescriptors:@[ responseDescriptor ]];
managedObjectRequestOperation.targetObject = testUser;
managedObjectRequestOperation.managedObjectContext = managedObjectStore.persistentStoreManagedObjectContext;
[managedObjectRequestOperation start];
expect(managedObjectRequestOperation.error).to.beNil();
expect([managedObjectRequestOperation.mappingResult array]).to.haveCountOf(1);
RKTestUser *mappedTestUser = [managedObjectRequestOperation.mappingResult firstObject];
expect(mappedTestUser).to.equal(testUser);
}
- (void)testDeletionOfOrphanedManagedObjects
{
RKManagedObjectStore *managedObjectStore = [RKTestFactory managedObjectStore];