Skip to content

Commit 0beb66f

Browse files
committed
Refactor REST API tests to use block-based patterns
- Remove SFNativeRestRequestListener and create SFRestAPITestResponse class - Refactor tests to use XCTestExpectation instead of custom listeners - Fix forceTimeoutRequest double callback bug in SFRestAPI.m - Add SFRestAPITestDelegate helper for delegate-based API testing
1 parent 61e2236 commit 0beb66f

File tree

7 files changed

+522
-606
lines changed

7 files changed

+522
-606
lines changed

libs/SalesforceSDKCore/SalesforceSDKCore.xcodeproj/project.pbxproj

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -430,9 +430,6 @@
430430
CED452C21D808D0C009266EB /* SFRestRequest+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = CED452B41D808D0C009266EB /* SFRestRequest+Internal.h */; };
431431
CED452C31D808D0C009266EB /* SFRestRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = CED452B51D808D0C009266EB /* SFRestRequest.h */; settings = {ATTRIBUTES = (Public, ); }; };
432432
CED452C41D808D0C009266EB /* SFRestRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = CED452B61D808D0C009266EB /* SFRestRequest.m */; };
433-
CED452EB1D808DEE009266EB /* SalesforceRestAPITests.h in Headers */ = {isa = PBXBuildFile; fileRef = CED452E71D808DEE009266EB /* SalesforceRestAPITests.h */; };
434-
CED452ED1D808DEE009266EB /* SFNativeRestRequestListener.h in Headers */ = {isa = PBXBuildFile; fileRef = CED452E91D808DEE009266EB /* SFNativeRestRequestListener.h */; };
435-
CED452EF1D808E0A009266EB /* SFNativeRestRequestListener.m in Sources */ = {isa = PBXBuildFile; fileRef = CED452EA1D808DEE009266EB /* SFNativeRestRequestListener.m */; };
436433
CED452F01D808E0F009266EB /* SalesforceRestAPITests.m in Sources */ = {isa = PBXBuildFile; fileRef = CED452E81D808DEE009266EB /* SalesforceRestAPITests.m */; };
437434
D3B1519F2E1DA6EB00914EF1 /* AuthCoordinatorFrontdoorBridgeLoginOverride.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3B1519E2E1DA6EB00914EF1 /* AuthCoordinatorFrontdoorBridgeLoginOverride.swift */; };
438435
D3D675DB2D39EF01008E468E /* ChatGenerationsRequestBody.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3D675CF2D39EF01008E468E /* ChatGenerationsRequestBody.swift */; };
@@ -980,10 +977,7 @@
980977
CED452B41D808D0C009266EB /* SFRestRequest+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "SFRestRequest+Internal.h"; sourceTree = "<group>"; };
981978
CED452B51D808D0C009266EB /* SFRestRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SFRestRequest.h; sourceTree = "<group>"; };
982979
CED452B61D808D0C009266EB /* SFRestRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SFRestRequest.m; sourceTree = "<group>"; };
983-
CED452E71D808DEE009266EB /* SalesforceRestAPITests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SalesforceRestAPITests.h; path = SalesforceSDKCoreTests/SalesforceRestAPITests.h; sourceTree = SOURCE_ROOT; };
984980
CED452E81D808DEE009266EB /* SalesforceRestAPITests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SalesforceRestAPITests.m; path = SalesforceSDKCoreTests/SalesforceRestAPITests.m; sourceTree = SOURCE_ROOT; };
985-
CED452E91D808DEE009266EB /* SFNativeRestRequestListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SFNativeRestRequestListener.h; path = SalesforceSDKCoreTests/SFNativeRestRequestListener.h; sourceTree = SOURCE_ROOT; };
986-
CED452EA1D808DEE009266EB /* SFNativeRestRequestListener.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SFNativeRestRequestListener.m; path = SalesforceSDKCoreTests/SFNativeRestRequestListener.m; sourceTree = SOURCE_ROOT; };
987981
D3B1519E2E1DA6EB00914EF1 /* AuthCoordinatorFrontdoorBridgeLoginOverride.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthCoordinatorFrontdoorBridgeLoginOverride.swift; sourceTree = "<group>"; };
988982
D3D675CF2D39EF01008E468E /* ChatGenerationsRequestBody.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatGenerationsRequestBody.swift; sourceTree = "<group>"; };
989983
D3D675D02D39EF01008E468E /* ChatGenerationsResponseBody.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatGenerationsResponseBody.swift; sourceTree = "<group>"; };
@@ -1084,7 +1078,6 @@
10841078
4F06AF601C49A16A00F70798 /* SalesforceOAuthUnitTests.m */,
10851079
4F06AF611C49A16A00F70798 /* SalesforceOAuthUnitTestsCoordinatorDelegate.h */,
10861080
4F06AF621C49A16A00F70798 /* SalesforceOAuthUnitTestsCoordinatorDelegate.m */,
1087-
CED452E71D808DEE009266EB /* SalesforceRestAPITests.h */,
10881081
CED452E81D808DEE009266EB /* SalesforceRestAPITests.m */,
10891082
B7156B8722DE3603003AB69D /* SalesforceSDKCoreTests-Bridging-Header.h */,
10901083
4F06AF651C49A16A00F70798 /* SalesforceSDKIdentityTests.m */,
@@ -1098,8 +1091,6 @@
10981091
010A9B521CC1A131002AF4D3 /* SFCryptoStreamTestUtils.m */,
10991092
4F7EB3F81BFFC87600768720 /* SFEncryptionKeyTests.m */,
11001093
B7352CA422761D8400DA2CFF /* SFManagedPreferencesTest.m */,
1101-
CED452E91D808DEE009266EB /* SFNativeRestRequestListener.h */,
1102-
CED452EA1D808DEE009266EB /* SFNativeRestRequestListener.m */,
11031094
69CEBC7D22F368CF00F16218 /* SFNetworkTests.m */,
11041095
4F3ECD892EBBD150005020A6 /* SFOAuthCoordinatorTests.m */,
11051096
23EED8892E2ACD3300646B10 /* SFOAuthCoordinatorTests.swift */,
@@ -1845,7 +1836,6 @@
18451836
CE4CE3501C0E5252009F6029 /* SFOAuthSessionRefresher+Internal.h in Headers */,
18461837
B7FB26DA1F78096300FB25A2 /* SFSDKIDPErrorHandler.h in Headers */,
18471838
CE4CE3451C0E5252009F6029 /* SFOAuthCredentials+Internal.h in Headers */,
1848-
CED452ED1D808DEE009266EB /* SFNativeRestRequestListener.h in Headers */,
18491839
CE4CE3431C0E5252009F6029 /* SFOAuthCoordinator.h in Headers */,
18501840
B7C5125920C188AE00B39DAA /* SFSDKViewController.h in Headers */,
18511841
B7895D192345304800765D85 /* SFSDKCompositeResponse.h in Headers */,
@@ -1891,7 +1881,6 @@
18911881
697A91A02363C3D800D2836F /* SFSDKPushNotificationDecryption.h in Headers */,
18921882
B7E8A2A51E7369DB007C0D92 /* SFDefaultUserAccountPersister.h in Headers */,
18931883
CE4CE3941C0E526A009F6029 /* SFUserAccountManager+Internal.h in Headers */,
1894-
CED452EB1D808DEE009266EB /* SalesforceRestAPITests.h in Headers */,
18951884
4F06AF731C49A16A00F70798 /* NSURL+SFStringUtilsTests.h in Headers */,
18961885
69EA56CB264B1FAA007FE339 /* SFSDKMacDetectUtil.h in Headers */,
18971886
B7895D0D2345015B00765D85 /* SFSDKCompositeRequest.h in Headers */,
@@ -2309,7 +2298,6 @@
23092298
4F06AF8B1C49A18E00F70798 /* SalesforceOAuthUnitTestsCoordinatorDelegate.m in Sources */,
23102299
69DFE06B2B969C22000906E4 /* CryptoUtilsTests.swift in Sources */,
23112300
237C18732E450B710008015C /* DecryptStreamTests.swift in Sources */,
2312-
CED452EF1D808E0A009266EB /* SFNativeRestRequestListener.m in Sources */,
23132301
230834862DF8938D00C7CBF7 /* URLSessionTask+RetryPolicyTests.swift in Sources */,
23142302
4FDEVINFO001234567890ABCD /* DevInfoViewControllerTests.swift in Sources */,
23152303
);

libs/SalesforceSDKCore/SalesforceSDKCore/Classes/RestAPI/SFRestAPI.m

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -205,9 +205,7 @@ - (BOOL)forceTimeoutRequest:(SFRestRequest *)req {
205205
SFRestRequest *toCancel = (nil != req ? req : [self.activeRequests anyObject]);
206206
if (nil != toCancel) {
207207
found = YES;
208-
if (req.failureBlock) {
209-
req.failureBlock(nil, nil, nil);
210-
}
208+
// Cancel the request - this will trigger the failureBlock via the network error callback
211209
[toCancel cancel];
212210
}
213211
return found;

libs/SalesforceSDKCore/SalesforceSDKCoreTests/SFNativeRestRequestListener.h

Lines changed: 0 additions & 37 deletions
This file was deleted.

libs/SalesforceSDKCore/SalesforceSDKCoreTests/SFNativeRestRequestListener.m

Lines changed: 0 additions & 81 deletions
This file was deleted.

libs/SalesforceSDKCore/SalesforceSDKCoreTests/SFSDKURLCacheTests.m

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,16 @@
2727
#import "SFSDKEncryptedURLCache.h"
2828
#import "SFSDKNullURLCache.h"
2929
#import "SFRestAPI.h"
30-
#import "SFNativeRestRequestListener.h"
3130
#import "SFNetwork.h"
3231
#import "SalesforceSDKManager.h"
3332
#import <SalesforceSDKCore/SFDirectoryManager.h>
3433
#import <SalesforceSDKCore/TestSetupUtils.h>
3534
#import "SFSDKTestCredentialsData.h"
35+
#import "SFSDKTestRequestListener.h"
3636
#import "SFRestAPI+Blocks.h"
3737
#import "SFRestRequest+Internal.h"
3838
#import "SalesforceSDKCore/SalesforceSDKCore-Swift.h"
39-
39+
#import "SFSDKTestRequestListener.h"
4040

4141
@interface SFRestAPI (Testing)
4242

@@ -315,23 +315,31 @@ - (void)testUrlWithoutSubdomain {
315315
}
316316

317317
- (void)sendRequest:(SFRestRequest *)request {
318-
SFSDKTestRequestListener *listener = [[SFSDKTestRequestListener alloc] init];
318+
__block NSData *responseData = nil;
319+
__block NSError *responseError = nil;
320+
__block NSString *status = kTestRequestStatusWaiting;
321+
322+
XCTestExpectation *expectation = [self expectationWithDescription:@"REST request completed"];
323+
319324
SFRestRequestFailBlock failBlock = ^(id response, NSError *error, NSURLResponse *rawResponse) {
320-
listener.lastError = error;
321-
listener.returnStatus = kTestRequestStatusDidFail;
325+
responseError = error;
326+
status = kTestRequestStatusDidFail;
327+
[expectation fulfill];
322328
};
323329

324330
// Use SFRestDataResponseBlock for binary data (images) instead of dictionary response
325331
SFRestDataResponseBlock completeBlock = ^(NSData *data, NSURLResponse *rawResponse) {
326-
listener.dataResponse = data;
327-
listener.returnStatus = kTestRequestStatusDidLoad;
332+
responseData = data;
333+
status = kTestRequestStatusDidLoad;
334+
[expectation fulfill];
328335
};
329336

330337
[[SFRestAPI sharedGlobalInstance] sendRequest:request
331338
failureBlock:failBlock
332339
successBlock:completeBlock];
333-
[listener waitForCompletion];
334-
XCTAssertEqualObjects(listener.returnStatus, kTestRequestStatusDidLoad, @"request failed");
340+
341+
[self waitForExpectations:@[expectation] timeout:30.0];
342+
XCTAssertEqualObjects(status, kTestRequestStatusDidLoad, @"request failed");
335343
}
336344

337345
@end

libs/SalesforceSDKCore/SalesforceSDKCoreTests/SalesforceRestAPITests.h

Lines changed: 0 additions & 29 deletions
This file was deleted.

0 commit comments

Comments
 (0)