mirror of
https://github.com/zhigang1992/RestKit.git
synced 2026-04-29 13:15:34 +08:00
Moving tests around
This commit is contained in:
21
Tests/Logic/CoreData/RKManagedObjectRequestOperationTest.m
Normal file
21
Tests/Logic/CoreData/RKManagedObjectRequestOperationTest.m
Normal file
@@ -0,0 +1,21 @@
|
||||
//
|
||||
// RKManagedObjectRequestOperationTest.m
|
||||
// RestKit
|
||||
//
|
||||
// Created by Blake Watters on 10/10/12.
|
||||
// Copyright (c) 2012 RestKit. All rights reserved.
|
||||
//
|
||||
|
||||
#import "RKTestEnvironment.h"
|
||||
|
||||
@interface RKManagedObjectRequestOperationTest : RKTestCase
|
||||
@end
|
||||
|
||||
@implementation RKManagedObjectRequestOperationTest
|
||||
|
||||
- (void)testThatTargetObjectIsRefreshedWhenStoreIsSavedSuccessfully
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@end
|
||||
814
Tests/Logic/Network/RKObjectRequestOperationTest.m
Normal file
814
Tests/Logic/Network/RKObjectRequestOperationTest.m
Normal file
@@ -0,0 +1,814 @@
|
||||
//
|
||||
// RKObjectRequestOperationTest.m
|
||||
// RestKit
|
||||
//
|
||||
// Created by Blake Watters on 10/14/12.
|
||||
// Copyright (c) 2012 RestKit. All rights reserved.
|
||||
//
|
||||
|
||||
#import "RKTestEnvironment.h"
|
||||
|
||||
@interface RKObjectRequestOperationTest : RKTestCase
|
||||
@end
|
||||
|
||||
@implementation RKObjectRequestOperationTest
|
||||
|
||||
- (void)testThatObjectRequestOperationResultsInRefreshedPropertiesAfterMapping
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
- (void)testCancellationOfObjectRequestOperationCancelsMapping
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
//#import "RKObjectMappingProvider.h"
|
||||
//#import "RKErrorMessage.h"
|
||||
//#import "RKJSONParserJSONKit.h"
|
||||
//
|
||||
//// Models
|
||||
//#import "RKObjectLoaderTestResultModel.h"
|
||||
//
|
||||
//@interface RKTestComplexUser : NSObject {
|
||||
// NSNumber *_userID;
|
||||
// NSString *_firstname;
|
||||
// NSString *_lastname;
|
||||
// NSString *_email;
|
||||
// NSString *_phone;
|
||||
//}
|
||||
//
|
||||
//@property (nonatomic, retain) NSNumber *userID;
|
||||
//@property (nonatomic, retain) NSString *firstname;
|
||||
//@property (nonatomic, retain) NSString *lastname;
|
||||
//@property (nonatomic, retain) NSString *email;
|
||||
//@property (nonatomic, retain) NSString *phone;
|
||||
//
|
||||
//@end
|
||||
//
|
||||
//@implementation RKTestComplexUser
|
||||
//
|
||||
//@synthesize userID = _userID;
|
||||
//@synthesize firstname = _firstname;
|
||||
//@synthesize lastname = _lastname;
|
||||
//@synthesize phone = _phone;
|
||||
//@synthesize email = _email;
|
||||
//
|
||||
//- (void)willSendWithObjectLoader:(RKObjectLoader *)objectLoader
|
||||
//{
|
||||
// return;
|
||||
//}
|
||||
//
|
||||
//@end
|
||||
//
|
||||
//@interface RKTestResponseLoaderWithWillMapData : RKTestResponseLoader {
|
||||
// id _mappableData;
|
||||
//}
|
||||
//
|
||||
//@property (nonatomic, readonly) id mappableData;
|
||||
//
|
||||
//@end
|
||||
//
|
||||
//@implementation RKTestResponseLoaderWithWillMapData
|
||||
//
|
||||
//@synthesize mappableData = _mappableData;
|
||||
//
|
||||
//- (void)dealloc
|
||||
//{
|
||||
// [_mappableData release];
|
||||
// [super dealloc];
|
||||
//}
|
||||
//
|
||||
//- (void)objectLoader:(RKObjectLoader *)loader willMapData:(inout id *)mappableData
|
||||
//{
|
||||
// [*mappableData setValue:@"monkey!" forKey:@"newKey"];
|
||||
// _mappableData = [*mappableData retain];
|
||||
//}
|
||||
//
|
||||
//@end
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
//@interface RKObjectLoaderTest : RKTestCase {
|
||||
//
|
||||
//}
|
||||
//
|
||||
//@end
|
||||
//
|
||||
//@implementation RKObjectLoaderTest
|
||||
//
|
||||
//- (void)setUp
|
||||
//{
|
||||
// [RKTestFactory setUp];
|
||||
//}
|
||||
//
|
||||
//- (void)tearDown
|
||||
//{
|
||||
// [RKTestFactory tearDown];
|
||||
//}
|
||||
//
|
||||
//- (RKObjectMappingProvider *)providerForComplexUser
|
||||
//{
|
||||
// NSMutableDictionary *mappingDictionary = [NSMutableDictionary dictionary];
|
||||
// RKObjectMapping *userMapping = [RKObjectMapping mappingForClass:[RKTestComplexUser class]];
|
||||
// [userMapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:@"firstname" toKeyPath:@"firstname"]];
|
||||
// [mappingsDictionary setObject:userMapping forKey:@"data.STUser"];
|
||||
// return provider;
|
||||
//}
|
||||
//
|
||||
//- (RKObjectMappingProvider *)errorMappingProvider
|
||||
//{
|
||||
// NSMutableDictionary *mappingDictionary = [NSMutableDictionary dictionary];
|
||||
// RKObjectMapping *errorMapping = [RKObjectMapping mappingForClass:[RKErrorMessage class]];
|
||||
// [errorMapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:@"" toKeyPath:@"errorMessage"]];
|
||||
// errorMapping.rootKeyPath = @"errors";
|
||||
// provider.errorMapping = errorMapping;
|
||||
// return provider;
|
||||
//}
|
||||
//
|
||||
//- (void)testShouldHandleTheErrorCaseAppropriately
|
||||
//{
|
||||
// RKObjectManager *objectManager = [RKTestFactory objectManager];
|
||||
// objectManager.mappingProvider = [self errorMappingProvider];
|
||||
//
|
||||
// RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
// RKObjectLoader *objectLoader = [objectManager loaderWithResourcePath:@"/errors.json"];
|
||||
// objectLoader.delegate = responseLoader;
|
||||
// objectLoader.method = RKRequestMethodGET;
|
||||
// [objectLoader sendAsynchronously];
|
||||
// [responseLoader waitForResponse];
|
||||
//
|
||||
// assertThat(responseLoader.error, isNot(nilValue()));
|
||||
// assertThat([responseLoader.error localizedDescription], is(equalTo(@"error1, error2")));
|
||||
//
|
||||
// NSArray *objects = [[responseLoader.error userInfo] objectForKey:RKObjectMapperErrorObjectsKey];
|
||||
// RKErrorMessage *error1 = [objects objectAtIndex:0];
|
||||
// RKErrorMessage *error2 = [objects lastObject];
|
||||
//
|
||||
// assertThat(error1.errorMessage, is(equalTo(@"error1")));
|
||||
// assertThat(error2.errorMessage, is(equalTo(@"error2")));
|
||||
//}
|
||||
//
|
||||
//- (void)testShouldNotCrashWhenLoadingAnErrorResponseWithAnUnmappableMIMEType
|
||||
//{
|
||||
// RKObjectManager *objectManager = [RKTestFactory objectManager];
|
||||
// RKTestResponseLoader *loader = [RKTestResponseLoader responseLoader];
|
||||
// [objectManager loadObjectsAtResourcePath:@"/404" delegate:loader];
|
||||
// [loader waitForResponse];
|
||||
// assertThatBool(loader.loadedUnexpectedResponse, is(equalToBool(YES)));
|
||||
//}
|
||||
//
|
||||
//#pragma mark - Complex JSON
|
||||
//
|
||||
//- (void)testShouldLoadAComplexUserObjectWithTargetObject
|
||||
//{
|
||||
// RKTestComplexUser *user = [[RKTestComplexUser new] autorelease];
|
||||
// RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[RKTestFactory baseURL]];
|
||||
// RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
// RKObjectLoader *objectLoader = [objectManager loaderWithResourcePath:@"/JSON/ComplexNestedUser.json"];
|
||||
// objectLoader.delegate = responseLoader;
|
||||
// NSString *authString = [NSString stringWithFormat:@"TRUEREST username=%@&password=%@&apikey=123456&class=iphone", @"username", @"password"];
|
||||
// [objectLoader.URLRequest addValue:authString forHTTPHeaderField:@"Authorization"];
|
||||
// objectLoader.method = RKRequestMethodGET;
|
||||
// objectLoader.targetObject = user;
|
||||
// objectLoader.mappingProvider = [self providerForComplexUser];
|
||||
//
|
||||
// [objectLoader sendAsynchronously];
|
||||
// [responseLoader waitForResponse];
|
||||
//
|
||||
// assertThat(user.firstname, is(equalTo(@"Diego")));
|
||||
//}
|
||||
//
|
||||
//- (void)testShouldLoadAComplexUserObjectWithoutTargetObject
|
||||
//{
|
||||
// RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[RKTestFactory baseURL]];
|
||||
// RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
// RKObjectLoader *objectLoader = [objectManager loaderWithResourcePath:@"/JSON/ComplexNestedUser.json"];
|
||||
// objectLoader.delegate = responseLoader;
|
||||
// objectLoader.method = RKRequestMethodGET;
|
||||
// objectLoader.mappingProvider = [self providerForComplexUser];
|
||||
//
|
||||
// [objectLoader sendAsynchronously];
|
||||
// [responseLoader waitForResponse];
|
||||
// assertThatUnsignedInteger([responseLoader.objects count], is(equalToInt(1)));
|
||||
// RKTestComplexUser *user = [responseLoader.objects lastObject];
|
||||
//
|
||||
// assertThat(user.firstname, is(equalTo(@"Diego")));
|
||||
//}
|
||||
//
|
||||
//- (void)testShouldLoadAComplexUserObjectUsingRegisteredKeyPath
|
||||
//{
|
||||
// RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[RKTestFactory baseURL]];
|
||||
// RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
// RKObjectLoader *objectLoader = [objectManager loaderWithResourcePath:@"/JSON/ComplexNestedUser.json"];
|
||||
// objectLoader.delegate = responseLoader;
|
||||
// objectLoader.method = RKRequestMethodGET;
|
||||
// objectLoader.mappingProvider = [self providerForComplexUser];
|
||||
// [objectLoader sendAsynchronously];
|
||||
// [responseLoader waitForResponse];
|
||||
// assertThatUnsignedInteger([responseLoader.objects count], is(equalToInt(1)));
|
||||
// RKTestComplexUser *user = [responseLoader.objects lastObject];
|
||||
//
|
||||
// assertThat(user.firstname, is(equalTo(@"Diego")));
|
||||
//}
|
||||
//
|
||||
//#pragma mark - willSendWithObjectLoader:
|
||||
//
|
||||
//- (void)testShouldInvokeWillSendWithObjectLoaderOnSend
|
||||
//{
|
||||
// RKObjectManager *objectManager = [RKTestFactory objectManager];
|
||||
// RKTestComplexUser *user = [[RKTestComplexUser new] autorelease];
|
||||
// id mockObject = [OCMockObject partialMockForObject:user];
|
||||
//
|
||||
// // Explicitly init so we don't get a managed object loader...
|
||||
// RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
// RKObjectLoader *objectLoader = [[RKObjectLoader alloc] initWithURL:[objectManager.baseURL URLByAppendingResourcePath:@"/200"] mappingProvider:[self providerForComplexUser]];
|
||||
// objectLoader.configurationDelegate = objectManager;
|
||||
// objectLoader.sourceObject = mockObject;
|
||||
// objectLoader.delegate = responseLoader;
|
||||
// [[mockObject expect] willSendWithObjectLoader:objectLoader];
|
||||
// [objectLoader send];
|
||||
// [responseLoader waitForResponse];
|
||||
// [mockObject verify];
|
||||
//}
|
||||
//
|
||||
//- (void)testShouldInvokeWillSendWithObjectLoaderOnSendAsynchronously
|
||||
//{
|
||||
// RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[RKTestFactory baseURL]];
|
||||
// [objectManager setMappingProvider:[self providerForComplexUser]];
|
||||
// RKTestComplexUser *user = [[RKTestComplexUser new] autorelease];
|
||||
// id mockObject = [OCMockObject partialMockForObject:user];
|
||||
//
|
||||
// // Explicitly init so we don't get a managed object loader...
|
||||
// RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
// RKObjectLoader *objectLoader = [RKObjectLoader loaderWithURL:[objectManager.baseURL URLByAppendingResourcePath:@"/200"] mappingProvider:objectManager.mappingProvider];
|
||||
// objectLoader.delegate = responseLoader;
|
||||
// objectLoader.sourceObject = mockObject;
|
||||
// [[mockObject expect] willSendWithObjectLoader:objectLoader];
|
||||
// [objectLoader sendAsynchronously];
|
||||
// [responseLoader waitForResponse];
|
||||
// [mockObject verify];
|
||||
//}
|
||||
//
|
||||
//- (void)testShouldInvokeWillSendWithObjectLoaderOnSendSynchronously
|
||||
//{
|
||||
// RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[RKTestFactory baseURL]];
|
||||
// [objectManager setMappingProvider:[self providerForComplexUser]];
|
||||
// RKTestComplexUser *user = [[RKTestComplexUser new] autorelease];
|
||||
// id mockObject = [OCMockObject partialMockForObject:user];
|
||||
//
|
||||
// // Explicitly init so we don't get a managed object loader...
|
||||
// RKObjectLoader *objectLoader = [RKObjectLoader loaderWithURL:[objectManager.baseURL URLByAppendingResourcePath:@"/200"] mappingProvider:objectManager.mappingProvider];
|
||||
// objectLoader.sourceObject = mockObject;
|
||||
// [[mockObject expect] willSendWithObjectLoader:objectLoader];
|
||||
// [objectLoader sendSynchronously];
|
||||
// [mockObject verify];
|
||||
//}
|
||||
//
|
||||
//- (void)testShouldLoadResultsNestedAtAKeyPath
|
||||
//{
|
||||
// RKObjectManager *objectManager = [RKTestFactory objectManager];
|
||||
// RKObjectMapping *objectMapping = [RKObjectMapping mappingForClass:[RKObjectLoaderTestResultModel class]];
|
||||
// [objectMapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:@"id" toKeyPath:@"ID"]];
|
||||
// [objectMapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:@"ends_at" toKeyPath:@"endsAt"]];
|
||||
// [objectMapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:@"photo_url" toKeyPath:@"photoURL"]];
|
||||
// [objectManager.mappingProvider setMapping:objectMapping forKeyPath:@"results"];
|
||||
// RKTestResponseLoader *loader = [RKTestResponseLoader responseLoader];
|
||||
// [objectManager loadObjectsAtResourcePath:@"/JSON/ArrayOfResults.json" delegate:loader];
|
||||
// [loader waitForResponse];
|
||||
// assertThat([loader objects], hasCountOf(2));
|
||||
// assertThat([[[loader objects] objectAtIndex:0] ID], is(equalToInt(226)));
|
||||
// assertThat([[[loader objects] objectAtIndex:0] photoURL], is(equalTo(@"1308262872.jpg")));
|
||||
// assertThat([[[loader objects] objectAtIndex:1] ID], is(equalToInt(235)));
|
||||
// assertThat([[[loader objects] objectAtIndex:1] photoURL], is(equalTo(@"1308634984.jpg")));
|
||||
//}
|
||||
//
|
||||
//- (void)testShouldAllowMutationOfTheParsedDataInWillMapData
|
||||
//{
|
||||
// RKTestResponseLoaderWithWillMapData *loader = (RKTestResponseLoaderWithWillMapData *)[RKTestResponseLoaderWithWillMapData responseLoader];
|
||||
// RKObjectManager *manager = [RKTestFactory objectManager];
|
||||
// [manager loadObjectsAtResourcePath:@"/JSON/humans/1.json" delegate:loader];
|
||||
// [loader waitForResponse];
|
||||
// assertThat([loader.mappableData valueForKey:@"newKey"], is(equalTo(@"monkey!")));
|
||||
//}
|
||||
//
|
||||
//- (void)testShouldAllowYouToPostAnObjectAndHandleAnEmpty204Response
|
||||
//{
|
||||
// RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[RKTestComplexUser class]];
|
||||
// [mapping addAttributeMappingsFromArray:@[@"firstname", @"lastname", @"email"]];
|
||||
// RKObjectMapping *serializationMapping = [mapping inverseMapping];
|
||||
//
|
||||
// RKObjectManager *objectManager = [RKTestFactory objectManager];
|
||||
// [objectManager.router.routeSet addRoute:[RKRoute routeWithClass:[RKTestComplexUser class] pathPattern:@"/204"method:RKRequestMethodAny]];
|
||||
// [objectManager.mappingProvider setSerializationMapping:serializationMapping forClass:[RKTestComplexUser class]];
|
||||
//
|
||||
// RKTestComplexUser *user = [[RKTestComplexUser new] autorelease];
|
||||
// user.firstname = @"Blake";
|
||||
// user.lastname = @"Watters";
|
||||
// user.email = @"blake@restkit.org";
|
||||
//
|
||||
// RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
// RKObjectLoader *loader = [objectManager loaderForObject:user method:RKRequestMethodPOST];
|
||||
// loader.delegate = responseLoader;
|
||||
// loader.objectMapping = mapping;
|
||||
// [loader send];
|
||||
// [responseLoader waitForResponse];
|
||||
// assertThatBool([responseLoader wasSuccessful], is(equalToBool(YES)));
|
||||
// assertThat(user.email, is(equalTo(@"blake@restkit.org")));
|
||||
//}
|
||||
//
|
||||
//- (void)testShouldAllowYouToPOSTAnObjectAndMapBackNonNestedContent
|
||||
//{
|
||||
// RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[RKTestComplexUser class]];
|
||||
// [mapping addAttributeMappingsFromArray:@[@"firstname", @"lastname", @"email"]];
|
||||
// RKObjectMapping *serializationMapping = [mapping inverseMapping];
|
||||
//
|
||||
// RKObjectManager *objectManager = [RKTestFactory objectManager];
|
||||
// [objectManager.router.routeSet addRoute:[RKRoute routeWithClass:[RKTestComplexUser class] pathPattern:@"/notNestedUser" method:RKRequestMethodAny]];
|
||||
// [objectManager.mappingProvider setSerializationMapping:serializationMapping forClass:[RKTestComplexUser class]];
|
||||
//
|
||||
// RKTestComplexUser *user = [[RKTestComplexUser new] autorelease];
|
||||
// user.firstname = @"Blake";
|
||||
// user.lastname = @"Watters";
|
||||
// user.email = @"blake@restkit.org";
|
||||
//
|
||||
// RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
// RKObjectLoader *loader = [objectManager loaderForObject:user method:RKRequestMethodPOST];
|
||||
// loader.delegate = responseLoader;
|
||||
// loader.objectMapping = mapping;
|
||||
// [loader send];
|
||||
// [responseLoader waitForResponse];
|
||||
// assertThatBool([responseLoader wasSuccessful], is(equalToBool(YES)));
|
||||
// assertThat(user.email, is(equalTo(@"changed")));
|
||||
//}
|
||||
//
|
||||
//- (void)testShouldMapContentWithoutAMIMEType
|
||||
//{
|
||||
// // TODO: Not sure that this is even worth it. Unable to get the Sinatra server to produce such a response
|
||||
// return;
|
||||
// RKLogConfigureByName("RestKit/Network", RKLogLevelTrace);
|
||||
// RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[RKTestComplexUser class]];
|
||||
// [mapping addAttributeMappingsFromArray:@[@"firstname", @"lastname", @"email"]];
|
||||
// RKObjectMapping *serializationMapping = [mapping inverseMapping];
|
||||
//
|
||||
// RKObjectManager *objectManager = [RKTestFactory objectManager];
|
||||
// [[RKParserRegistry sharedRegistry] setParserClass:[RKJSONParserJSONKit class] forMIMEType:@"text/html"];
|
||||
// [objectManager.router.routeSet addRoute:[RKRoute routeWithClass:[RKTestComplexUser class] pathPattern:@"/noMIME" method:RKRequestMethodAny]];
|
||||
// [objectManager.mappingProvider setSerializationMapping:serializationMapping forClass:[RKTestComplexUser class]];
|
||||
//
|
||||
// RKTestComplexUser *user = [[RKTestComplexUser new] autorelease];
|
||||
// user.firstname = @"Blake";
|
||||
// user.lastname = @"Watters";
|
||||
// user.email = @"blake@restkit.org";
|
||||
//
|
||||
// RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
// RKObjectLoader *loader = [objectManager loaderForObject:user method:RKRequestMethodPOST];
|
||||
// loader.delegate = responseLoader;
|
||||
// loader.objectMapping = mapping;
|
||||
// [loader send];
|
||||
// [responseLoader waitForResponse];
|
||||
// assertThatBool([responseLoader wasSuccessful], is(equalToBool(YES)));
|
||||
// assertThat(user.email, is(equalTo(@"changed")));
|
||||
//}
|
||||
//
|
||||
//- (void)testShouldAllowYouToPOSTAnObjectOfOneTypeAndGetBackAnother
|
||||
//{
|
||||
// RKObjectMapping *sourceMapping = [RKObjectMapping mappingForClass:[RKTestComplexUser class]];
|
||||
// [sourceMapping addAttributeMappingsFromArray:@[@"firstname", @"lastname", @"email"]];
|
||||
// RKObjectMapping *serializationMapping = [sourceMapping inverseMapping];
|
||||
//
|
||||
// RKObjectMapping *targetMapping = [RKObjectMapping mappingForClass:[RKObjectLoaderTestResultModel class]];
|
||||
// [targetMapping addAttributeMappingsFromArray:@[@"ID"]];
|
||||
//
|
||||
// RKObjectManager *objectManager = [RKTestFactory objectManager];
|
||||
// [objectManager.router.routeSet addRoute:[RKRoute routeWithClass:[RKTestComplexUser class] pathPattern:@"/notNestedUser" method:RKRequestMethodAny]];
|
||||
// [objectManager.mappingProvider setSerializationMapping:serializationMapping forClass:[RKTestComplexUser class]];
|
||||
//
|
||||
// RKTestComplexUser *user = [[RKTestComplexUser new] autorelease];
|
||||
// user.firstname = @"Blake";
|
||||
// user.lastname = @"Watters";
|
||||
// user.email = @"blake@restkit.org";
|
||||
//
|
||||
// RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
// RKObjectLoader *loader = [objectManager loaderForObject:user method:RKRequestMethodPOST];
|
||||
// loader.delegate = responseLoader;
|
||||
// loader.sourceObject = user;
|
||||
// loader.targetObject = nil;
|
||||
// loader.objectMapping = targetMapping;
|
||||
// [loader send];
|
||||
// [responseLoader waitForResponse];
|
||||
// assertThatBool([responseLoader wasSuccessful], is(equalToBool(YES)));
|
||||
//
|
||||
// // Our original object should not have changed
|
||||
// assertThat(user.email, is(equalTo(@"blake@restkit.org")));
|
||||
//
|
||||
// // And we should have a new one
|
||||
// RKObjectLoaderTestResultModel *newObject = [[responseLoader objects] lastObject];
|
||||
// assertThat(newObject, is(instanceOf([RKObjectLoaderTestResultModel class])));
|
||||
// assertThat(newObject.ID, is(equalToInt(31337)));
|
||||
//}
|
||||
//
|
||||
//- (void)testShouldAllowYouToPOSTAnObjectOfOneTypeAndGetBackAnotherViaURLConfiguration
|
||||
//{
|
||||
// RKObjectMapping *sourceMapping = [RKObjectMapping mappingForClass:[RKTestComplexUser class]];
|
||||
// [sourceMapping addAttributeMappingsFromArray:@[@"firstname", @"lastname", @"email"]];
|
||||
// RKObjectMapping *serializationMapping = [sourceMapping inverseMapping];
|
||||
//
|
||||
// RKObjectMapping *targetMapping = [RKObjectMapping mappingForClass:[RKObjectLoaderTestResultModel class]];
|
||||
// [targetMapping addAttributeMappingsFromArray:@[@"ID"]];
|
||||
//
|
||||
// RKObjectManager *objectManager = [RKTestFactory objectManager];
|
||||
// [objectManager.router.routeSet addRoute:[RKRoute routeWithClass:[RKTestComplexUser class] pathPattern:@"/notNestedUser" method:RKRequestMethodAny]];
|
||||
// [objectManager.mappingProvider setSerializationMapping:serializationMapping forClass:[RKTestComplexUser class]];
|
||||
// [objectManager.mappingProvider setObjectMapping:targetMapping forpathPattern:@"/notNestedUser"];
|
||||
//
|
||||
// RKTestComplexUser *user = [[RKTestComplexUser new] autorelease];
|
||||
// user.firstname = @"Blake";
|
||||
// user.lastname = @"Watters";
|
||||
// user.email = @"blake@restkit.org";
|
||||
//
|
||||
// RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
// RKObjectLoader *loader = [objectManager loaderForObject:user method:RKRequestMethodPOST];
|
||||
// loader.delegate = responseLoader;
|
||||
// loader.sourceObject = user;
|
||||
// loader.targetObject = nil;
|
||||
// [loader send];
|
||||
// [responseLoader waitForResponse];
|
||||
// assertThatBool([responseLoader wasSuccessful], is(equalToBool(YES)));
|
||||
//
|
||||
// // Our original object should not have changed
|
||||
// assertThat(user.email, is(equalTo(@"blake@restkit.org")));
|
||||
//
|
||||
// // And we should have a new one
|
||||
// RKObjectLoaderTestResultModel *newObject = [[responseLoader objects] lastObject];
|
||||
// assertThat(newObject, is(instanceOf([RKObjectLoaderTestResultModel class])));
|
||||
// assertThat(newObject.ID, is(equalToInt(31337)));
|
||||
//}
|
||||
//
|
||||
//// TODO: Should live in a different file...
|
||||
//- (void)testShouldAllowYouToPOSTAnObjectAndMapBackNonNestedContentViapostObject
|
||||
//{
|
||||
// RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[RKTestComplexUser class]];
|
||||
// [mapping addAttributeMappingsFromArray:@[@"firstname", @"lastname", @"email"]];
|
||||
// RKObjectMapping *serializationMapping = [mapping inverseMapping];
|
||||
//
|
||||
// RKObjectManager *objectManager = [RKTestFactory objectManager];
|
||||
// [objectManager.router.routeSet addRoute:[RKRoute routeWithClass:[RKTestComplexUser class] pathPattern:@"/notNestedUser" method:RKRequestMethodAny]];
|
||||
// [objectManager.mappingProvider setSerializationMapping:serializationMapping forClass:[RKTestComplexUser class]];
|
||||
//
|
||||
// RKTestComplexUser *user = [[RKTestComplexUser new] autorelease];
|
||||
// user.firstname = @"Blake";
|
||||
// user.lastname = @"Watters";
|
||||
// user.email = @"blake@restkit.org";
|
||||
//
|
||||
// // NOTE: The postObject: should infer the target object from sourceObject and the mapping class
|
||||
// RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
// [objectManager postObject:user usingBlock:^(RKObjectLoader *loader) {
|
||||
// loader.delegate = responseLoader;
|
||||
// loader.objectMapping = mapping;
|
||||
// }];
|
||||
// [responseLoader waitForResponse];
|
||||
// assertThatBool([responseLoader wasSuccessful], is(equalToBool(YES)));
|
||||
// assertThat(user.email, is(equalTo(@"changed")));
|
||||
//}
|
||||
//
|
||||
//- (void)testShouldRespectTheRootKeyPathWhenConstructingATemporaryObjectMappingProvider
|
||||
//{
|
||||
// RKObjectMapping *userMapping = [RKObjectMapping mappingForClass:[RKTestComplexUser class]];
|
||||
// userMapping.rootKeyPath = @"data.STUser";
|
||||
// [userMapping addAttributeMappingsFromArray:@[@"firstname"]];
|
||||
//
|
||||
// RKTestComplexUser *user = [[RKTestComplexUser new] autorelease];
|
||||
// RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[RKTestFactory baseURL]];
|
||||
// RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
//
|
||||
// RKObjectLoader *objectLoader = [objectManager loaderWithResourcePath:@"/JSON/ComplexNestedUser.json"];
|
||||
// objectLoader.delegate = responseLoader;
|
||||
// objectLoader.objectMapping = userMapping;
|
||||
// objectLoader.method = RKRequestMethodGET;
|
||||
// objectLoader.targetObject = user;
|
||||
//
|
||||
// [objectLoader sendAsynchronously];
|
||||
// [responseLoader waitForResponse];
|
||||
//
|
||||
// assertThat(user.firstname, is(equalTo(@"Diego")));
|
||||
//}
|
||||
//
|
||||
//- (void)testShouldDetermineObjectLoaderBasedOnResourcePathPatternWithExactMatch
|
||||
//{
|
||||
// RKObjectMapping *userMapping = [RKObjectMapping mappingForClass:[RKTestComplexUser class]];
|
||||
// userMapping.rootKeyPath = @"data.STUser";
|
||||
// [userMapping addAttributeMappingsFromArray:@[@"firstname"]];
|
||||
//
|
||||
// RKTestComplexUser *user = [[RKTestComplexUser new] autorelease];
|
||||
// RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[RKTestFactory baseURL]];
|
||||
// RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
// RKObjectMappingProvider *mappingProvider = [RKObjectMappingProvider mappingProvider];
|
||||
// [mappingProvider setObjectMapping:userMapping forpathPattern:@"/JSON/ComplexNestedUser.json"];
|
||||
//
|
||||
// RKURL *URL = [objectManager.baseURL URLByAppendingResourcePath:@"/JSON/ComplexNestedUser.json"];
|
||||
// RKObjectLoader *objectLoader = [RKObjectLoader loaderWithURL:URL mappingProvider:mappingProvider];
|
||||
// objectLoader.delegate = responseLoader;
|
||||
// objectLoader.method = RKRequestMethodGET;
|
||||
// objectLoader.targetObject = user;
|
||||
//
|
||||
// [objectLoader sendAsynchronously];
|
||||
// [responseLoader waitForResponse];
|
||||
//
|
||||
// NSLog(@"Response: %@", responseLoader.objects);
|
||||
//
|
||||
// assertThat(user.firstname, is(equalTo(@"Diego")));
|
||||
//}
|
||||
//
|
||||
//- (void)testShouldDetermineObjectLoaderBasedOnResourcePathPatternWithPartialMatch
|
||||
//{
|
||||
// RKObjectMapping *userMapping = [RKObjectMapping mappingForClass:[RKTestComplexUser class]];
|
||||
// userMapping.rootKeyPath = @"data.STUser";
|
||||
// [userMapping addAttributeMappingsFromArray:@[@"firstname"]];
|
||||
//
|
||||
// RKTestComplexUser *user = [[RKTestComplexUser new] autorelease];
|
||||
// RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[RKTestFactory baseURL]];
|
||||
// RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
// RKObjectMappingProvider *mappingProvider = [RKObjectMappingProvider mappingProvider];
|
||||
// [mappingProvider setObjectMapping:userMapping forpathPattern:@"/JSON/:name\\.json"];
|
||||
//
|
||||
// RKURL *URL = [objectManager.baseURL URLByAppendingResourcePath:@"/JSON/ComplexNestedUser.json"];
|
||||
// RKObjectLoader *objectLoader = [RKObjectLoader loaderWithURL:URL mappingProvider:mappingProvider];
|
||||
// objectLoader.delegate = responseLoader;
|
||||
// objectLoader.method = RKRequestMethodGET;
|
||||
// objectLoader.targetObject = user;
|
||||
//
|
||||
// [objectLoader sendAsynchronously];
|
||||
// [responseLoader waitForResponse];
|
||||
//
|
||||
// NSLog(@"Response: %@", responseLoader.objects);
|
||||
//
|
||||
// assertThat(user.firstname, is(equalTo(@"Diego")));
|
||||
//}
|
||||
//
|
||||
//- (void)testShouldReturnSuccessWhenTheStatusCodeIs200AndTheResponseBodyIsEmpty
|
||||
//{
|
||||
// RKObjectManager *objectManager = [RKTestFactory objectManager];
|
||||
//
|
||||
// RKTestComplexUser *user = [[RKTestComplexUser new] autorelease];
|
||||
// user.firstname = @"Blake";
|
||||
// user.lastname = @"Watters";
|
||||
// user.email = @"blake@restkit.org";
|
||||
//
|
||||
// RKObjectMapping *userMapping = [RKObjectMapping mappingForClass:[RKTestComplexUser class]];
|
||||
// userMapping.rootKeyPath = @"data.STUser";
|
||||
// [userMapping addAttributeMappingsFromArray:@[@"firstname"]];
|
||||
// RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
// RKObjectLoader *objectLoader = [objectManager loaderWithResourcePath:@"/humans/1234"];
|
||||
// objectLoader.delegate = responseLoader;
|
||||
// objectLoader.method = RKRequestMethodDELETE;
|
||||
// objectLoader.objectMapping = userMapping;
|
||||
// objectLoader.targetObject = user;
|
||||
// [objectLoader send];
|
||||
// [responseLoader waitForResponse];
|
||||
// assertThatBool(responseLoader.wasSuccessful, is(equalToBool(YES)));
|
||||
//}
|
||||
//
|
||||
//- (void)testShouldInvokeTheDelegateWithTheTargetObjectWhenTheStatusCodeIs200AndTheResponseBodyIsEmpty
|
||||
//{
|
||||
// RKObjectManager *objectManager = [RKTestFactory objectManager];
|
||||
//
|
||||
// RKTestComplexUser *user = [[RKTestComplexUser new] autorelease];
|
||||
// user.firstname = @"Blake";
|
||||
// user.lastname = @"Watters";
|
||||
// user.email = @"blake@restkit.org";
|
||||
//
|
||||
// RKObjectMapping *userMapping = [RKObjectMapping mappingForClass:[RKTestComplexUser class]];
|
||||
// userMapping.rootKeyPath = @"data.STUser";
|
||||
// [userMapping addAttributeMappingsFromArray:@[@"firstname"]];
|
||||
// RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
//
|
||||
// RKObjectLoader *objectLoader = [RKObjectLoader loaderWithURL:[objectManager.baseURL URLByAppendingResourcePath:@"/humans/1234"] mappingProvider:objectManager.mappingProvider];
|
||||
// objectLoader.delegate = responseLoader;
|
||||
// objectLoader.method = RKRequestMethodDELETE;
|
||||
// objectLoader.objectMapping = userMapping;
|
||||
// objectLoader.targetObject = user;
|
||||
// [objectLoader send];
|
||||
// [responseLoader waitForResponse];
|
||||
// assertThat(responseLoader.objects, hasItem(user));
|
||||
//}
|
||||
//
|
||||
//- (void)testShouldConsiderTheLoadOfEmptyObjectsWithoutAnyMappableAttributesAsSuccess
|
||||
//{
|
||||
// RKObjectManager *objectManager = [RKTestFactory objectManager];
|
||||
//
|
||||
// RKObjectMapping *userMapping = [RKObjectMapping mappingForClass:[RKTestComplexUser class]];
|
||||
// [userMapping addAttributeMappingsFromArray:@[@"firstname"]];
|
||||
// [objectManager.mappingProvider setMapping:userMapping forKeyPath:@"firstUser"];
|
||||
// [objectManager.mappingProvider setMapping:userMapping forKeyPath:@"secondUser"];
|
||||
//
|
||||
// RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
// [objectManager loadObjectsAtResourcePath:@"/users/empty" delegate:responseLoader];
|
||||
// [responseLoader waitForResponse];
|
||||
// assertThatBool(responseLoader.wasSuccessful, is(equalToBool(YES)));
|
||||
//}
|
||||
//
|
||||
//- (void)testShouldInvokeTheDelegateOnSuccessIfTheResponseIsAnEmptyArray
|
||||
//{
|
||||
// RKObjectManager *objectManager = [RKTestFactory objectManager];
|
||||
// RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
// responseLoader.timeout = 20;
|
||||
// [objectManager loadObjectsAtResourcePath:@"/empty/array" delegate:responseLoader];
|
||||
// [responseLoader waitForResponse];
|
||||
// assertThat(responseLoader.objects, isNot(nilValue()));
|
||||
// assertThatBool([responseLoader.objects isKindOfClass:[NSArray class]], is(equalToBool(YES)));
|
||||
// assertThat(responseLoader.objects, is(empty()));
|
||||
//}
|
||||
//
|
||||
//- (void)testShouldInvokeTheDelegateOnSuccessIfTheResponseIsAnEmptyDictionary
|
||||
//{
|
||||
// RKObjectManager *objectManager = [RKTestFactory objectManager];
|
||||
// RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
// responseLoader.timeout = 20;
|
||||
// [objectManager loadObjectsAtResourcePath:@"/empty/dictionary" delegate:responseLoader];
|
||||
// [responseLoader waitForResponse];
|
||||
// assertThat(responseLoader.objects, isNot(nilValue()));
|
||||
// assertThatBool([responseLoader.objects isKindOfClass:[NSArray class]], is(equalToBool(YES)));
|
||||
// assertThat(responseLoader.objects, is(empty()));
|
||||
//}
|
||||
//
|
||||
//- (void)testShouldInvokeTheDelegateOnSuccessIfTheResponseIsAnEmptyString
|
||||
//{
|
||||
// RKObjectManager *objectManager = [RKTestFactory objectManager];
|
||||
// RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
// responseLoader.timeout = 20;
|
||||
// [objectManager loadObjectsAtResourcePath:@"/empty/string" delegate:responseLoader];
|
||||
// [responseLoader waitForResponse];
|
||||
// assertThat(responseLoader.objects, isNot(nilValue()));
|
||||
// assertThatBool([responseLoader.objects isKindOfClass:[NSArray class]], is(equalToBool(YES)));
|
||||
// assertThat(responseLoader.objects, is(empty()));
|
||||
//}
|
||||
//
|
||||
//- (void)testShouldNotBlockNetworkOperationsWhileAwaitingObjectMapping
|
||||
//{
|
||||
// RKObjectManager *objectManager = [RKTestFactory objectManager];
|
||||
// objectManager.requestCache.storagePolicy = RKRequestCacheStoragePolicyDisabled;
|
||||
// objectManager.client.requestQueue.concurrentRequestsLimit = 1;
|
||||
// RKObjectMapping *userMapping = [RKObjectMapping mappingForClass:[RKTestComplexUser class]];
|
||||
// userMapping.rootKeyPath = @"human";
|
||||
// [userMapping addAttributeMappingsFromArray:@[@"name", @"id"]];
|
||||
//
|
||||
// // Suspend the Queue to block object mapping
|
||||
// [objectManager.mappingQueue setSuspended:YES];
|
||||
//
|
||||
// RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
// [objectManager.mappingProvider setObjectMapping:userMapping forpathPattern:@"/humans/1"];
|
||||
// [objectManager loadObjectsAtResourcePath:@"/humans/1" delegate:nil];
|
||||
// [objectManager.client get:@"/empty/string" delegate:responseLoader];
|
||||
// [responseLoader waitForResponse];
|
||||
//
|
||||
// // We should get a response is network is released even though object mapping didn't finish
|
||||
// assertThatBool(responseLoader.wasSuccessful, is(equalToBool(YES)));
|
||||
//}
|
||||
//
|
||||
//#pragma mark - Block Tests
|
||||
//
|
||||
//- (void)testInvocationOfDidLoadObjectBlock
|
||||
//{
|
||||
// RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[RKTestFactory baseURL]];
|
||||
// RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
// RKObjectLoader *objectLoader = [objectManager loaderWithResourcePath:@"/JSON/ComplexNestedUser.json"];
|
||||
// objectLoader.delegate = responseLoader;
|
||||
// objectLoader.method = RKRequestMethodGET;
|
||||
// objectLoader.mappingProvider = [self providerForComplexUser];
|
||||
// __block id expectedResult = nil;
|
||||
// objectLoader.onDidLoadObject = ^(id object) {
|
||||
// expectedResult = object;
|
||||
// };
|
||||
//
|
||||
// [objectLoader sendAsynchronously];
|
||||
// [responseLoader waitForResponse];
|
||||
// assertThat(expectedResult, is(notNilValue()));
|
||||
//}
|
||||
//
|
||||
//- (void)testInvocationOfDidLoadObjectBlockIsSingularObjectOfCorrectType
|
||||
//{
|
||||
// RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[RKTestFactory baseURL]];
|
||||
// RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
// RKObjectLoader *objectLoader = [objectManager loaderWithResourcePath:@"/JSON/ComplexNestedUser.json"];
|
||||
// objectLoader.delegate = responseLoader;
|
||||
// objectLoader.method = RKRequestMethodGET;
|
||||
// objectLoader.mappingProvider = [self providerForComplexUser];
|
||||
// __block id expectedResult = nil;
|
||||
// objectLoader.onDidLoadObject = ^(id object) {
|
||||
// expectedResult = object;
|
||||
// };
|
||||
//
|
||||
// [objectLoader sendAsynchronously];
|
||||
// [responseLoader waitForResponse];
|
||||
// assertThat(expectedResult, is(instanceOf([RKTestComplexUser class])));
|
||||
//}
|
||||
//
|
||||
//- (void)testInvocationOfDidLoadObjectsBlock
|
||||
//{
|
||||
// RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[RKTestFactory baseURL]];
|
||||
// RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
// RKObjectLoader *objectLoader = [objectManager loaderWithResourcePath:@"/JSON/ComplexNestedUser.json"];
|
||||
// objectLoader.delegate = responseLoader;
|
||||
// objectLoader.method = RKRequestMethodGET;
|
||||
// objectLoader.mappingProvider = [self providerForComplexUser];
|
||||
// __block id expectedResult = nil;
|
||||
// objectLoader.onDidLoadObjects = ^(NSArray *objects) {
|
||||
// expectedResult = objects;
|
||||
// };
|
||||
//
|
||||
// [objectLoader sendAsynchronously];
|
||||
// [responseLoader waitForResponse];
|
||||
// assertThat(expectedResult, is(notNilValue()));
|
||||
//}
|
||||
//
|
||||
//- (void)testInvocationOfDidLoadObjectsBlocksIsCollectionOfObjects
|
||||
//{
|
||||
// RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[RKTestFactory baseURL]];
|
||||
// RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
// RKObjectLoader *objectLoader = [objectManager loaderWithResourcePath:@"/JSON/ComplexNestedUser.json"];
|
||||
// objectLoader.delegate = responseLoader;
|
||||
// objectLoader.method = RKRequestMethodGET;
|
||||
// objectLoader.mappingProvider = [self providerForComplexUser];
|
||||
// __block id expectedResult = nil;
|
||||
// objectLoader.onDidLoadObjects = ^(NSArray *objects) {
|
||||
// expectedResult = [objects retain];
|
||||
// };
|
||||
//
|
||||
// [objectLoader sendAsynchronously];
|
||||
// [responseLoader waitForResponse];
|
||||
// NSLog(@"The expectedResult = %@", expectedResult);
|
||||
// assertThat(expectedResult, is(instanceOf([NSArray class])));
|
||||
// assertThat(expectedResult, hasCountOf(1));
|
||||
// [expectedResult release];
|
||||
//}
|
||||
//
|
||||
//- (void)testInvocationOfDidLoadObjectsDictionaryBlock
|
||||
//{
|
||||
// RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[RKTestFactory baseURL]];
|
||||
// RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
// RKObjectLoader *objectLoader = [objectManager loaderWithResourcePath:@"/JSON/ComplexNestedUser.json"];
|
||||
// objectLoader.delegate = responseLoader;
|
||||
// objectLoader.method = RKRequestMethodGET;
|
||||
// objectLoader.mappingProvider = [self providerForComplexUser];
|
||||
// __block id expectedResult = nil;
|
||||
// objectLoader.onDidLoadObjectsDictionary = ^(NSDictionary *dictionary) {
|
||||
// expectedResult = dictionary;
|
||||
// };
|
||||
//
|
||||
// [objectLoader sendAsynchronously];
|
||||
// [responseLoader waitForResponse];
|
||||
// assertThat(expectedResult, is(notNilValue()));
|
||||
//}
|
||||
//
|
||||
//- (void)testInvocationOfDidLoadObjectsDictionaryBlocksIsDictionaryOfObjects
|
||||
//{
|
||||
// RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[RKTestFactory baseURL]];
|
||||
// RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
// RKObjectLoader *objectLoader = [objectManager loaderWithResourcePath:@"/JSON/ComplexNestedUser.json"];
|
||||
// objectLoader.delegate = responseLoader;
|
||||
// objectLoader.method = RKRequestMethodGET;
|
||||
// objectLoader.mappingProvider = [self providerForComplexUser];
|
||||
// __block id expectedResult = nil;
|
||||
// objectLoader.onDidLoadObjectsDictionary = ^(NSDictionary *dictionary) {
|
||||
// expectedResult = dictionary;
|
||||
// };
|
||||
//
|
||||
// [objectLoader sendAsynchronously];
|
||||
// [responseLoader waitForResponse];
|
||||
// assertThat(expectedResult, is(instanceOf([NSDictionary class])));
|
||||
// assertThat(expectedResult, hasCountOf(1));
|
||||
//}
|
||||
//
|
||||
//// NOTE: Errors are fired in a number of contexts within the RKObjectLoader. We have centralized the cases into a private
|
||||
//// method and test that one case here. There should be better coverage for this.
|
||||
//- (void)testInvocationOfOnDidFailWithError
|
||||
//{
|
||||
// RKObjectLoader *loader = [RKObjectLoader loaderWithURL:nil mappingProvider:nil];
|
||||
// NSError *expectedError = [NSError errorWithDomain:@"Testing" code:1234 userInfo:nil];
|
||||
// __block NSError *blockError = nil;
|
||||
// loader.onDidFailWithError = ^(NSError *error) {
|
||||
// blockError = error;
|
||||
// };
|
||||
// [loader performSelector:@selector(informDelegateOfError:) withObject:expectedError];
|
||||
// assertThat(blockError, is(equalTo(expectedError)));
|
||||
//}
|
||||
//
|
||||
//- (void)testShouldNotAssertDuringObjectMappingOnSynchronousRequest
|
||||
//{
|
||||
// RKObjectManager *objectManager = [RKTestFactory objectManager];
|
||||
//
|
||||
// RKObjectMapping *userMapping = [RKObjectMapping mappingForClass:[RKTestComplexUser class]];
|
||||
// userMapping.rootKeyPath = @"data.STUser";
|
||||
// [userMapping addAttributeMappingsFromArray:@[@"firstname"]];
|
||||
// RKObjectLoader *objectLoader = [objectManager loaderWithResourcePath:@"/humans/1"];
|
||||
// objectLoader.objectMapping = userMapping;
|
||||
// [objectLoader sendSynchronously];
|
||||
// RKResponse *response = [objectLoader sendSynchronously];
|
||||
//
|
||||
// assertThatInteger(response.statusCode, is(equalToInt(200)));
|
||||
//}
|
||||
//
|
||||
//@end
|
||||
@@ -1,808 +0,0 @@
|
||||
//
|
||||
// RKObjectLoaderTest.m
|
||||
// RestKit
|
||||
//
|
||||
// Created by Blake Watters on 4/27/11.
|
||||
// Copyright (c) 2009-2012 RestKit. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
#import "RKTestEnvironment.h"
|
||||
#import "RKObjectMappingProvider.h"
|
||||
#import "RKErrorMessage.h"
|
||||
#import "RKJSONParserJSONKit.h"
|
||||
|
||||
// Models
|
||||
#import "RKObjectLoaderTestResultModel.h"
|
||||
|
||||
@interface RKTestComplexUser : NSObject {
|
||||
NSNumber *_userID;
|
||||
NSString *_firstname;
|
||||
NSString *_lastname;
|
||||
NSString *_email;
|
||||
NSString *_phone;
|
||||
}
|
||||
|
||||
@property (nonatomic, retain) NSNumber *userID;
|
||||
@property (nonatomic, retain) NSString *firstname;
|
||||
@property (nonatomic, retain) NSString *lastname;
|
||||
@property (nonatomic, retain) NSString *email;
|
||||
@property (nonatomic, retain) NSString *phone;
|
||||
|
||||
@end
|
||||
|
||||
@implementation RKTestComplexUser
|
||||
|
||||
@synthesize userID = _userID;
|
||||
@synthesize firstname = _firstname;
|
||||
@synthesize lastname = _lastname;
|
||||
@synthesize phone = _phone;
|
||||
@synthesize email = _email;
|
||||
|
||||
- (void)willSendWithObjectLoader:(RKObjectLoader *)objectLoader
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@interface RKTestResponseLoaderWithWillMapData : RKTestResponseLoader {
|
||||
id _mappableData;
|
||||
}
|
||||
|
||||
@property (nonatomic, readonly) id mappableData;
|
||||
|
||||
@end
|
||||
|
||||
@implementation RKTestResponseLoaderWithWillMapData
|
||||
|
||||
@synthesize mappableData = _mappableData;
|
||||
|
||||
- (void)dealloc
|
||||
{
|
||||
[_mappableData release];
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (void)objectLoader:(RKObjectLoader *)loader willMapData:(inout id *)mappableData
|
||||
{
|
||||
[*mappableData setValue:@"monkey!" forKey:@"newKey"];
|
||||
_mappableData = [*mappableData retain];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@interface RKObjectLoaderTest : RKTestCase {
|
||||
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation RKObjectLoaderTest
|
||||
|
||||
- (void)setUp
|
||||
{
|
||||
[RKTestFactory setUp];
|
||||
}
|
||||
|
||||
- (void)tearDown
|
||||
{
|
||||
[RKTestFactory tearDown];
|
||||
}
|
||||
|
||||
- (RKObjectMappingProvider *)providerForComplexUser
|
||||
{
|
||||
NSMutableDictionary *mappingDictionary = [NSMutableDictionary dictionary];
|
||||
RKObjectMapping *userMapping = [RKObjectMapping mappingForClass:[RKTestComplexUser class]];
|
||||
[userMapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:@"firstname" toKeyPath:@"firstname"]];
|
||||
[mappingsDictionary setObject:userMapping forKey:@"data.STUser"];
|
||||
return provider;
|
||||
}
|
||||
|
||||
- (RKObjectMappingProvider *)errorMappingProvider
|
||||
{
|
||||
NSMutableDictionary *mappingDictionary = [NSMutableDictionary dictionary];
|
||||
RKObjectMapping *errorMapping = [RKObjectMapping mappingForClass:[RKErrorMessage class]];
|
||||
[errorMapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:@"" toKeyPath:@"errorMessage"]];
|
||||
errorMapping.rootKeyPath = @"errors";
|
||||
provider.errorMapping = errorMapping;
|
||||
return provider;
|
||||
}
|
||||
|
||||
- (void)testShouldHandleTheErrorCaseAppropriately
|
||||
{
|
||||
RKObjectManager *objectManager = [RKTestFactory objectManager];
|
||||
objectManager.mappingProvider = [self errorMappingProvider];
|
||||
|
||||
RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
RKObjectLoader *objectLoader = [objectManager loaderWithResourcePath:@"/errors.json"];
|
||||
objectLoader.delegate = responseLoader;
|
||||
objectLoader.method = RKRequestMethodGET;
|
||||
[objectLoader sendAsynchronously];
|
||||
[responseLoader waitForResponse];
|
||||
|
||||
assertThat(responseLoader.error, isNot(nilValue()));
|
||||
assertThat([responseLoader.error localizedDescription], is(equalTo(@"error1, error2")));
|
||||
|
||||
NSArray *objects = [[responseLoader.error userInfo] objectForKey:RKObjectMapperErrorObjectsKey];
|
||||
RKErrorMessage *error1 = [objects objectAtIndex:0];
|
||||
RKErrorMessage *error2 = [objects lastObject];
|
||||
|
||||
assertThat(error1.errorMessage, is(equalTo(@"error1")));
|
||||
assertThat(error2.errorMessage, is(equalTo(@"error2")));
|
||||
}
|
||||
|
||||
- (void)testShouldNotCrashWhenLoadingAnErrorResponseWithAnUnmappableMIMEType
|
||||
{
|
||||
RKObjectManager *objectManager = [RKTestFactory objectManager];
|
||||
RKTestResponseLoader *loader = [RKTestResponseLoader responseLoader];
|
||||
[objectManager loadObjectsAtResourcePath:@"/404" delegate:loader];
|
||||
[loader waitForResponse];
|
||||
assertThatBool(loader.loadedUnexpectedResponse, is(equalToBool(YES)));
|
||||
}
|
||||
|
||||
#pragma mark - Complex JSON
|
||||
|
||||
- (void)testShouldLoadAComplexUserObjectWithTargetObject
|
||||
{
|
||||
RKTestComplexUser *user = [[RKTestComplexUser new] autorelease];
|
||||
RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[RKTestFactory baseURL]];
|
||||
RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
RKObjectLoader *objectLoader = [objectManager loaderWithResourcePath:@"/JSON/ComplexNestedUser.json"];
|
||||
objectLoader.delegate = responseLoader;
|
||||
NSString *authString = [NSString stringWithFormat:@"TRUEREST username=%@&password=%@&apikey=123456&class=iphone", @"username", @"password"];
|
||||
[objectLoader.URLRequest addValue:authString forHTTPHeaderField:@"Authorization"];
|
||||
objectLoader.method = RKRequestMethodGET;
|
||||
objectLoader.targetObject = user;
|
||||
objectLoader.mappingProvider = [self providerForComplexUser];
|
||||
|
||||
[objectLoader sendAsynchronously];
|
||||
[responseLoader waitForResponse];
|
||||
|
||||
assertThat(user.firstname, is(equalTo(@"Diego")));
|
||||
}
|
||||
|
||||
- (void)testShouldLoadAComplexUserObjectWithoutTargetObject
|
||||
{
|
||||
RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[RKTestFactory baseURL]];
|
||||
RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
RKObjectLoader *objectLoader = [objectManager loaderWithResourcePath:@"/JSON/ComplexNestedUser.json"];
|
||||
objectLoader.delegate = responseLoader;
|
||||
objectLoader.method = RKRequestMethodGET;
|
||||
objectLoader.mappingProvider = [self providerForComplexUser];
|
||||
|
||||
[objectLoader sendAsynchronously];
|
||||
[responseLoader waitForResponse];
|
||||
assertThatUnsignedInteger([responseLoader.objects count], is(equalToInt(1)));
|
||||
RKTestComplexUser *user = [responseLoader.objects lastObject];
|
||||
|
||||
assertThat(user.firstname, is(equalTo(@"Diego")));
|
||||
}
|
||||
|
||||
- (void)testShouldLoadAComplexUserObjectUsingRegisteredKeyPath
|
||||
{
|
||||
RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[RKTestFactory baseURL]];
|
||||
RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
RKObjectLoader *objectLoader = [objectManager loaderWithResourcePath:@"/JSON/ComplexNestedUser.json"];
|
||||
objectLoader.delegate = responseLoader;
|
||||
objectLoader.method = RKRequestMethodGET;
|
||||
objectLoader.mappingProvider = [self providerForComplexUser];
|
||||
[objectLoader sendAsynchronously];
|
||||
[responseLoader waitForResponse];
|
||||
assertThatUnsignedInteger([responseLoader.objects count], is(equalToInt(1)));
|
||||
RKTestComplexUser *user = [responseLoader.objects lastObject];
|
||||
|
||||
assertThat(user.firstname, is(equalTo(@"Diego")));
|
||||
}
|
||||
|
||||
#pragma mark - willSendWithObjectLoader:
|
||||
|
||||
- (void)testShouldInvokeWillSendWithObjectLoaderOnSend
|
||||
{
|
||||
RKObjectManager *objectManager = [RKTestFactory objectManager];
|
||||
RKTestComplexUser *user = [[RKTestComplexUser new] autorelease];
|
||||
id mockObject = [OCMockObject partialMockForObject:user];
|
||||
|
||||
// Explicitly init so we don't get a managed object loader...
|
||||
RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
RKObjectLoader *objectLoader = [[RKObjectLoader alloc] initWithURL:[objectManager.baseURL URLByAppendingResourcePath:@"/200"] mappingProvider:[self providerForComplexUser]];
|
||||
objectLoader.configurationDelegate = objectManager;
|
||||
objectLoader.sourceObject = mockObject;
|
||||
objectLoader.delegate = responseLoader;
|
||||
[[mockObject expect] willSendWithObjectLoader:objectLoader];
|
||||
[objectLoader send];
|
||||
[responseLoader waitForResponse];
|
||||
[mockObject verify];
|
||||
}
|
||||
|
||||
- (void)testShouldInvokeWillSendWithObjectLoaderOnSendAsynchronously
|
||||
{
|
||||
RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[RKTestFactory baseURL]];
|
||||
[objectManager setMappingProvider:[self providerForComplexUser]];
|
||||
RKTestComplexUser *user = [[RKTestComplexUser new] autorelease];
|
||||
id mockObject = [OCMockObject partialMockForObject:user];
|
||||
|
||||
// Explicitly init so we don't get a managed object loader...
|
||||
RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
RKObjectLoader *objectLoader = [RKObjectLoader loaderWithURL:[objectManager.baseURL URLByAppendingResourcePath:@"/200"] mappingProvider:objectManager.mappingProvider];
|
||||
objectLoader.delegate = responseLoader;
|
||||
objectLoader.sourceObject = mockObject;
|
||||
[[mockObject expect] willSendWithObjectLoader:objectLoader];
|
||||
[objectLoader sendAsynchronously];
|
||||
[responseLoader waitForResponse];
|
||||
[mockObject verify];
|
||||
}
|
||||
|
||||
- (void)testShouldInvokeWillSendWithObjectLoaderOnSendSynchronously
|
||||
{
|
||||
RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[RKTestFactory baseURL]];
|
||||
[objectManager setMappingProvider:[self providerForComplexUser]];
|
||||
RKTestComplexUser *user = [[RKTestComplexUser new] autorelease];
|
||||
id mockObject = [OCMockObject partialMockForObject:user];
|
||||
|
||||
// Explicitly init so we don't get a managed object loader...
|
||||
RKObjectLoader *objectLoader = [RKObjectLoader loaderWithURL:[objectManager.baseURL URLByAppendingResourcePath:@"/200"] mappingProvider:objectManager.mappingProvider];
|
||||
objectLoader.sourceObject = mockObject;
|
||||
[[mockObject expect] willSendWithObjectLoader:objectLoader];
|
||||
[objectLoader sendSynchronously];
|
||||
[mockObject verify];
|
||||
}
|
||||
|
||||
- (void)testShouldLoadResultsNestedAtAKeyPath
|
||||
{
|
||||
RKObjectManager *objectManager = [RKTestFactory objectManager];
|
||||
RKObjectMapping *objectMapping = [RKObjectMapping mappingForClass:[RKObjectLoaderTestResultModel class]];
|
||||
[objectMapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:@"id" toKeyPath:@"ID"]];
|
||||
[objectMapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:@"ends_at" toKeyPath:@"endsAt"]];
|
||||
[objectMapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:@"photo_url" toKeyPath:@"photoURL"]];
|
||||
[objectManager.mappingProvider setMapping:objectMapping forKeyPath:@"results"];
|
||||
RKTestResponseLoader *loader = [RKTestResponseLoader responseLoader];
|
||||
[objectManager loadObjectsAtResourcePath:@"/JSON/ArrayOfResults.json" delegate:loader];
|
||||
[loader waitForResponse];
|
||||
assertThat([loader objects], hasCountOf(2));
|
||||
assertThat([[[loader objects] objectAtIndex:0] ID], is(equalToInt(226)));
|
||||
assertThat([[[loader objects] objectAtIndex:0] photoURL], is(equalTo(@"1308262872.jpg")));
|
||||
assertThat([[[loader objects] objectAtIndex:1] ID], is(equalToInt(235)));
|
||||
assertThat([[[loader objects] objectAtIndex:1] photoURL], is(equalTo(@"1308634984.jpg")));
|
||||
}
|
||||
|
||||
- (void)testShouldAllowMutationOfTheParsedDataInWillMapData
|
||||
{
|
||||
RKTestResponseLoaderWithWillMapData *loader = (RKTestResponseLoaderWithWillMapData *)[RKTestResponseLoaderWithWillMapData responseLoader];
|
||||
RKObjectManager *manager = [RKTestFactory objectManager];
|
||||
[manager loadObjectsAtResourcePath:@"/JSON/humans/1.json" delegate:loader];
|
||||
[loader waitForResponse];
|
||||
assertThat([loader.mappableData valueForKey:@"newKey"], is(equalTo(@"monkey!")));
|
||||
}
|
||||
|
||||
- (void)testShouldAllowYouToPostAnObjectAndHandleAnEmpty204Response
|
||||
{
|
||||
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[RKTestComplexUser class]];
|
||||
[mapping addAttributeMappingsFromArray:@[@"firstname", @"lastname", @"email"]];
|
||||
RKObjectMapping *serializationMapping = [mapping inverseMapping];
|
||||
|
||||
RKObjectManager *objectManager = [RKTestFactory objectManager];
|
||||
[objectManager.router.routeSet addRoute:[RKRoute routeWithClass:[RKTestComplexUser class] pathPattern:@"/204"method:RKRequestMethodAny]];
|
||||
[objectManager.mappingProvider setSerializationMapping:serializationMapping forClass:[RKTestComplexUser class]];
|
||||
|
||||
RKTestComplexUser *user = [[RKTestComplexUser new] autorelease];
|
||||
user.firstname = @"Blake";
|
||||
user.lastname = @"Watters";
|
||||
user.email = @"blake@restkit.org";
|
||||
|
||||
RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
RKObjectLoader *loader = [objectManager loaderForObject:user method:RKRequestMethodPOST];
|
||||
loader.delegate = responseLoader;
|
||||
loader.objectMapping = mapping;
|
||||
[loader send];
|
||||
[responseLoader waitForResponse];
|
||||
assertThatBool([responseLoader wasSuccessful], is(equalToBool(YES)));
|
||||
assertThat(user.email, is(equalTo(@"blake@restkit.org")));
|
||||
}
|
||||
|
||||
- (void)testShouldAllowYouToPOSTAnObjectAndMapBackNonNestedContent
|
||||
{
|
||||
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[RKTestComplexUser class]];
|
||||
[mapping addAttributeMappingsFromArray:@[@"firstname", @"lastname", @"email"]];
|
||||
RKObjectMapping *serializationMapping = [mapping inverseMapping];
|
||||
|
||||
RKObjectManager *objectManager = [RKTestFactory objectManager];
|
||||
[objectManager.router.routeSet addRoute:[RKRoute routeWithClass:[RKTestComplexUser class] pathPattern:@"/notNestedUser" method:RKRequestMethodAny]];
|
||||
[objectManager.mappingProvider setSerializationMapping:serializationMapping forClass:[RKTestComplexUser class]];
|
||||
|
||||
RKTestComplexUser *user = [[RKTestComplexUser new] autorelease];
|
||||
user.firstname = @"Blake";
|
||||
user.lastname = @"Watters";
|
||||
user.email = @"blake@restkit.org";
|
||||
|
||||
RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
RKObjectLoader *loader = [objectManager loaderForObject:user method:RKRequestMethodPOST];
|
||||
loader.delegate = responseLoader;
|
||||
loader.objectMapping = mapping;
|
||||
[loader send];
|
||||
[responseLoader waitForResponse];
|
||||
assertThatBool([responseLoader wasSuccessful], is(equalToBool(YES)));
|
||||
assertThat(user.email, is(equalTo(@"changed")));
|
||||
}
|
||||
|
||||
- (void)testShouldMapContentWithoutAMIMEType
|
||||
{
|
||||
// TODO: Not sure that this is even worth it. Unable to get the Sinatra server to produce such a response
|
||||
return;
|
||||
RKLogConfigureByName("RestKit/Network", RKLogLevelTrace);
|
||||
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[RKTestComplexUser class]];
|
||||
[mapping addAttributeMappingsFromArray:@[@"firstname", @"lastname", @"email"]];
|
||||
RKObjectMapping *serializationMapping = [mapping inverseMapping];
|
||||
|
||||
RKObjectManager *objectManager = [RKTestFactory objectManager];
|
||||
[[RKParserRegistry sharedRegistry] setParserClass:[RKJSONParserJSONKit class] forMIMEType:@"text/html"];
|
||||
[objectManager.router.routeSet addRoute:[RKRoute routeWithClass:[RKTestComplexUser class] pathPattern:@"/noMIME" method:RKRequestMethodAny]];
|
||||
[objectManager.mappingProvider setSerializationMapping:serializationMapping forClass:[RKTestComplexUser class]];
|
||||
|
||||
RKTestComplexUser *user = [[RKTestComplexUser new] autorelease];
|
||||
user.firstname = @"Blake";
|
||||
user.lastname = @"Watters";
|
||||
user.email = @"blake@restkit.org";
|
||||
|
||||
RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
RKObjectLoader *loader = [objectManager loaderForObject:user method:RKRequestMethodPOST];
|
||||
loader.delegate = responseLoader;
|
||||
loader.objectMapping = mapping;
|
||||
[loader send];
|
||||
[responseLoader waitForResponse];
|
||||
assertThatBool([responseLoader wasSuccessful], is(equalToBool(YES)));
|
||||
assertThat(user.email, is(equalTo(@"changed")));
|
||||
}
|
||||
|
||||
- (void)testShouldAllowYouToPOSTAnObjectOfOneTypeAndGetBackAnother
|
||||
{
|
||||
RKObjectMapping *sourceMapping = [RKObjectMapping mappingForClass:[RKTestComplexUser class]];
|
||||
[sourceMapping addAttributeMappingsFromArray:@[@"firstname", @"lastname", @"email"]];
|
||||
RKObjectMapping *serializationMapping = [sourceMapping inverseMapping];
|
||||
|
||||
RKObjectMapping *targetMapping = [RKObjectMapping mappingForClass:[RKObjectLoaderTestResultModel class]];
|
||||
[targetMapping addAttributeMappingsFromArray:@[@"ID"]];
|
||||
|
||||
RKObjectManager *objectManager = [RKTestFactory objectManager];
|
||||
[objectManager.router.routeSet addRoute:[RKRoute routeWithClass:[RKTestComplexUser class] pathPattern:@"/notNestedUser" method:RKRequestMethodAny]];
|
||||
[objectManager.mappingProvider setSerializationMapping:serializationMapping forClass:[RKTestComplexUser class]];
|
||||
|
||||
RKTestComplexUser *user = [[RKTestComplexUser new] autorelease];
|
||||
user.firstname = @"Blake";
|
||||
user.lastname = @"Watters";
|
||||
user.email = @"blake@restkit.org";
|
||||
|
||||
RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
RKObjectLoader *loader = [objectManager loaderForObject:user method:RKRequestMethodPOST];
|
||||
loader.delegate = responseLoader;
|
||||
loader.sourceObject = user;
|
||||
loader.targetObject = nil;
|
||||
loader.objectMapping = targetMapping;
|
||||
[loader send];
|
||||
[responseLoader waitForResponse];
|
||||
assertThatBool([responseLoader wasSuccessful], is(equalToBool(YES)));
|
||||
|
||||
// Our original object should not have changed
|
||||
assertThat(user.email, is(equalTo(@"blake@restkit.org")));
|
||||
|
||||
// And we should have a new one
|
||||
RKObjectLoaderTestResultModel *newObject = [[responseLoader objects] lastObject];
|
||||
assertThat(newObject, is(instanceOf([RKObjectLoaderTestResultModel class])));
|
||||
assertThat(newObject.ID, is(equalToInt(31337)));
|
||||
}
|
||||
|
||||
- (void)testShouldAllowYouToPOSTAnObjectOfOneTypeAndGetBackAnotherViaURLConfiguration
|
||||
{
|
||||
RKObjectMapping *sourceMapping = [RKObjectMapping mappingForClass:[RKTestComplexUser class]];
|
||||
[sourceMapping addAttributeMappingsFromArray:@[@"firstname", @"lastname", @"email"]];
|
||||
RKObjectMapping *serializationMapping = [sourceMapping inverseMapping];
|
||||
|
||||
RKObjectMapping *targetMapping = [RKObjectMapping mappingForClass:[RKObjectLoaderTestResultModel class]];
|
||||
[targetMapping addAttributeMappingsFromArray:@[@"ID"]];
|
||||
|
||||
RKObjectManager *objectManager = [RKTestFactory objectManager];
|
||||
[objectManager.router.routeSet addRoute:[RKRoute routeWithClass:[RKTestComplexUser class] pathPattern:@"/notNestedUser" method:RKRequestMethodAny]];
|
||||
[objectManager.mappingProvider setSerializationMapping:serializationMapping forClass:[RKTestComplexUser class]];
|
||||
[objectManager.mappingProvider setObjectMapping:targetMapping forpathPattern:@"/notNestedUser"];
|
||||
|
||||
RKTestComplexUser *user = [[RKTestComplexUser new] autorelease];
|
||||
user.firstname = @"Blake";
|
||||
user.lastname = @"Watters";
|
||||
user.email = @"blake@restkit.org";
|
||||
|
||||
RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
RKObjectLoader *loader = [objectManager loaderForObject:user method:RKRequestMethodPOST];
|
||||
loader.delegate = responseLoader;
|
||||
loader.sourceObject = user;
|
||||
loader.targetObject = nil;
|
||||
[loader send];
|
||||
[responseLoader waitForResponse];
|
||||
assertThatBool([responseLoader wasSuccessful], is(equalToBool(YES)));
|
||||
|
||||
// Our original object should not have changed
|
||||
assertThat(user.email, is(equalTo(@"blake@restkit.org")));
|
||||
|
||||
// And we should have a new one
|
||||
RKObjectLoaderTestResultModel *newObject = [[responseLoader objects] lastObject];
|
||||
assertThat(newObject, is(instanceOf([RKObjectLoaderTestResultModel class])));
|
||||
assertThat(newObject.ID, is(equalToInt(31337)));
|
||||
}
|
||||
|
||||
// TODO: Should live in a different file...
|
||||
- (void)testShouldAllowYouToPOSTAnObjectAndMapBackNonNestedContentViapostObject
|
||||
{
|
||||
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[RKTestComplexUser class]];
|
||||
[mapping addAttributeMappingsFromArray:@[@"firstname", @"lastname", @"email"]];
|
||||
RKObjectMapping *serializationMapping = [mapping inverseMapping];
|
||||
|
||||
RKObjectManager *objectManager = [RKTestFactory objectManager];
|
||||
[objectManager.router.routeSet addRoute:[RKRoute routeWithClass:[RKTestComplexUser class] pathPattern:@"/notNestedUser" method:RKRequestMethodAny]];
|
||||
[objectManager.mappingProvider setSerializationMapping:serializationMapping forClass:[RKTestComplexUser class]];
|
||||
|
||||
RKTestComplexUser *user = [[RKTestComplexUser new] autorelease];
|
||||
user.firstname = @"Blake";
|
||||
user.lastname = @"Watters";
|
||||
user.email = @"blake@restkit.org";
|
||||
|
||||
// NOTE: The postObject: should infer the target object from sourceObject and the mapping class
|
||||
RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
[objectManager postObject:user usingBlock:^(RKObjectLoader *loader) {
|
||||
loader.delegate = responseLoader;
|
||||
loader.objectMapping = mapping;
|
||||
}];
|
||||
[responseLoader waitForResponse];
|
||||
assertThatBool([responseLoader wasSuccessful], is(equalToBool(YES)));
|
||||
assertThat(user.email, is(equalTo(@"changed")));
|
||||
}
|
||||
|
||||
- (void)testShouldRespectTheRootKeyPathWhenConstructingATemporaryObjectMappingProvider
|
||||
{
|
||||
RKObjectMapping *userMapping = [RKObjectMapping mappingForClass:[RKTestComplexUser class]];
|
||||
userMapping.rootKeyPath = @"data.STUser";
|
||||
[userMapping addAttributeMappingsFromArray:@[@"firstname"]];
|
||||
|
||||
RKTestComplexUser *user = [[RKTestComplexUser new] autorelease];
|
||||
RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[RKTestFactory baseURL]];
|
||||
RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
|
||||
RKObjectLoader *objectLoader = [objectManager loaderWithResourcePath:@"/JSON/ComplexNestedUser.json"];
|
||||
objectLoader.delegate = responseLoader;
|
||||
objectLoader.objectMapping = userMapping;
|
||||
objectLoader.method = RKRequestMethodGET;
|
||||
objectLoader.targetObject = user;
|
||||
|
||||
[objectLoader sendAsynchronously];
|
||||
[responseLoader waitForResponse];
|
||||
|
||||
assertThat(user.firstname, is(equalTo(@"Diego")));
|
||||
}
|
||||
|
||||
- (void)testShouldDetermineObjectLoaderBasedOnResourcePathPatternWithExactMatch
|
||||
{
|
||||
RKObjectMapping *userMapping = [RKObjectMapping mappingForClass:[RKTestComplexUser class]];
|
||||
userMapping.rootKeyPath = @"data.STUser";
|
||||
[userMapping addAttributeMappingsFromArray:@[@"firstname"]];
|
||||
|
||||
RKTestComplexUser *user = [[RKTestComplexUser new] autorelease];
|
||||
RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[RKTestFactory baseURL]];
|
||||
RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
RKObjectMappingProvider *mappingProvider = [RKObjectMappingProvider mappingProvider];
|
||||
[mappingProvider setObjectMapping:userMapping forpathPattern:@"/JSON/ComplexNestedUser.json"];
|
||||
|
||||
RKURL *URL = [objectManager.baseURL URLByAppendingResourcePath:@"/JSON/ComplexNestedUser.json"];
|
||||
RKObjectLoader *objectLoader = [RKObjectLoader loaderWithURL:URL mappingProvider:mappingProvider];
|
||||
objectLoader.delegate = responseLoader;
|
||||
objectLoader.method = RKRequestMethodGET;
|
||||
objectLoader.targetObject = user;
|
||||
|
||||
[objectLoader sendAsynchronously];
|
||||
[responseLoader waitForResponse];
|
||||
|
||||
NSLog(@"Response: %@", responseLoader.objects);
|
||||
|
||||
assertThat(user.firstname, is(equalTo(@"Diego")));
|
||||
}
|
||||
|
||||
- (void)testShouldDetermineObjectLoaderBasedOnResourcePathPatternWithPartialMatch
|
||||
{
|
||||
RKObjectMapping *userMapping = [RKObjectMapping mappingForClass:[RKTestComplexUser class]];
|
||||
userMapping.rootKeyPath = @"data.STUser";
|
||||
[userMapping addAttributeMappingsFromArray:@[@"firstname"]];
|
||||
|
||||
RKTestComplexUser *user = [[RKTestComplexUser new] autorelease];
|
||||
RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[RKTestFactory baseURL]];
|
||||
RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
RKObjectMappingProvider *mappingProvider = [RKObjectMappingProvider mappingProvider];
|
||||
[mappingProvider setObjectMapping:userMapping forpathPattern:@"/JSON/:name\\.json"];
|
||||
|
||||
RKURL *URL = [objectManager.baseURL URLByAppendingResourcePath:@"/JSON/ComplexNestedUser.json"];
|
||||
RKObjectLoader *objectLoader = [RKObjectLoader loaderWithURL:URL mappingProvider:mappingProvider];
|
||||
objectLoader.delegate = responseLoader;
|
||||
objectLoader.method = RKRequestMethodGET;
|
||||
objectLoader.targetObject = user;
|
||||
|
||||
[objectLoader sendAsynchronously];
|
||||
[responseLoader waitForResponse];
|
||||
|
||||
NSLog(@"Response: %@", responseLoader.objects);
|
||||
|
||||
assertThat(user.firstname, is(equalTo(@"Diego")));
|
||||
}
|
||||
|
||||
- (void)testShouldReturnSuccessWhenTheStatusCodeIs200AndTheResponseBodyIsEmpty
|
||||
{
|
||||
RKObjectManager *objectManager = [RKTestFactory objectManager];
|
||||
|
||||
RKTestComplexUser *user = [[RKTestComplexUser new] autorelease];
|
||||
user.firstname = @"Blake";
|
||||
user.lastname = @"Watters";
|
||||
user.email = @"blake@restkit.org";
|
||||
|
||||
RKObjectMapping *userMapping = [RKObjectMapping mappingForClass:[RKTestComplexUser class]];
|
||||
userMapping.rootKeyPath = @"data.STUser";
|
||||
[userMapping addAttributeMappingsFromArray:@[@"firstname"]];
|
||||
RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
RKObjectLoader *objectLoader = [objectManager loaderWithResourcePath:@"/humans/1234"];
|
||||
objectLoader.delegate = responseLoader;
|
||||
objectLoader.method = RKRequestMethodDELETE;
|
||||
objectLoader.objectMapping = userMapping;
|
||||
objectLoader.targetObject = user;
|
||||
[objectLoader send];
|
||||
[responseLoader waitForResponse];
|
||||
assertThatBool(responseLoader.wasSuccessful, is(equalToBool(YES)));
|
||||
}
|
||||
|
||||
- (void)testShouldInvokeTheDelegateWithTheTargetObjectWhenTheStatusCodeIs200AndTheResponseBodyIsEmpty
|
||||
{
|
||||
RKObjectManager *objectManager = [RKTestFactory objectManager];
|
||||
|
||||
RKTestComplexUser *user = [[RKTestComplexUser new] autorelease];
|
||||
user.firstname = @"Blake";
|
||||
user.lastname = @"Watters";
|
||||
user.email = @"blake@restkit.org";
|
||||
|
||||
RKObjectMapping *userMapping = [RKObjectMapping mappingForClass:[RKTestComplexUser class]];
|
||||
userMapping.rootKeyPath = @"data.STUser";
|
||||
[userMapping addAttributeMappingsFromArray:@[@"firstname"]];
|
||||
RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
|
||||
RKObjectLoader *objectLoader = [RKObjectLoader loaderWithURL:[objectManager.baseURL URLByAppendingResourcePath:@"/humans/1234"] mappingProvider:objectManager.mappingProvider];
|
||||
objectLoader.delegate = responseLoader;
|
||||
objectLoader.method = RKRequestMethodDELETE;
|
||||
objectLoader.objectMapping = userMapping;
|
||||
objectLoader.targetObject = user;
|
||||
[objectLoader send];
|
||||
[responseLoader waitForResponse];
|
||||
assertThat(responseLoader.objects, hasItem(user));
|
||||
}
|
||||
|
||||
- (void)testShouldConsiderTheLoadOfEmptyObjectsWithoutAnyMappableAttributesAsSuccess
|
||||
{
|
||||
RKObjectManager *objectManager = [RKTestFactory objectManager];
|
||||
|
||||
RKObjectMapping *userMapping = [RKObjectMapping mappingForClass:[RKTestComplexUser class]];
|
||||
[userMapping addAttributeMappingsFromArray:@[@"firstname"]];
|
||||
[objectManager.mappingProvider setMapping:userMapping forKeyPath:@"firstUser"];
|
||||
[objectManager.mappingProvider setMapping:userMapping forKeyPath:@"secondUser"];
|
||||
|
||||
RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
[objectManager loadObjectsAtResourcePath:@"/users/empty" delegate:responseLoader];
|
||||
[responseLoader waitForResponse];
|
||||
assertThatBool(responseLoader.wasSuccessful, is(equalToBool(YES)));
|
||||
}
|
||||
|
||||
- (void)testShouldInvokeTheDelegateOnSuccessIfTheResponseIsAnEmptyArray
|
||||
{
|
||||
RKObjectManager *objectManager = [RKTestFactory objectManager];
|
||||
RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
responseLoader.timeout = 20;
|
||||
[objectManager loadObjectsAtResourcePath:@"/empty/array" delegate:responseLoader];
|
||||
[responseLoader waitForResponse];
|
||||
assertThat(responseLoader.objects, isNot(nilValue()));
|
||||
assertThatBool([responseLoader.objects isKindOfClass:[NSArray class]], is(equalToBool(YES)));
|
||||
assertThat(responseLoader.objects, is(empty()));
|
||||
}
|
||||
|
||||
- (void)testShouldInvokeTheDelegateOnSuccessIfTheResponseIsAnEmptyDictionary
|
||||
{
|
||||
RKObjectManager *objectManager = [RKTestFactory objectManager];
|
||||
RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
responseLoader.timeout = 20;
|
||||
[objectManager loadObjectsAtResourcePath:@"/empty/dictionary" delegate:responseLoader];
|
||||
[responseLoader waitForResponse];
|
||||
assertThat(responseLoader.objects, isNot(nilValue()));
|
||||
assertThatBool([responseLoader.objects isKindOfClass:[NSArray class]], is(equalToBool(YES)));
|
||||
assertThat(responseLoader.objects, is(empty()));
|
||||
}
|
||||
|
||||
- (void)testShouldInvokeTheDelegateOnSuccessIfTheResponseIsAnEmptyString
|
||||
{
|
||||
RKObjectManager *objectManager = [RKTestFactory objectManager];
|
||||
RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
responseLoader.timeout = 20;
|
||||
[objectManager loadObjectsAtResourcePath:@"/empty/string" delegate:responseLoader];
|
||||
[responseLoader waitForResponse];
|
||||
assertThat(responseLoader.objects, isNot(nilValue()));
|
||||
assertThatBool([responseLoader.objects isKindOfClass:[NSArray class]], is(equalToBool(YES)));
|
||||
assertThat(responseLoader.objects, is(empty()));
|
||||
}
|
||||
|
||||
- (void)testShouldNotBlockNetworkOperationsWhileAwaitingObjectMapping
|
||||
{
|
||||
RKObjectManager *objectManager = [RKTestFactory objectManager];
|
||||
objectManager.requestCache.storagePolicy = RKRequestCacheStoragePolicyDisabled;
|
||||
objectManager.client.requestQueue.concurrentRequestsLimit = 1;
|
||||
RKObjectMapping *userMapping = [RKObjectMapping mappingForClass:[RKTestComplexUser class]];
|
||||
userMapping.rootKeyPath = @"human";
|
||||
[userMapping addAttributeMappingsFromArray:@[@"name", @"id"]];
|
||||
|
||||
// Suspend the Queue to block object mapping
|
||||
[objectManager.mappingQueue setSuspended:YES];
|
||||
|
||||
RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
[objectManager.mappingProvider setObjectMapping:userMapping forpathPattern:@"/humans/1"];
|
||||
[objectManager loadObjectsAtResourcePath:@"/humans/1" delegate:nil];
|
||||
[objectManager.client get:@"/empty/string" delegate:responseLoader];
|
||||
[responseLoader waitForResponse];
|
||||
|
||||
// We should get a response is network is released even though object mapping didn't finish
|
||||
assertThatBool(responseLoader.wasSuccessful, is(equalToBool(YES)));
|
||||
}
|
||||
|
||||
#pragma mark - Block Tests
|
||||
|
||||
- (void)testInvocationOfDidLoadObjectBlock
|
||||
{
|
||||
RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[RKTestFactory baseURL]];
|
||||
RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
RKObjectLoader *objectLoader = [objectManager loaderWithResourcePath:@"/JSON/ComplexNestedUser.json"];
|
||||
objectLoader.delegate = responseLoader;
|
||||
objectLoader.method = RKRequestMethodGET;
|
||||
objectLoader.mappingProvider = [self providerForComplexUser];
|
||||
__block id expectedResult = nil;
|
||||
objectLoader.onDidLoadObject = ^(id object) {
|
||||
expectedResult = object;
|
||||
};
|
||||
|
||||
[objectLoader sendAsynchronously];
|
||||
[responseLoader waitForResponse];
|
||||
assertThat(expectedResult, is(notNilValue()));
|
||||
}
|
||||
|
||||
- (void)testInvocationOfDidLoadObjectBlockIsSingularObjectOfCorrectType
|
||||
{
|
||||
RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[RKTestFactory baseURL]];
|
||||
RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
RKObjectLoader *objectLoader = [objectManager loaderWithResourcePath:@"/JSON/ComplexNestedUser.json"];
|
||||
objectLoader.delegate = responseLoader;
|
||||
objectLoader.method = RKRequestMethodGET;
|
||||
objectLoader.mappingProvider = [self providerForComplexUser];
|
||||
__block id expectedResult = nil;
|
||||
objectLoader.onDidLoadObject = ^(id object) {
|
||||
expectedResult = object;
|
||||
};
|
||||
|
||||
[objectLoader sendAsynchronously];
|
||||
[responseLoader waitForResponse];
|
||||
assertThat(expectedResult, is(instanceOf([RKTestComplexUser class])));
|
||||
}
|
||||
|
||||
- (void)testInvocationOfDidLoadObjectsBlock
|
||||
{
|
||||
RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[RKTestFactory baseURL]];
|
||||
RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
RKObjectLoader *objectLoader = [objectManager loaderWithResourcePath:@"/JSON/ComplexNestedUser.json"];
|
||||
objectLoader.delegate = responseLoader;
|
||||
objectLoader.method = RKRequestMethodGET;
|
||||
objectLoader.mappingProvider = [self providerForComplexUser];
|
||||
__block id expectedResult = nil;
|
||||
objectLoader.onDidLoadObjects = ^(NSArray *objects) {
|
||||
expectedResult = objects;
|
||||
};
|
||||
|
||||
[objectLoader sendAsynchronously];
|
||||
[responseLoader waitForResponse];
|
||||
assertThat(expectedResult, is(notNilValue()));
|
||||
}
|
||||
|
||||
- (void)testInvocationOfDidLoadObjectsBlocksIsCollectionOfObjects
|
||||
{
|
||||
RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[RKTestFactory baseURL]];
|
||||
RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
RKObjectLoader *objectLoader = [objectManager loaderWithResourcePath:@"/JSON/ComplexNestedUser.json"];
|
||||
objectLoader.delegate = responseLoader;
|
||||
objectLoader.method = RKRequestMethodGET;
|
||||
objectLoader.mappingProvider = [self providerForComplexUser];
|
||||
__block id expectedResult = nil;
|
||||
objectLoader.onDidLoadObjects = ^(NSArray *objects) {
|
||||
expectedResult = [objects retain];
|
||||
};
|
||||
|
||||
[objectLoader sendAsynchronously];
|
||||
[responseLoader waitForResponse];
|
||||
NSLog(@"The expectedResult = %@", expectedResult);
|
||||
assertThat(expectedResult, is(instanceOf([NSArray class])));
|
||||
assertThat(expectedResult, hasCountOf(1));
|
||||
[expectedResult release];
|
||||
}
|
||||
|
||||
- (void)testInvocationOfDidLoadObjectsDictionaryBlock
|
||||
{
|
||||
RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[RKTestFactory baseURL]];
|
||||
RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
RKObjectLoader *objectLoader = [objectManager loaderWithResourcePath:@"/JSON/ComplexNestedUser.json"];
|
||||
objectLoader.delegate = responseLoader;
|
||||
objectLoader.method = RKRequestMethodGET;
|
||||
objectLoader.mappingProvider = [self providerForComplexUser];
|
||||
__block id expectedResult = nil;
|
||||
objectLoader.onDidLoadObjectsDictionary = ^(NSDictionary *dictionary) {
|
||||
expectedResult = dictionary;
|
||||
};
|
||||
|
||||
[objectLoader sendAsynchronously];
|
||||
[responseLoader waitForResponse];
|
||||
assertThat(expectedResult, is(notNilValue()));
|
||||
}
|
||||
|
||||
- (void)testInvocationOfDidLoadObjectsDictionaryBlocksIsDictionaryOfObjects
|
||||
{
|
||||
RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[RKTestFactory baseURL]];
|
||||
RKTestResponseLoader *responseLoader = [RKTestResponseLoader responseLoader];
|
||||
RKObjectLoader *objectLoader = [objectManager loaderWithResourcePath:@"/JSON/ComplexNestedUser.json"];
|
||||
objectLoader.delegate = responseLoader;
|
||||
objectLoader.method = RKRequestMethodGET;
|
||||
objectLoader.mappingProvider = [self providerForComplexUser];
|
||||
__block id expectedResult = nil;
|
||||
objectLoader.onDidLoadObjectsDictionary = ^(NSDictionary *dictionary) {
|
||||
expectedResult = dictionary;
|
||||
};
|
||||
|
||||
[objectLoader sendAsynchronously];
|
||||
[responseLoader waitForResponse];
|
||||
assertThat(expectedResult, is(instanceOf([NSDictionary class])));
|
||||
assertThat(expectedResult, hasCountOf(1));
|
||||
}
|
||||
|
||||
// NOTE: Errors are fired in a number of contexts within the RKObjectLoader. We have centralized the cases into a private
|
||||
// method and test that one case here. There should be better coverage for this.
|
||||
- (void)testInvocationOfOnDidFailWithError
|
||||
{
|
||||
RKObjectLoader *loader = [RKObjectLoader loaderWithURL:nil mappingProvider:nil];
|
||||
NSError *expectedError = [NSError errorWithDomain:@"Testing" code:1234 userInfo:nil];
|
||||
__block NSError *blockError = nil;
|
||||
loader.onDidFailWithError = ^(NSError *error) {
|
||||
blockError = error;
|
||||
};
|
||||
[loader performSelector:@selector(informDelegateOfError:) withObject:expectedError];
|
||||
assertThat(blockError, is(equalTo(expectedError)));
|
||||
}
|
||||
|
||||
- (void)testShouldNotAssertDuringObjectMappingOnSynchronousRequest
|
||||
{
|
||||
RKObjectManager *objectManager = [RKTestFactory objectManager];
|
||||
|
||||
RKObjectMapping *userMapping = [RKObjectMapping mappingForClass:[RKTestComplexUser class]];
|
||||
userMapping.rootKeyPath = @"data.STUser";
|
||||
[userMapping addAttributeMappingsFromArray:@[@"firstname"]];
|
||||
RKObjectLoader *objectLoader = [objectManager loaderWithResourcePath:@"/humans/1"];
|
||||
objectLoader.objectMapping = userMapping;
|
||||
[objectLoader sendSynchronously];
|
||||
RKResponse *response = [objectLoader sendSynchronously];
|
||||
|
||||
assertThatInteger(response.statusCode, is(equalToInt(200)));
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -1194,7 +1194,7 @@
|
||||
RKMappingOperation *operation = [[RKMappingOperation alloc] initWithSourceObject:dictionary destinationObject:user mapping:mapping];
|
||||
operation.delegate = mockDelegate;
|
||||
NSError *error = nil;
|
||||
[[mockDelegate expect] mappingOperation:operation didFindMapping:nameMapping forKeyPath:@"name"];
|
||||
[[mockDelegate expect] mappingOperation:operation didFindValue:[NSNull null] forKeyPath:@"name" mapping:nameMapping];
|
||||
[[mockDelegate expect] mappingOperation:operation didSetValue:nil forKeyPath:@"name" usingMapping:nameMapping];
|
||||
operation.dataSource = dataSource;
|
||||
[operation performMapping:&error];
|
||||
@@ -1215,7 +1215,7 @@
|
||||
RKMappingOperation *operation = [[RKMappingOperation alloc] initWithSourceObject:dictionary destinationObject:user mapping:mapping];
|
||||
operation.delegate = mockDelegate;
|
||||
NSError *error = nil;
|
||||
[[mockDelegate expect] mappingOperation:operation didFindMapping:nameMapping forKeyPath:@"name"];
|
||||
[[mockDelegate expect] mappingOperation:operation didFindValue:@"Blake Watters" forKeyPath:@"name" mapping:nameMapping];
|
||||
[[mockDelegate expect] mappingOperation:operation didNotSetUnchangedValue:@"Blake Watters" forKeyPath:@"name" usingMapping:nameMapping];
|
||||
RKObjectMappingOperationDataSource *dataSource = [RKObjectMappingOperationDataSource new];
|
||||
operation.dataSource = dataSource;
|
||||
|
||||
@@ -1,308 +0,0 @@
|
||||
//
|
||||
// RKObjectMappingProviderTest.m
|
||||
// RestKit
|
||||
//
|
||||
// Created by Greg Combs on 9/18/11.
|
||||
// Copyright (c) 2009-2012 RestKit. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
#import "RKTestEnvironment.h"
|
||||
#import "RKObjectManager.h"
|
||||
#import "RKManagedObjectStore.h"
|
||||
#import "RKTestResponseLoader.h"
|
||||
#import "RKEntityMapping.h"
|
||||
#import "RKObjectMappingProvider.h"
|
||||
#import "RKHuman.h"
|
||||
#import "RKCat.h"
|
||||
#import "RKObjectMapperTestModel.h"
|
||||
#import "RKOrderedDictionary.h"
|
||||
|
||||
@interface RKObjectMappingProviderTest : RKTestCase {
|
||||
RKObjectManager *_objectManager;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation RKObjectMappingProviderTest
|
||||
|
||||
- (void)setUp
|
||||
{
|
||||
_objectManager = [RKTestFactory objectManager];
|
||||
_objectManager.managedObjectStore = [RKTestFactory managedObjectStore];
|
||||
[RKObjectManager setSharedManager:_objectManager];
|
||||
NSError *error;
|
||||
[_objectManager.managedObjectStore resetPersistentStores:&error];
|
||||
}
|
||||
|
||||
- (void)testShouldFindAnExistingObjectMappingForAClass
|
||||
{
|
||||
RKManagedObjectStore *managedObjectStore = [RKTestFactory managedObjectStore];
|
||||
RKEntityMapping *humanMapping = [RKEntityMapping mappingForEntityForName:@"RKHuman" inManagedObjectStore:managedObjectStore];
|
||||
assertThat(humanMapping, isNot(equalTo(nil)));
|
||||
[humanMapping addAttributeMappingsFromArray:@[@"name"]];
|
||||
[_objectManager.mappingProvider addObjectMapping:humanMapping];
|
||||
RKMapping *returnedMapping = [_objectManager.mappingProvider objectMappingForClass:[RKHuman class]];
|
||||
assertThat(returnedMapping, isNot(equalTo(nil)));
|
||||
assertThat(returnedMapping, is(equalTo(humanMapping)));
|
||||
}
|
||||
|
||||
- (void)testShouldFindAnExistingObjectMappingForAKeyPath
|
||||
{
|
||||
RKManagedObjectStore *managedObjectStore = [RKTestFactory managedObjectStore];
|
||||
RKEntityMapping *catMapping = [RKEntityMapping mappingForEntityForName:@"RKCat" inManagedObjectStore:managedObjectStore];
|
||||
assertThat(catMapping, isNot(equalTo(nil)));
|
||||
[catMapping addAttributeMappingsFromArray:@[@"name"]];
|
||||
[_objectManager.mappingProvider setMapping:catMapping forKeyPath:@"cat"];
|
||||
RKMapping *returnedMapping = [_objectManager.mappingProvider mappingForKeyPath:@"cat"];
|
||||
assertThat(returnedMapping, isNot(equalTo(nil)));
|
||||
assertThat(returnedMapping, is(equalTo(catMapping)));
|
||||
}
|
||||
|
||||
- (void)testShouldAllowYouToRemoveAMappingByKeyPath
|
||||
{
|
||||
RKManagedObjectStore *managedObjectStore = [RKTestFactory managedObjectStore];
|
||||
RKObjectMappingProvider *mappingProvider = [RKObjectMappingProvider mappingProvider];
|
||||
RKEntityMapping *catMapping = [RKEntityMapping mappingForEntityForName:@"RKCat" inManagedObjectStore:managedObjectStore];
|
||||
assertThat(catMapping, isNot(equalTo(nil)));
|
||||
[catMapping addAttributeMappingsFromArray:@[@"name"]];
|
||||
[mappingProvider setMapping:catMapping forKeyPath:@"cat"];
|
||||
RKMapping *returnedMapping = [mappingProvider mappingForKeyPath:@"cat"];
|
||||
assertThat(returnedMapping, isNot(equalTo(nil)));
|
||||
[mappingProvider removeMappingForKeyPath:@"cat"];
|
||||
returnedMapping = [mappingProvider mappingForKeyPath:@"cat"];
|
||||
assertThat(returnedMapping, is(nilValue()));
|
||||
}
|
||||
|
||||
- (void)testSettingMappingInAContext
|
||||
{
|
||||
RKObjectMappingProvider *mappingProvider = [RKObjectMappingProvider mappingProvider];
|
||||
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[NSMutableArray class]];
|
||||
STAssertNoThrow([mappingProvider setMapping:mapping context:1], nil);
|
||||
}
|
||||
|
||||
- (void)testRetrievalOfMapping
|
||||
{
|
||||
RKObjectMappingProvider *mappingProvider = [RKObjectMappingProvider mappingProvider];
|
||||
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[NSMutableArray class]];
|
||||
[mappingProvider setMapping:mapping context:1];
|
||||
assertThat([mappingProvider mappingForContext:1], is(equalTo(mapping)));
|
||||
}
|
||||
|
||||
- (void)testRetrievalOfMappingsCollectionForUndefinedContextReturnsEmptyArray
|
||||
{
|
||||
RKObjectMappingProvider *mappingProvider = [RKObjectMappingProvider mappingProvider];
|
||||
NSArray *collection = [mappingProvider mappingsForContext:1];
|
||||
assertThat(collection, is(empty()));
|
||||
}
|
||||
|
||||
- (void)testRetrievalOfMappingsCollectionWhenSingleMappingIsStoredRaisesError
|
||||
{
|
||||
RKObjectMappingProvider *mappingProvider = [RKObjectMappingProvider mappingProvider];
|
||||
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[NSMutableArray class]];
|
||||
[mappingProvider setMapping:mapping context:1];
|
||||
STAssertThrows([mappingProvider mappingsForContext:1], @"Expected collection mapping retrieval to throw due to storage of single mapping");
|
||||
}
|
||||
|
||||
- (void)testAddingMappingToCollectionContext
|
||||
{
|
||||
RKObjectMappingProvider *mappingProvider = [RKObjectMappingProvider mappingProvider];
|
||||
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[NSMutableArray class]];
|
||||
STAssertNoThrow([mappingProvider addMapping:mapping context:1], nil);
|
||||
}
|
||||
|
||||
- (void)testRetrievalOfMappingCollection
|
||||
{
|
||||
RKObjectMappingProvider *mappingProvider = [RKObjectMappingProvider mappingProvider];
|
||||
RKObjectMapping *mapping_1 = [RKObjectMapping mappingForClass:[NSMutableArray class]];
|
||||
[mappingProvider addMapping:mapping_1 context:1];
|
||||
RKObjectMapping *mapping_2 = [RKObjectMapping mappingForClass:[NSMutableArray class]];
|
||||
[mappingProvider addMapping:mapping_2 context:1];
|
||||
NSArray *collection = [mappingProvider mappingsForContext:1];
|
||||
assertThat(collection, hasItems(mapping_1, mapping_2, nil));
|
||||
}
|
||||
|
||||
- (void)testRetrievalOfMappingCollectionReturnsImmutableArray
|
||||
{
|
||||
RKObjectMappingProvider *mappingProvider = [RKObjectMappingProvider mappingProvider];
|
||||
RKObjectMapping *mapping_1 = [RKObjectMapping mappingForClass:[NSMutableArray class]];
|
||||
[mappingProvider addMapping:mapping_1 context:1];
|
||||
RKObjectMapping *mapping_2 = [RKObjectMapping mappingForClass:[NSMutableArray class]];
|
||||
[mappingProvider addMapping:mapping_2 context:1];
|
||||
NSArray *collection = [mappingProvider mappingsForContext:1];
|
||||
assertThat(collection, isNot(instanceOf([NSMutableArray class])));
|
||||
}
|
||||
|
||||
- (void)testRemovalOfMappingFromCollection
|
||||
{
|
||||
RKObjectMappingProvider *mappingProvider = [RKObjectMappingProvider mappingProvider];
|
||||
RKObjectMapping *mapping_1 = [RKObjectMapping mappingForClass:[NSMutableArray class]];
|
||||
[mappingProvider addMapping:mapping_1 context:1];
|
||||
RKObjectMapping *mapping_2 = [RKObjectMapping mappingForClass:[NSMutableArray class]];
|
||||
[mappingProvider addMapping:mapping_2 context:1];
|
||||
[mappingProvider removeMapping:mapping_1 context:1];
|
||||
NSArray *collection = [mappingProvider mappingsForContext:1];
|
||||
assertThat(collection, onlyContains(mapping_2, nil));
|
||||
}
|
||||
|
||||
- (void)testAttemptToRemoveMappingFromContextThatDoesNotIncludeItRaisesError
|
||||
{
|
||||
RKObjectMappingProvider *mappingProvider = [RKObjectMappingProvider mappingProvider];
|
||||
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[NSMutableArray class]];
|
||||
STAssertThrows([mappingProvider removeMapping:mapping context:1], @"Removal of mapping not included in context should raise an error.");
|
||||
}
|
||||
|
||||
- (void)testSettingMappingForKeyPathInContext
|
||||
{
|
||||
RKObjectMappingProvider *mappingProvider = [RKObjectMappingProvider mappingProvider];
|
||||
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[NSMutableArray class]];
|
||||
STAssertNoThrow([mappingProvider setMapping:mapping forKeyPath:@"testing" context:1], nil);
|
||||
}
|
||||
|
||||
- (void)testRetrievalOfMappingForKeyPathInContext
|
||||
{
|
||||
RKObjectMappingProvider *mappingProvider = [RKObjectMappingProvider mappingProvider];
|
||||
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[NSMutableArray class]];
|
||||
[mappingProvider setMapping:mapping forKeyPath:@"testing" context:1];
|
||||
assertThat([mappingProvider mappingForKeyPath:@"testing" context:1], is(equalTo(mapping)));
|
||||
}
|
||||
|
||||
- (void)testRemovalOfMappingByKeyPathInContext
|
||||
{
|
||||
RKObjectMappingProvider *mappingProvider = [RKObjectMappingProvider mappingProvider];
|
||||
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[NSMutableArray class]];
|
||||
[mappingProvider setMapping:mapping forKeyPath:@"testing" context:1];
|
||||
[mappingProvider removeMappingForKeyPath:@"testing" context:1];
|
||||
assertThat([mappingProvider mappingForKeyPath:@"testing" context:1], is(nilValue()));
|
||||
}
|
||||
|
||||
- (void)testSettingMappingForPathMatcherCreatesOrderedDictionary
|
||||
{
|
||||
RKObjectMappingProvider *mappingProvider = [RKObjectMappingProvider mappingProvider];
|
||||
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[NSMutableArray class]];
|
||||
[mappingProvider setMapping:mapping forPattern:@"/articles/:id" context:1];
|
||||
id contextValue = [mappingProvider valueForContext:1];
|
||||
assertThat(contextValue, is(instanceOf([RKOrderedDictionary class])));
|
||||
}
|
||||
|
||||
- (void)testSettingMappingForPathMatcherCreatesDictionaryWithPathMatcherAsKey
|
||||
{
|
||||
RKObjectMappingProvider *mappingProvider = [RKObjectMappingProvider mappingProvider];
|
||||
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[NSMutableArray class]];
|
||||
[mappingProvider setMapping:mapping forPattern:@"/articles/:id" context:1];
|
||||
NSDictionary *contextValue = [mappingProvider valueForContext:1];
|
||||
assertThat([contextValue allKeys], contains(@"/articles/:id", nil));
|
||||
}
|
||||
|
||||
- (void)testSettingMappingForPathMatcherCreatesDictionaryWithMappingAsValue
|
||||
{
|
||||
RKObjectMappingProvider *mappingProvider = [RKObjectMappingProvider mappingProvider];
|
||||
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[NSMutableArray class]];
|
||||
RKObjectMappingProviderContextEntry *entry = [RKObjectMappingProviderContextEntry contextEntryWithMapping:mapping];
|
||||
[mappingProvider setMapping:mapping forPattern:@"/articles/:id" context:1];
|
||||
NSDictionary *contextValue = [mappingProvider valueForContext:1];
|
||||
assertThat([contextValue allValues], contains(entry, nil));
|
||||
}
|
||||
|
||||
- (void)testRetrievalOfMappingForPathMatcher
|
||||
{
|
||||
RKObjectMappingProvider *mappingProvider = [RKObjectMappingProvider mappingProvider];
|
||||
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[NSMutableArray class]];
|
||||
[mappingProvider setMapping:mapping forPattern:@"/articles/:id" context:1];
|
||||
|
||||
RKMapping *matchedMapping = [mappingProvider mappingForPatternMatchingString:@"/articles/12345" context:1];
|
||||
assertThat(matchedMapping, is(equalTo(mapping)));
|
||||
}
|
||||
|
||||
- (void)testRetrievalOfMappingForPathMatcherIncludingQueryParameters
|
||||
{
|
||||
RKObjectMappingProvider *mappingProvider = [RKObjectMappingProvider mappingProvider];
|
||||
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[NSMutableArray class]];
|
||||
[mappingProvider setMapping:mapping forPattern:@"/articles/:id" context:1];
|
||||
|
||||
RKMapping *matchedMapping = [mappingProvider mappingForPatternMatchingString:@"/articles/12345?page=5&this=that" context:1];
|
||||
assertThat(matchedMapping, is(equalTo(mapping)));
|
||||
}
|
||||
|
||||
- (void)testRetrievalOfMappingForPathMatcherWithMultipleEntries
|
||||
{
|
||||
RKObjectMappingProvider *mappingProvider = [RKObjectMappingProvider mappingProvider];
|
||||
|
||||
RKObjectMapping *mapping_2 = [RKObjectMapping mappingForClass:[NSMutableArray class]];
|
||||
[mappingProvider setMapping:mapping_2 forPattern:@"/articles/:id\\.json" context:1];
|
||||
|
||||
RKObjectMapping *mapping_3 = [RKObjectMapping mappingForClass:[NSMutableArray class]];
|
||||
[mappingProvider setMapping:mapping_3 forPattern:@"/articles/:id\\.xml" context:1];
|
||||
|
||||
RKObjectMapping *mapping_4 = [RKObjectMapping mappingForClass:[NSMutableArray class]];
|
||||
[mappingProvider setMapping:mapping_4 forPattern:@"/articles/:id/comments/:id" context:1];
|
||||
|
||||
RKObjectMapping *mapping_1 = [RKObjectMapping mappingForClass:[NSMutableArray class]];
|
||||
[mappingProvider setMapping:mapping_1 forPattern:@"/articles/:id" context:1];
|
||||
|
||||
// Test them
|
||||
assertThat([mappingProvider mappingForPatternMatchingString:@"/articles/12345" context:1], is(equalTo(mapping_1)));
|
||||
assertThat([mappingProvider mappingForPatternMatchingString:@"/articles/12345.json" context:1], is(equalTo(mapping_2)));
|
||||
assertThat([mappingProvider mappingForPatternMatchingString:@"/articles/12345.xml" context:1], is(equalTo(mapping_3)));
|
||||
assertThat([mappingProvider mappingForPatternMatchingString:@"/articles/12345/comments/3" context:1], is(equalTo(mapping_4)));
|
||||
}
|
||||
|
||||
- (void)testRetrievalOfMappingForPathMatcherWithEntriesInsertedByIndex
|
||||
{
|
||||
RKObjectMappingProvider *mappingProvider = [RKObjectMappingProvider mappingProvider];
|
||||
|
||||
RKObjectMapping *mapping_2 = [RKObjectMapping mappingForClass:[NSMutableArray class]];
|
||||
[mappingProvider setMapping:mapping_2 forPattern:@"/articles/:id\\.json" atIndex:0 context:1];
|
||||
|
||||
RKObjectMapping *mapping_3 = [RKObjectMapping mappingForClass:[NSMutableArray class]];
|
||||
[mappingProvider setMapping:mapping_3 forPattern:@"/articles/:id\\.xml" atIndex:0 context:1];
|
||||
|
||||
RKObjectMapping *mapping_4 = [RKObjectMapping mappingForClass:[NSMutableArray class]];
|
||||
[mappingProvider setMapping:mapping_4 forPattern:@"/articles/:id/comments/:id" atIndex:1 context:1];
|
||||
|
||||
RKObjectMapping *mapping_1 = [RKObjectMapping mappingForClass:[NSMutableArray class]];
|
||||
[mappingProvider setMapping:mapping_1 forPattern:@"/articles/:id" atIndex:3 context:1];
|
||||
|
||||
// Test them
|
||||
assertThat([mappingProvider mappingForPatternMatchingString:@"/articles/12345" context:1], is(equalTo(mapping_1)));
|
||||
assertThat([mappingProvider mappingForPatternMatchingString:@"/articles/12345.json" context:1], is(equalTo(mapping_2)));
|
||||
assertThat([mappingProvider mappingForPatternMatchingString:@"/articles/12345.xml" context:1], is(equalTo(mapping_3)));
|
||||
assertThat([mappingProvider mappingForPatternMatchingString:@"/articles/12345/comments/3" context:1], is(equalTo(mapping_4)));
|
||||
}
|
||||
|
||||
- (void)testRetrievalOfEntryForPathMatcher
|
||||
{
|
||||
RKObjectMappingProvider *mappingProvider = [RKObjectMappingProvider mappingProvider];
|
||||
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[NSMutableArray class]];
|
||||
RKObjectMappingProviderContextEntry *entry = [RKObjectMappingProviderContextEntry contextEntryWithMapping:mapping];
|
||||
[mappingProvider setEntry:entry forPattern:@"/articles/:id" context:1];
|
||||
|
||||
RKObjectMappingProviderContextEntry *matchingEntry = [mappingProvider entryForPatternMatchingString:@"/articles/12345"
|
||||
context:1];
|
||||
assertThat(matchingEntry, is(equalTo(entry)));
|
||||
}
|
||||
|
||||
- (void)testRetrievalOfEntryForPathMatcherIncludingQueryParameters
|
||||
{
|
||||
RKObjectMappingProvider *mappingProvider = [RKObjectMappingProvider mappingProvider];
|
||||
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[NSMutableArray class]];
|
||||
RKObjectMappingProviderContextEntry *entry = [RKObjectMappingProviderContextEntry contextEntryWithMapping:mapping];
|
||||
[mappingProvider setEntry:entry forPattern:@"/articles/:id" context:1];
|
||||
|
||||
RKObjectMappingProviderContextEntry *matchingEntry = [mappingProvider entryForPatternMatchingString:@"/articles/12345?page=5&this=that"
|
||||
context:1];
|
||||
assertThat(matchingEntry, is(equalTo(entry)));
|
||||
}
|
||||
|
||||
@end
|
||||
Reference in New Issue
Block a user