Skip to content

Commit 8dd9bbc

Browse files
committed
Changed identity test to check the parsing of a row response (instead of doing the actual call to the server which was flapping)
1 parent a1d8029 commit 8dd9bbc

File tree

4 files changed

+63
-167
lines changed

4 files changed

+63
-167
lines changed

libs/SalesforceSDKCore/SalesforceSDKCore.xcodeproj/project.pbxproj

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@
5959
4F06AF731C49A16A00F70798 /* NSURL+SFStringUtilsTests.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F06AF5D1C49A16A00F70798 /* NSURL+SFStringUtilsTests.h */; };
6060
4F06AF751C49A16A00F70798 /* SalesforceOAuthUnitTests.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F06AF5F1C49A16A00F70798 /* SalesforceOAuthUnitTests.h */; };
6161
4F06AF771C49A16A00F70798 /* SalesforceOAuthUnitTestsCoordinatorDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F06AF611C49A16A00F70798 /* SalesforceOAuthUnitTestsCoordinatorDelegate.h */; };
62-
4F06AF7A1C49A16A00F70798 /* SalesforceSDKIdentityTests.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F06AF641C49A16A00F70798 /* SalesforceSDKIdentityTests.h */; };
6362
4F06AF811C49A16A00F70798 /* SFOAuthTestFlowCoordinatorDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F06AF6B1C49A16A00F70798 /* SFOAuthTestFlowCoordinatorDelegate.h */; };
6463
4F06AF861C49A16A00F70798 /* SFTestSDKManagerFlow.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F06AF701C49A16A00F70798 /* SFTestSDKManagerFlow.h */; };
6564
4F06AF891C49A18E00F70798 /* NSURL+SFStringUtilsTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F06AF5E1C49A16A00F70798 /* NSURL+SFStringUtilsTests.m */; };
@@ -591,7 +590,6 @@
591590
4F06AF601C49A16A00F70798 /* SalesforceOAuthUnitTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SalesforceOAuthUnitTests.m; path = SalesforceSDKCoreTests/SalesforceOAuthUnitTests.m; sourceTree = SOURCE_ROOT; };
592591
4F06AF611C49A16A00F70798 /* SalesforceOAuthUnitTestsCoordinatorDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SalesforceOAuthUnitTestsCoordinatorDelegate.h; path = SalesforceSDKCoreTests/SalesforceOAuthUnitTestsCoordinatorDelegate.h; sourceTree = SOURCE_ROOT; };
593592
4F06AF621C49A16A00F70798 /* SalesforceOAuthUnitTestsCoordinatorDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SalesforceOAuthUnitTestsCoordinatorDelegate.m; path = SalesforceSDKCoreTests/SalesforceOAuthUnitTestsCoordinatorDelegate.m; sourceTree = SOURCE_ROOT; };
594-
4F06AF641C49A16A00F70798 /* SalesforceSDKIdentityTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SalesforceSDKIdentityTests.h; path = SalesforceSDKCoreTests/SalesforceSDKIdentityTests.h; sourceTree = SOURCE_ROOT; };
595593
4F06AF651C49A16A00F70798 /* SalesforceSDKIdentityTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SalesforceSDKIdentityTests.m; path = SalesforceSDKCoreTests/SalesforceSDKIdentityTests.m; sourceTree = SOURCE_ROOT; };
596594
4F06AF661C49A16A00F70798 /* SalesforceSDKManagerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SalesforceSDKManagerTests.m; path = SalesforceSDKCoreTests/SalesforceSDKManagerTests.m; sourceTree = SOURCE_ROOT; };
597595
4F06AF681C49A16A00F70798 /* SFOAuthSessionRefresherTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SFOAuthSessionRefresherTests.m; path = SalesforceSDKCoreTests/SFOAuthSessionRefresherTests.m; sourceTree = SOURCE_ROOT; };
@@ -1089,7 +1087,6 @@
10891087
CED452E71D808DEE009266EB /* SalesforceRestAPITests.h */,
10901088
CED452E81D808DEE009266EB /* SalesforceRestAPITests.m */,
10911089
B7156B8722DE3603003AB69D /* SalesforceSDKCoreTests-Bridging-Header.h */,
1092-
4F06AF641C49A16A00F70798 /* SalesforceSDKIdentityTests.h */,
10931090
4F06AF651C49A16A00F70798 /* SalesforceSDKIdentityTests.m */,
10941091
4F06AF661C49A16A00F70798 /* SalesforceSDKManagerTests.m */,
10951092
4F5A49572E98B0F800C89DDD /* ScopeParserTests.swift */,
@@ -1962,7 +1959,6 @@
19621959
CE4CE34A1C0E5252009F6029 /* SFOAuthInfo.h in Headers */,
19631960
B72171522353BFD90022510F /* SFSDKAuthSession.h in Headers */,
19641961
CE4CE36A1C0E526A009F6029 /* SFDefaultUserManagementViewController.h in Headers */,
1965-
4F06AF7A1C49A16A00F70798 /* SalesforceSDKIdentityTests.h in Headers */,
19661962
B7FB26C21F78094A00FB25A2 /* SFSDKLoginFlowSelectionView.h in Headers */,
19671963
B7FB26DE1F78096300FB25A2 /* SFSDKIDPRequestHandler.h in Headers */,
19681964
B7C2744E1F814E7200CE539D /* SFSDKAuthCommand+Internal.h in Headers */,

libs/SalesforceSDKCore/SalesforceSDKCoreTests/SalesforceSDKIdentityTests.h

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

libs/SalesforceSDKCore/SalesforceSDKCoreTests/SalesforceSDKIdentityTests.m

Lines changed: 62 additions & 123 deletions
Original file line numberDiff line numberDiff line change
@@ -22,145 +22,84 @@
2222
WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2323
*/
2424

25-
#import "SalesforceSDKIdentityTests.h"
26-
#import "SFSDKTestRequestListener.h"
27-
#import "TestSetupUtils.h"
28-
#import "SFOAuthCoordinator.h"
25+
#import <XCTest/XCTest.h>
2926
#import "SFIdentityCoordinator.h"
3027
#import "SFUserAccountManager.h"
3128
#import "SFIdentityData.h"
3229

33-
/**
34-
* Private interface for this tests module.
35-
*/
36-
@interface SalesforceSDKIdentityTests()
37-
/**
38-
* Synchronous wrapper around the asynchronous request to the identity service.
39-
*/
40-
- (void)sendSyncIdentityRequest;
30+
@interface SFIdentityCoordinator ()
4131

42-
/**
43-
* Does a cursory pass on the identity data, to sanity check values.
44-
*/
45-
- (void)validateIdentityData;
32+
- (void)processResponse:(NSData *)data;
4633

47-
48-
@property (nonatomic,strong) SFUserAccount *account;
49-
50-
@property (nonatomic,strong) XCTestExpectation *expectation;
51-
52-
@property (nonatomic,assign) BOOL requestHasFailed;
34+
@end
5335

5436

37+
@interface SalesforceSDKIdentityTests : XCTestCase
5538
@end
5639

57-
static NSException *authException = nil;
58-
5940
@implementation SalesforceSDKIdentityTests
6041

61-
#pragma mark - Test / class setup
62-
63-
+ (void)setUp
64-
{
65-
@try {
66-
[TestSetupUtils populateAuthCredentialsFromConfigFileForClass:[self class]];
67-
[TestSetupUtils synchronousAuthRefresh];
68-
69-
}
70-
@catch (NSException *exception) {
71-
authException = exception;
72-
}
73-
[super setUp];
74-
}
75-
76-
- (void)setUp
77-
{
78-
if (authException) {
79-
XCTFail(@"Setting up authentication failed: %@", authException);
80-
}
81-
82-
// Set-up code here.
83-
_requestListener = nil;
84-
self.expectation = nil;
85-
self.account = nil;
86-
[super setUp];
87-
}
88-
89-
#pragma mark - Helper methods
90-
91-
- (void)sendSyncIdentityRequest
92-
{
93-
XCTestExpectation *expectation = [self expectationWithDescription:@"retrieveIdentityData"];
94-
self.expectation = expectation;
95-
self.account = [SFUserAccountManager sharedInstance].currentUser;
96-
SFIdentityCoordinator *idCoordinator = [[SFIdentityCoordinator alloc] initWithCredentials:self.account.credentials];
97-
idCoordinator.delegate = self;
98-
[idCoordinator initiateIdentityDataRetrieval];
99-
[self waitForExpectations:@[expectation] timeout:10];
100-
XCTAssertFalse(self.requestHasFailed);
101-
102-
}
103-
104-
#pragma mark - Tests
105-
10642
/**
107-
* Tests that identity data can be successfully retrieved with valid credentials.
43+
* Tests that identity data can be successfully processed
10844
*/
109-
- (void)testRetrieveIdentitySuccess
45+
- (void)testProcessIdentityData
11046
{
111-
[self sendSyncIdentityRequest];
112-
[self validateIdentityData];
113-
}
114-
47+
NSString *identityResponse = @"{\"id\":\"https://login.salesforce.com/id/some-org-id/some-user-id\",\"asserted_user\":true,\"user_id\":\"some-user-id\",\"organization_id\":\"some-org-id\",\"username\":\"[email protected]\",\"nick_name\":\"nickname\",\"display_name\":\"Example User\",\"email\":\"[email protected]\",\"email_verified\":true,\"first_name\":\"Example\",\"last_name\":\"User\",\"timezone\":\"America/Los_Angeles\",\"photos\":{\"picture\":\"https://example.com/profilephoto/full\",\"thumbnail\":\"https://example.com/profilephoto/thumb\"},\"addr_street\":null,\"addr_city\":null,\"addr_state\":null,\"addr_country\":null,\"addr_zip\":null,\"mobile_phone\":null,\"mobile_phone_verified\":false,\"is_lightning_login_user\":false,\"status\":{\"created_date\":null,\"body\":null},\"urls\":{\"enterprise\":\"https://example.my.salesforce.com/services/Soap/c/some-version/some-org-id\",\"metadata\":\"https://example.my.salesforce.com/services/Soap/m/some-version/some-org-id\",\"partner\":\"https://example.my.salesforce.com/services/Soap/u/some-version/some-org-id\",\"rest\":\"https://example.my.salesforce.com/services/data/vsome-version/\",\"sobjects\":\"https://example.my.salesforce.com/services/data/vsome-version/sobjects/\",\"search\":\"https://example.my.salesforce.com/services/data/vsome-version/search/\",\"query\":\"https://example.my.salesforce.com/services/data/vsome-version/query/\",\"recent\":\"https://example.my.salesforce.com/services/data/vsome-version/recent/\",\"tooling_soap\":\"https://example.my.salesforce.com/services/Soap/T/some-version/some-org-id\",\"tooling_rest\":\"https://example.my.salesforce.com/services/data/vsome-version/tooling/\",\"profile\":\"https://example.my.salesforce.com/some-user-id\",\"feeds\":\"https://example.my.salesforce.com/services/data/vsome-version/chatter/feeds\",\"groups\":\"https://example.my.salesforce.com/services/data/vsome-version/chatter/groups\",\"users\":\"https://example.my.salesforce.com/services/data/vsome-version/chatter/users\",\"feed_items\":\"https://example.my.salesforce.com/services/data/vsome-version/chatter/feed-items\",\"feed_elements\":\"https://example.my.salesforce.com/services/data/vsome-version/chatter/feed-elements\",\"custom_domain\":\"https://example.my.salesforce.com\"},\"active\":true,\"user_type\":\"STANDARD\",\"language\":\"en_US\",\"locale\":\"en_US\",\"utcOffset\":-28800000,\"last_modified_date\":\"2024-12-23T18:40:50Z\"}";
11548

116-
- (void)identityCoordinator:(nonnull SFIdentityCoordinator *)coordinator didFailWithError:(nonnull NSError *)error {
117-
self.requestHasFailed = true;
118-
[self.expectation fulfill];
119-
}
120-
121-
- (void)identityCoordinatorRetrievedData:(nonnull SFIdentityCoordinator *)coordinator {
122-
self.account.idData = coordinator.idData;
123-
[self.expectation fulfill];
124-
}
125-
126-
#pragma mark - Private helper methods
127-
128-
- (void)validateIdentityData
129-
{
130-
SFIdentityData *idData = self.account.idData;
131-
XCTAssertNotNil(idData, @"Identity data is nil.");
132-
XCTAssertNotNil(idData.dictRepresentation, @"idData.dictRepresentation should not be nil.");
133-
XCTAssertNotNil(idData.idUrl, @"idUrl should not be nil.");
134-
XCTAssertTrue(idData.assertedUser, @"assertedUser should be true.");
135-
XCTAssertNotNil(idData.userId, @"userId should not be nil.");
136-
XCTAssertNotNil(idData.orgId, @"orgId should not be nil.");
137-
XCTAssertNotNil(idData.username, @"username should not be nil.");
138-
XCTAssertNotNil(idData.nickname, @"nickname should not be nil.");
139-
XCTAssertNotNil(idData.displayName, @"displayName should not be nil.");
140-
XCTAssertNotNil(idData.email, @"email should not be nil.");
141-
XCTAssertNotNil(idData.firstName, @"firstName should not be nil.");
142-
XCTAssertNotNil(idData.lastName, @"lastName should not be nil.");
143-
XCTAssertNotNil(idData.pictureUrl, @"pictureUrl should not be nil.");
144-
XCTAssertNotNil(idData.thumbnailUrl, @"thumbnailUrl should not be nil.");
145-
XCTAssertNotNil(idData.enterpriseSoapUrl, @"enterpriseSoapUrl should not be nil.");
146-
XCTAssertNotNil(idData.metadataSoapUrl, @"metadataSoapUrl should not be nil.");
147-
XCTAssertNotNil(idData.partnerSoapUrl, @"partnerSoapUrl should not be nil.");
148-
XCTAssertNotNil(idData.restUrl, @"restUrl should not be nil.");
149-
XCTAssertNotNil(idData.restSObjectsUrl, @"restSObjectsUrl should not be nil.");
150-
XCTAssertNotNil(idData.restSearchUrl, @"restSearchUrl should not be nil.");
151-
XCTAssertNotNil(idData.restQueryUrl, @"restQueryUrl should not be nil.");
152-
XCTAssertNotNil(idData.restRecentUrl, @"restRecentUrl should not be nil.");
153-
XCTAssertNotNil(idData.profileUrl, @"profileUrl should not be nil.");
154-
XCTAssertNotNil(idData.chatterFeedsUrl, @"chatterFeedsUrl should not be nil.");
155-
XCTAssertNotNil(idData.chatterGroupsUrl, @"chatterGroupsUrl should not be nil.");
156-
XCTAssertNotNil(idData.chatterUsersUrl, @"chatterUsersUrl should not be nil.");
157-
XCTAssertNotNil(idData.chatterFeedItemsUrl, @"chatterFeedItemsUrl should not be nil.");
158-
XCTAssertTrue(idData.isActive, @"isActive should be true.");
159-
XCTAssertNotNil(idData.userType, @"userType should not be nil.");
160-
XCTAssertNotNil(idData.language, @"language should not be nil.");
161-
XCTAssertNotNil(idData.locale, @"locale should not be nil.");
162-
XCTAssertFalse(idData.utcOffset == -1, @"No value determined for utcOffset.");
163-
XCTAssertNotNil(idData.lastModifiedDate, @"lastModifiedDate should not be nil.");
49+
50+
SFIdentityCoordinator* coordinator = [[SFIdentityCoordinator alloc] init];
51+
NSData* identityResponseData = [identityResponse dataUsingEncoding:NSUTF8StringEncoding];
52+
[coordinator processResponse:identityResponseData];
53+
SFIdentityData *idData = coordinator.idData;
54+
55+
56+
// Basic identity fields
57+
XCTAssertEqualObjects(idData.idUrl, [NSURL URLWithString:@"https://login.salesforce.com/id/some-org-id/some-user-id"], @"idUrl should match");
58+
XCTAssertTrue(idData.assertedUser, @"assertedUser should be true");
59+
XCTAssertEqualObjects(idData.userId, @"some-user-id", @"userId should match");
60+
XCTAssertEqualObjects(idData.orgId, @"some-org-id", @"orgId should match");
61+
62+
// User information
63+
XCTAssertEqualObjects(idData.username, @"[email protected]", @"username should match");
64+
XCTAssertEqualObjects(idData.nickname, @"nickname", @"nickname should match");
65+
XCTAssertEqualObjects(idData.displayName, @"Example User", @"displayName should match");
66+
XCTAssertEqualObjects(idData.email, @"[email protected]", @"email should match");
67+
XCTAssertEqualObjects(idData.firstName, @"Example", @"firstName should match");
68+
XCTAssertEqualObjects(idData.lastName, @"User", @"lastName should match");
69+
70+
// Photos (NSURL* properties)
71+
XCTAssertEqualObjects(idData.pictureUrl, [NSURL URLWithString:@"https://example.com/profilephoto/full"], @"pictureUrl should match");
72+
XCTAssertEqualObjects(idData.thumbnailUrl, [NSURL URLWithString:@"https://example.com/profilephoto/thumb"], @"thumbnailUrl should match");
73+
74+
// SOAP URLs
75+
XCTAssertEqualObjects(idData.enterpriseSoapUrl, @"https://example.my.salesforce.com/services/Soap/c/some-version/some-org-id", @"enterpriseSoapUrl should match");
76+
XCTAssertEqualObjects(idData.metadataSoapUrl, @"https://example.my.salesforce.com/services/Soap/m/some-version/some-org-id", @"metadataSoapUrl should match");
77+
XCTAssertEqualObjects(idData.partnerSoapUrl, @"https://example.my.salesforce.com/services/Soap/u/some-version/some-org-id", @"partnerSoapUrl should match");
78+
79+
// REST URLs
80+
XCTAssertEqualObjects(idData.restUrl, @"https://example.my.salesforce.com/services/data/vsome-version/", @"restUrl should match");
81+
XCTAssertEqualObjects(idData.restSObjectsUrl, @"https://example.my.salesforce.com/services/data/vsome-version/sobjects/", @"restSObjectsUrl should match");
82+
XCTAssertEqualObjects(idData.restSearchUrl, @"https://example.my.salesforce.com/services/data/vsome-version/search/", @"restSearchUrl should match");
83+
XCTAssertEqualObjects(idData.restQueryUrl, @"https://example.my.salesforce.com/services/data/vsome-version/query/", @"restQueryUrl should match");
84+
XCTAssertEqualObjects(idData.restRecentUrl, @"https://example.my.salesforce.com/services/data/vsome-version/recent/", @"restRecentUrl should match");
85+
86+
// Profile and Chatter URLs
87+
XCTAssertEqualObjects(idData.profileUrl, [NSURL URLWithString:@"https://example.my.salesforce.com/some-user-id"], @"profileUrl should match (NSURL)");
88+
XCTAssertEqualObjects(idData.chatterFeedsUrl, @"https://example.my.salesforce.com/services/data/vsome-version/chatter/feeds", @"chatterFeedsUrl should match");
89+
XCTAssertEqualObjects(idData.chatterGroupsUrl, @"https://example.my.salesforce.com/services/data/vsome-version/chatter/groups", @"chatterGroupsUrl should match");
90+
XCTAssertEqualObjects(idData.chatterUsersUrl, @"https://example.my.salesforce.com/services/data/vsome-version/chatter/users", @"chatterUsersUrl should match");
91+
XCTAssertEqualObjects(idData.chatterFeedItemsUrl, @"https://example.my.salesforce.com/services/data/vsome-version/chatter/feed-items", @"chatterFeedItemsUrl should match");
92+
93+
// User status and preferences
94+
XCTAssertTrue(idData.isActive, @"isActive should be true");
95+
XCTAssertEqualObjects(idData.userType, @"STANDARD", @"userType should match");
96+
XCTAssertEqualObjects(idData.language, @"en_US", @"language should match");
97+
XCTAssertEqualObjects(idData.locale, @"en_US", @"locale should match");
98+
XCTAssertEqual(idData.utcOffset, -28800000, @"utcOffset should match");
99+
100+
// Date parsing
101+
XCTAssertNotNil(idData.lastModifiedDate, @"lastModifiedDate should not be nil");
102+
// Note: lastModifiedDate is parsed from "2024-12-23T18:40:50Z", exact value comparison would need date formatter
164103
}
165104

166105
@end

libs/SalesforceSDKCore/SalesforceSDKCoreTests/SalesforceSDKManagerTests.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1068,7 +1068,7 @@ - (void)testGetDevSupportInfosContainsAuthenticatedUsersWhenUsersExist {
10681068
[self createTestAppIdentity];
10691069

10701070
// Create and save a user (not current, just exists)
1071-
SFUserAccount *user = [self createUserAccount];
1071+
[self createUserAccount];
10721072

10731073
NSArray<NSString *> *infos = [[SalesforceSDKManager sharedManager] getDevSupportInfos];
10741074

0 commit comments

Comments
 (0)