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
0 commit comments