Skip to content

Commit a723c92

Browse files
committed
SDK-777 switch to NSError
1 parent d259001 commit a723c92

File tree

6 files changed

+62
-41
lines changed

6 files changed

+62
-41
lines changed

Branch-SDK-Tests/BNCCallbackMapTests.m

Lines changed: 47 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
#import <XCTest/XCTest.h>
1010
#import "BNCCallbackMap.h"
11+
#import "NSError+Branch.h"
1112

1213
// expose private storage object for state checks
1314
@interface BNCCallbackMap()
@@ -28,42 +29,67 @@ - (void)tearDown {
2829
// Put teardown code here. This method is called after the invocation of each test method in the class.
2930
}
3031

31-
- (void)testSingleSave {
32+
- (void)testRequestSaveAndCallback {
3233
BNCCallbackMap *map = [BNCCallbackMap new];
3334

3435
__block BOOL successResult = NO;
35-
__block NSString *statusMessageResult = @"no callback";
36+
__block NSError *errorResult = nil;
3637

3738
// store a request and callback block
3839
BNCServerRequest *request = [BNCServerRequest new];
39-
[map storeRequest:request withCompletion:^(BOOL success, NSString * _Nonnull statusMessage) {
40+
[map storeRequest:request withCompletion:^(BOOL success, NSError * _Nullable error) {
4041
successResult = success;
41-
statusMessageResult = statusMessage;
42+
errorResult = error;
4243
}];
4344

4445
// confirm there's one entry
4546
XCTAssert([map containsRequest:request] != NO);
4647
XCTAssert(map.callbacks.count == 1);
4748

4849
// call callback
49-
[map callCompletionForRequest:request withSuccessStatus:YES message:@"callback"];
50+
[map callCompletionForRequest:request withSuccessStatus:YES error:nil];
5051

5152
// check if variable was updated
5253
XCTAssertTrue(successResult);
53-
XCTAssert([@"callback" isEqualToString:statusMessageResult]);
54+
XCTAssertNil(errorResult);
5455
}
5556

56-
- (void)testDeletedRequest {
57+
- (void)testRequestSaveAndCallbackWithError {
5758
BNCCallbackMap *map = [BNCCallbackMap new];
5859

59-
__block BOOL successResult = NO;
60-
__block NSString *statusMessageResult = @"no callback";
60+
__block BOOL successResult = YES;
61+
__block NSError *errorResult = nil;
62+
63+
// store a request and callback block
64+
BNCServerRequest *request = [BNCServerRequest new];
65+
[map storeRequest:request withCompletion:^(BOOL success, NSError * _Nullable error) {
66+
successResult = success;
67+
errorResult = error;
68+
}];
69+
70+
// confirm there's one entry
71+
XCTAssert([map containsRequest:request] != NO);
72+
XCTAssert(map.callbacks.count == 1);
73+
74+
// call callback
75+
[map callCompletionForRequest:request withSuccessStatus:NO error:[NSError branchErrorWithCode:BNCGeneralError localizedMessage:@"Test Error"]];
6176

77+
// check if variable was updated
78+
XCTAssertFalse(successResult);
79+
XCTAssert([@"Test Error" isEqualToString:errorResult.localizedFailureReason]);
80+
}
81+
82+
- (void)testAttemptCallbackWithUnsavedRequest {
83+
BNCCallbackMap *map = [BNCCallbackMap new];
84+
85+
__block BOOL successResult = NO;
86+
__block NSError *errorResult = nil;
87+
6288
// store a request and callback block
6389
BNCServerRequest *request = [BNCServerRequest new];
64-
[map storeRequest:request withCompletion:^(BOOL success, NSString * _Nonnull statusMessage) {
90+
[map storeRequest:request withCompletion:^(BOOL success, NSError * _Nullable error) {
6591
successResult = success;
66-
statusMessageResult = statusMessage;
92+
errorResult = error;
6793
}];
6894

6995
// confirm there's one entry
@@ -73,34 +99,35 @@ - (void)testDeletedRequest {
7399
// confirm a new request results in no callback
74100
request = [BNCServerRequest new];
75101
XCTAssert([map containsRequest:request] == NO);
76-
[map callCompletionForRequest:request withSuccessStatus:YES message:@"callback"];
77-
102+
[map callCompletionForRequest:request withSuccessStatus:YES error:nil];
103+
78104
// check if variable was updated
79105
XCTAssertFalse(successResult);
80-
XCTAssert([@"no callback" isEqualToString:statusMessageResult]);
106+
XCTAssertNil(errorResult);
81107
}
82108

83-
- (void)testSeveralBlocks {
109+
- (void)testRequestsGetReleasedAutomatically {
84110
BNCCallbackMap *map = [BNCCallbackMap new];
85111

86112
__block int count = 0;
87113

88114
BNCServerRequest *request = [BNCServerRequest new];
89-
[map storeRequest:request withCompletion:^(BOOL success, NSString * _Nonnull statusMessage) {
115+
[map storeRequest:request withCompletion:^(BOOL success, NSError * _Nullable error) {
90116
count++;
91117
}];
92118

93119
for (int i=0; i<100; i++) {
94120
BNCServerRequest *tmp = [BNCServerRequest new];
95-
[map storeRequest:tmp withCompletion:^(BOOL success, NSString * _Nonnull statusMessage) {
96-
count++;
121+
[map storeRequest:tmp withCompletion:^(BOOL success, NSError * _Nullable error) {
122+
count++;
97123
}];
98124
}
99125

100-
// confirm there's less than 100 entries. By not retaining the tmp request, they should be getting ARC'd
126+
// confirm there's less than 100 entries. By not retaining the tmp request, they should be getting ARC'd
101127
XCTAssert(map.callbacks.count < 100);
102128

103-
[map callCompletionForRequest:request withSuccessStatus:YES message:@"callback"];
129+
// confirm the one request we held does get a callback
130+
[map callCompletionForRequest:request withSuccessStatus:YES error:nil];
104131
XCTAssert(count == 1);
105132
}
106133

Branch-SDK/Branch-SDK/BNCCallbackMap.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@ NS_ASSUME_NONNULL_BEGIN
1515

1616
+ (instancetype)shared;
1717

18-
- (void)storeRequest:(BNCServerRequest *)request withCompletion:(void (^_Nullable)(BOOL success, NSString *statusMessage))completion;
18+
- (void)storeRequest:(BNCServerRequest *)request withCompletion:(void (^_Nullable)(BOOL success, NSError * _Nullable error))completion;
1919

2020
- (BOOL)containsRequest:(BNCServerRequest *)request;
2121

22-
- (void)callCompletionForRequest:(BNCServerRequest *)request withSuccessStatus:(BOOL)status message:(NSString *)statusMessage;
22+
- (void)callCompletionForRequest:(BNCServerRequest *)request withSuccessStatus:(BOOL)status error:(nullable NSError *)error;
2323

2424
@end
2525

Branch-SDK/Branch-SDK/BNCCallbackMap.m

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ - (instancetype)init {
3535
return self;
3636
}
3737

38-
- (void)storeRequest:(BNCServerRequest *)request withCompletion:(void (^_Nullable)(BOOL success, NSString *statusMessage))completion {
38+
- (void)storeRequest:(BNCServerRequest *)request withCompletion:(void (^_Nullable)(BOOL success, NSError * _Nullable error))completion {
3939
[self.callbacks setObject:completion forKey:request];
4040
}
4141

@@ -47,10 +47,10 @@ - (BOOL)containsRequest:(BNCServerRequest *)request {
4747
return contains;
4848
}
4949

50-
- (void)callCompletionForRequest:(BNCServerRequest *)request withSuccessStatus:(BOOL)status message:(NSString *)statusMessage {
51-
void (^completion)(BOOL, NSString *) = [self.callbacks objectForKey:request];
50+
- (void)callCompletionForRequest:(BNCServerRequest *)request withSuccessStatus:(BOOL)status error:(nullable NSError *)error {
51+
void (^completion)(BOOL, NSError * _Nullable) = [self.callbacks objectForKey:request];
5252
if (completion) {
53-
completion(status, statusMessage);
53+
completion(status, error);
5454
}
5555
}
5656

Branch-SDK/Branch-SDK/Branch.m

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1877,15 +1877,7 @@ - (void) processRequest:(BNCServerRequest*)req
18771877
BNCPerformBlockOnMainThreadSync(^{
18781878
[req processResponse:response error:error];
18791879
if ([req isKindOfClass:[BranchEventRequest class]]) {
1880-
if (error) {
1881-
NSString *message = @"Error: server returned an error";
1882-
if (error.description) {
1883-
message = [NSString stringWithFormat:@"Error: %@", error.description];
1884-
}
1885-
[[BNCCallbackMap shared] callCompletionForRequest:req withSuccessStatus:NO message:message];
1886-
} else {
1887-
[[BNCCallbackMap shared] callCompletionForRequest:req withSuccessStatus:YES message:@"Success"];
1888-
}
1880+
[[BNCCallbackMap shared] callCompletionForRequest:req withSuccessStatus:(error == nil) error:error];
18891881
}
18901882
});
18911883

@@ -1925,8 +1917,8 @@ - (void) processRequest:(BNCServerRequest*)req
19251917

19261918
// BranchEventRequests can have callbacks directly tied to them.
19271919
if ([request isKindOfClass:[BranchEventRequest class]]) {
1928-
NSString *message = @"Error: server returned an error. Cancelling queued network requests";
1929-
[[BNCCallbackMap shared] callCompletionForRequest:request withSuccessStatus:NO message:message];
1920+
NSError *error = [NSError branchErrorWithCode:BNCGeneralError localizedMessage:@"Cancelling queued network requests due to a previous network error."];
1921+
[[BNCCallbackMap shared] callCompletionForRequest:req withSuccessStatus:NO error:error];
19301922
}
19311923
});
19321924
}

Branch-SDK/Branch-SDK/BranchEvent.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ typedef NS_ENUM(NSInteger, BranchEventAdType) {
9191
/**
9292
Logs the event on the Branch server. This version will callback on success/failure.
9393
*/
94-
- (void)logEventWithCompletion:(void (^_Nullable)(BOOL success, NSString * _Nullable statusMessage))completion;
94+
- (void)logEventWithCompletion:(void (^_Nullable)(BOOL success, NSError * _Nullable error))completion;
9595

9696
- (void) logEvent; //!< Logs the event on the Branch server. This version automatically caches and retries as necessary.
9797
- (NSDictionary*_Nonnull) dictionary; //!< Returns a dictionary representation of the event.

Branch-SDK/Branch-SDK/BranchEvent.m

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -222,19 +222,21 @@ - (NSDictionary*) dictionary {
222222
];
223223
}
224224

225-
- (void)logEventWithCompletion:(void (^_Nullable)(BOOL success, NSString *statusMessage))completion {
225+
- (void)logEventWithCompletion:(void (^_Nullable)(BOOL success, NSError * _Nullable error))completion {
226226
if (![_eventName isKindOfClass:[NSString class]] || _eventName.length == 0) {
227227
BNCLogError(@"Invalid event type '%@' or empty string.", NSStringFromClass(_eventName.class));
228228
if (completion) {
229-
completion(NO, @"Error: Invalid event type");
229+
NSError *error = [NSError branchErrorWithCode:BNCGeneralError localizedMessage: @"Invalid event type"];
230+
completion(NO, error);
230231
}
231232
return;
232233
}
233234

234235
// logEvent requests without a completion are automatically retried later
235236
if (completion != nil && [[BNCReachability shared] reachabilityStatus] == nil) {
236237
if (completion) {
237-
completion(NO, @"Error: No connectivity");
238+
NSError *error = [NSError branchErrorWithCode:BNCGeneralError localizedMessage: @"No connectivity"];
239+
completion(NO, error);
238240
}
239241
return;
240242
}

0 commit comments

Comments
 (0)