@@ -291,10 +291,105 @@ - (void)testThatManagedObjectMappedAsTheRelationshipOfNonManagedObjectsAreRefetc
291
291
expect ([[testUser.friends lastObject ] managedObjectContext ]).to .equal (managedObjectStore.persistentStoreManagedObjectContext );
292
292
}
293
293
294
- // TODO: Test with dynamic mapping
295
- // TODO: Test with nil root key path
296
- // TODO: Test with NSSet
297
- // TODO: Test with NSOrderedSet
298
- // TODO: Test with NSSet
294
+ - (void )testThatManagedObjectMappedAsTheRelationshipOfNonManagedObjectsWithADynamicMappingAreRefetchedFromTheParentContext
295
+ {
296
+ RKManagedObjectStore *managedObjectStore = [RKTestFactory managedObjectStore ];
297
+ RKObjectMapping *userMapping = [RKObjectMapping mappingForClass: [RKTestUser class ]];
298
+ RKEntityMapping *entityMapping = [RKEntityMapping mappingForEntityForName: @" Human" inManagedObjectStore: managedObjectStore];
299
+ [entityMapping addAttributeMappingsFromArray: @[ @" name" ]];
300
+ [userMapping addPropertyMapping: [RKRelationshipMapping relationshipMappingFromKeyPath: @" favorite_cat" toKeyPath: @" friends" withMapping: entityMapping]];
301
+ RKDynamicMapping *dynamicMapping = [RKDynamicMapping new ];
302
+ [dynamicMapping setObjectMapping: userMapping whenValueOfKeyPath: @" name" isEqualTo: @" Blake Watters" ];
303
+ RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping: dynamicMapping pathPattern: nil keyPath: @" human" statusCodes: [NSIndexSet indexSetWithIndex: 200 ]];
304
+
305
+ NSURLRequest *request = [NSURLRequest requestWithURL: [NSURL URLWithString: @" /JSON/humans/with_to_one_relationship.json" relativeToURL: [RKTestFactory baseURL ]]];
306
+ RKManagedObjectRequestOperation *managedObjectRequestOperation = [[RKManagedObjectRequestOperation alloc ] initWithRequest: request responseDescriptors: @[ responseDescriptor ]];
307
+ managedObjectRequestOperation.managedObjectContext = managedObjectStore.persistentStoreManagedObjectContext ;
308
+ [managedObjectRequestOperation start ];
309
+ expect (managedObjectRequestOperation.error ).to .beNil ();
310
+ expect ([managedObjectRequestOperation.mappingResult array ]).to .haveCountOf (1 );
311
+ RKTestUser *testUser = [managedObjectRequestOperation.mappingResult firstObject ];
312
+ expect ([[testUser.friends lastObject ] managedObjectContext ]).to .equal (managedObjectStore.persistentStoreManagedObjectContext );
313
+ }
314
+
315
+ - (void )testThatManagedObjectMappedFromRootKeyPathAreRefetchedFromTheParentContext
316
+ {
317
+ RKManagedObjectStore *managedObjectStore = [RKTestFactory managedObjectStore ];
318
+ RKEntityMapping *entityMapping = [RKEntityMapping mappingForEntityForName: @" Human" inManagedObjectStore: managedObjectStore];
319
+ [entityMapping addAttributeMappingsFromDictionary: @{ @" human.name" : @" name" }];
320
+ RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping: entityMapping pathPattern: nil keyPath: nil statusCodes: [NSIndexSet indexSetWithIndex: 200 ]];
321
+
322
+ NSURLRequest *request = [NSURLRequest requestWithURL: [NSURL URLWithString: @" /JSON/humans/with_to_one_relationship.json" relativeToURL: [RKTestFactory baseURL ]]];
323
+ RKManagedObjectRequestOperation *managedObjectRequestOperation = [[RKManagedObjectRequestOperation alloc ] initWithRequest: request responseDescriptors: @[ responseDescriptor ]];
324
+ managedObjectRequestOperation.managedObjectContext = managedObjectStore.persistentStoreManagedObjectContext ;
325
+ [managedObjectRequestOperation start ];
326
+ expect (managedObjectRequestOperation.error ).to .beNil ();
327
+ expect ([managedObjectRequestOperation.mappingResult array ]).to .haveCountOf (1 );
328
+ NSManagedObject *managedObject = [managedObjectRequestOperation.mappingResult firstObject ];
329
+ expect ([managedObject managedObjectContext ]).to .equal (managedObjectStore.persistentStoreManagedObjectContext );
330
+ }
331
+
332
+ - (void )testThatManagedObjectMappedToNSSetRelationshipOfNonManagedObjectsAreRefetchedFromTheParentContext
333
+ {
334
+ RKManagedObjectStore *managedObjectStore = [RKTestFactory managedObjectStore ];
335
+ RKObjectMapping *userMapping = [RKObjectMapping mappingForClass: [RKTestUser class ]];
336
+ RKEntityMapping *entityMapping = [RKEntityMapping mappingForEntityForName: @" Human" inManagedObjectStore: managedObjectStore];
337
+ [entityMapping addAttributeMappingsFromArray: @[ @" name" ]];
338
+ [userMapping addPropertyMapping: [RKRelationshipMapping relationshipMappingFromKeyPath: @" favorite_cat" toKeyPath: @" friendsSet" withMapping: entityMapping]];
339
+ RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping: userMapping pathPattern: nil keyPath: @" human" statusCodes: [NSIndexSet indexSetWithIndex: 200 ]];
340
+
341
+ NSURLRequest *request = [NSURLRequest requestWithURL: [NSURL URLWithString: @" /JSON/humans/with_to_one_relationship.json" relativeToURL: [RKTestFactory baseURL ]]];
342
+ RKManagedObjectRequestOperation *managedObjectRequestOperation = [[RKManagedObjectRequestOperation alloc ] initWithRequest: request responseDescriptors: @[ responseDescriptor ]];
343
+ managedObjectRequestOperation.managedObjectContext = managedObjectStore.persistentStoreManagedObjectContext ;
344
+ [managedObjectRequestOperation start ];
345
+ expect (managedObjectRequestOperation.error ).to .beNil ();
346
+ expect ([managedObjectRequestOperation.mappingResult array ]).to .haveCountOf (1 );
347
+ RKTestUser *testUser = [managedObjectRequestOperation.mappingResult firstObject ];
348
+ expect ([[testUser.friendsSet anyObject ] managedObjectContext ]).to .equal (managedObjectStore.persistentStoreManagedObjectContext );
349
+ }
350
+
351
+ - (void )testThatManagedObjectMappedToNSOrderedSetRelationshipOfNonManagedObjectsAreRefetchedFromTheParentContext
352
+ {
353
+ RKManagedObjectStore *managedObjectStore = [RKTestFactory managedObjectStore ];
354
+ RKObjectMapping *userMapping = [RKObjectMapping mappingForClass: [RKTestUser class ]];
355
+ RKEntityMapping *entityMapping = [RKEntityMapping mappingForEntityForName: @" Human" inManagedObjectStore: managedObjectStore];
356
+ [entityMapping addAttributeMappingsFromArray: @[ @" name" ]];
357
+ [userMapping addPropertyMapping: [RKRelationshipMapping relationshipMappingFromKeyPath: @" favorite_cat" toKeyPath: @" friendsOrderedSet" withMapping: entityMapping]];
358
+ RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping: userMapping pathPattern: nil keyPath: @" human" statusCodes: [NSIndexSet indexSetWithIndex: 200 ]];
359
+
360
+ NSURLRequest *request = [NSURLRequest requestWithURL: [NSURL URLWithString: @" /JSON/humans/with_to_one_relationship.json" relativeToURL: [RKTestFactory baseURL ]]];
361
+ RKManagedObjectRequestOperation *managedObjectRequestOperation = [[RKManagedObjectRequestOperation alloc ] initWithRequest: request responseDescriptors: @[ responseDescriptor ]];
362
+ managedObjectRequestOperation.managedObjectContext = managedObjectStore.persistentStoreManagedObjectContext ;
363
+ [managedObjectRequestOperation start ];
364
+ expect (managedObjectRequestOperation.error ).to .beNil ();
365
+ expect ([managedObjectRequestOperation.mappingResult array ]).to .haveCountOf (1 );
366
+ RKTestUser *testUser = [managedObjectRequestOperation.mappingResult firstObject ];
367
+ expect ([[testUser.friendsOrderedSet firstObject ] managedObjectContext ]).to .equal (managedObjectStore.persistentStoreManagedObjectContext );
368
+ }
369
+
370
+ - (void )testDeletionOfOrphanedObjectsMappedOnRelationships
371
+ {
372
+ RKManagedObjectStore *managedObjectStore = [RKTestFactory managedObjectStore ];
373
+ RKHuman *orphanedHuman = [NSEntityDescription insertNewObjectForEntityForName: @" Human" inManagedObjectContext: managedObjectStore.persistentStoreManagedObjectContext];
374
+ RKObjectMapping *userMapping = [RKObjectMapping mappingForClass: [RKTestUser class ]];
375
+ RKEntityMapping *entityMapping = [RKEntityMapping mappingForEntityForName: @" Human" inManagedObjectStore: managedObjectStore];
376
+ [entityMapping addAttributeMappingsFromArray: @[ @" name" ]];
377
+ [userMapping addPropertyMapping: [RKRelationshipMapping relationshipMappingFromKeyPath: @" favorite_cat" toKeyPath: @" friends" withMapping: entityMapping]];
378
+ RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping: userMapping pathPattern: nil keyPath: @" human" statusCodes: [NSIndexSet indexSetWithIndex: 200 ]];
379
+
380
+ NSURLRequest *request = [NSURLRequest requestWithURL: [NSURL URLWithString: @" /JSON/humans/with_to_one_relationship.json" relativeToURL: [RKTestFactory baseURL ]]];
381
+ RKManagedObjectRequestOperation *managedObjectRequestOperation = [[RKManagedObjectRequestOperation alloc ] initWithRequest: request responseDescriptors: @[ responseDescriptor ]];
382
+ RKFetchRequestBlock fetchRequestBlock = ^NSFetchRequest * (NSURL *URL) {
383
+ return [NSFetchRequest fetchRequestWithEntityName: @" Human" ];
384
+ };
385
+ managedObjectRequestOperation.fetchRequestBlocks = @[ fetchRequestBlock ];
386
+ managedObjectRequestOperation.managedObjectContext = managedObjectStore.persistentStoreManagedObjectContext ;
387
+ [managedObjectRequestOperation start ];
388
+ expect (managedObjectRequestOperation.error ).to .beNil ();
389
+ expect ([managedObjectRequestOperation.mappingResult array ]).to .haveCountOf (1 );
390
+ expect (orphanedHuman.managedObjectContext ).to .beNil ();
391
+ }
392
+
393
+ // TODO: test deletion of nested objects
299
394
300
395
@end
0 commit comments