forked from parse-community/Parse-SDK-iOS-OSX
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCommandUnitTests.m
123 lines (101 loc) · 5.28 KB
/
CommandUnitTests.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/**
* Copyright (c) 2015-present, Parse, LLC.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
#import "BFTask+Private.h"
#import "PFHTTPRequest.h"
#import "PFJSONSerialization.h"
#import "PFMockURLProtocol.h"
#import "PFRESTCommand.h"
#import "PFURLSessionCommandRunner.h"
#import "PFUnitTestCase.h"
#import "Parse_Private.h"
@interface CommandUnitTests : PFUnitTestCase
@end
@implementation CommandUnitTests
///--------------------------------------
#pragma mark - XCTestCase
///--------------------------------------
- (void)setUp {
[super setUp];
[Parse _currentManager].commandRunner.initialRetryDelay = 0.001;
}
///--------------------------------------
#pragma mark - Tests
///--------------------------------------
- (void)testNoRetryOn400StatusCode {
__block NSUInteger retryCount = 0;
[PFMockURLProtocol mockRequestsWithResponse:^PFMockURLResponse *(NSURLRequest *request) {
retryCount++;
NSDictionary *response = @{ @"error" : @"yarr",
@"code" : @100500 };
NSString *json = [PFJSONSerialization stringFromJSONObject:response];
return [PFMockURLResponse responseWithString:json statusCode:400 delay:0.0];
}];
PFRESTCommand *command = [PFRESTCommand commandWithHTTPPath:@"login"
httpMethod:PFHTTPRequestMethodPOST
parameters:nil
sessionToken:nil];
NSError *error = nil;
PFURLSessionCommandRunner *commandRunner = [PFURLSessionCommandRunner commandRunnerWithDataSource:[Parse _currentManager]
applicationId:[Parse getApplicationId]
clientKey:[Parse getClientKey]];
[[commandRunner runCommandAsync:command
withOptions:PFCommandRunningOptionRetryIfFailed] waitForResult:&error];
XCTAssertEqualObjects(@"yarr", error.userInfo[@"error"]);
XCTAssertEqual(100500, error.code);
XCTAssertEqual(retryCount, 1);
[PFMockURLProtocol removeAllMocking];
}
- (void)testRetryOn500StatusCode {
__block NSUInteger retryCount = 0;
[PFMockURLProtocol mockRequestsWithResponse:^PFMockURLResponse *(NSURLRequest *request) {
retryCount++;
NSDictionary *response = @{ @"error" : @"yarr",
@"code" : @100500 };
NSString *json = [PFJSONSerialization stringFromJSONObject:response];
return [PFMockURLResponse responseWithString:json statusCode:500 delay:0.0];
}];
PFRESTCommand *command = [PFRESTCommand commandWithHTTPPath:@"login"
httpMethod:PFHTTPRequestMethodPOST
parameters:nil
sessionToken:nil];
NSError *error = nil;
PFURLSessionCommandRunner *commandRunner = [PFURLSessionCommandRunner commandRunnerWithDataSource:[Parse _currentManager]
applicationId:[Parse getApplicationId]
clientKey:[Parse getClientKey]];
commandRunner.initialRetryDelay = DBL_MIN;
[[commandRunner runCommandAsync:command
withOptions:PFCommandRunningOptionRetryIfFailed] waitForResult:&error];
XCTAssertEqualObjects(@"yarr", error.userInfo[@"error"]);
XCTAssertEqual(100500, error.code);
XCTAssertEqual(retryCount, 5);
[PFMockURLProtocol removeAllMocking];
}
- (void)testCacheKeysFromCommand {
NSMutableDictionary *orderedDict = [NSMutableDictionary dictionary];
for (int i = 1; i <= 30; ++i) {
[orderedDict setObject:[NSString stringWithFormat:@"value%d", i]
forKey:[NSString stringWithFormat:@"key%d", i]];
}
PFRESTCommand *orderedCommand = [PFRESTCommand commandWithHTTPPath:@"foo"
httpMethod:PFHTTPRequestMethodGET
parameters:orderedDict
sessionToken:nil];
NSMutableDictionary *reversedDict = [NSMutableDictionary dictionary];
for (int i = 30; i >= 1; --i) {
[reversedDict setObject:[NSString stringWithFormat:@"value%d", i]
forKey:[NSString stringWithFormat:@"key%d", i]];
}
PFRESTCommand *reversedCommand = [PFRESTCommand commandWithHTTPPath:@"foo"
httpMethod:PFHTTPRequestMethodGET
parameters:reversedDict
sessionToken:nil];
XCTAssertEqualObjects(orderedCommand.cacheKey, reversedCommand.cacheKey,
@"identifiers should be invariant to dictionary key orders");
}
@end