Skip to content

Commit 7bfd414

Browse files
committed
Add test for remove external id
* Test if auth hash is being added for remove external id
1 parent 1da2e10 commit 7bfd414

File tree

2 files changed

+88
-1
lines changed

2 files changed

+88
-1
lines changed

iOS_SDK/OneSignalSDK/Source/OneSignal.m

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2679,13 +2679,18 @@ + (void)setExternalUserId:(NSString *)externalId withExternalIdAuthHashToken:(NS
26792679
if (failureBlock)
26802680
failureBlock([NSError errorWithDomain:@"com.onesignal" code:0 userInfo:@{@"error" : [NSString stringWithFormat:@"%@ is not set", self.app_id == nil ? @"app_id" : @"user_id"]}]);
26812681
return;
2682-
} else if (requiresUserIdAuth && (!hashToken || hashToken.length == 0)) {
2682+
} else if (externalId.length > 0 && requiresUserIdAuth && (!hashToken || hashToken.length == 0)) {
26832683
[OneSignal onesignal_Log:ONE_S_LL_ERROR message:@"External Id authentication (auth token) is set to REQUIRED for this application. Please provide an auth token from your backend server or change the setting in the OneSignal dashboard."];
26842684
if (failureBlock)
26852685
failureBlock([NSError errorWithDomain:@"com.onesignal.externalUserId" code:0 userInfo:@{@"error" : @"External User Id authentication (auth token) is set to REQUIRED for this application. Please provide an auth token from your backend server or change the setting in the OneSignal dashboard."}]);
26862686
return;
26872687
}
26882688

2689+
// Remove external id case
2690+
if (externalId.length == 0) {
2691+
hashToken = self.currentSubscriptionState.externalIdAuthCode;
2692+
}
2693+
26892694
// Begin constructing the request for the external id update
26902695
let requests = [NSMutableDictionary new];
26912696
requests[@"push"] = [OSRequestUpdateExternalUserId withUserId:externalId withUserIdHashToken:hashToken withOneSignalUserId:self.currentSubscriptionState.userId appId:self.app_id];

iOS_SDK/OneSignalSDK/UnitTests/UnitTests.m

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2859,6 +2859,29 @@ - (void)testRemoveExternalUserId_forPush {
28592859
XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequest[@"external_user_id"], @"");
28602860
}
28612861

2862+
- (void)testRemoveExternalUserId_forPush_withAuthHash {
2863+
// 1. Init OneSignal
2864+
[UnitTestCommonMethods initOneSignalAndThreadWait];
2865+
2866+
// 2. Set external user id
2867+
[OneSignal setExternalUserId:TEST_EXTERNAL_USER_ID withExternalIdAuthHashToken:TEST_EXTERNAL_USER_ID_HASH_TOKEN withSuccess:nil withFailure:nil];
2868+
[UnitTestCommonMethods runBackgroundThreads];
2869+
2870+
// 3. Make sure last request was external id and had the correct external id being used in the request payload
2871+
XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequestType, NSStringFromClass([OSRequestUpdateExternalUserId class]));
2872+
XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequest[@"external_user_id"], TEST_EXTERNAL_USER_ID);
2873+
XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequest[@"external_user_id_auth_hash"], TEST_EXTERNAL_USER_ID_HASH_TOKEN);
2874+
2875+
// 4. Remove the external user id
2876+
[OneSignal removeExternalUserId];
2877+
[UnitTestCommonMethods runBackgroundThreads];
2878+
2879+
// 5. Make sure last request was external id and the external id being used was an empty string
2880+
XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequestType, NSStringFromClass([OSRequestUpdateExternalUserId class]));
2881+
XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequest[@"external_user_id"], @"");
2882+
XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequest[@"external_user_id_auth_hash"], TEST_EXTERNAL_USER_ID_HASH_TOKEN);
2883+
}
2884+
28622885
- (void)testRemoveExternalUserId_forPushAndEmail {
28632886
// 1. Init OneSignal
28642887
[UnitTestCommonMethods initOneSignalAndThreadWait];
@@ -2884,6 +2907,33 @@ - (void)testRemoveExternalUserId_forPushAndEmail {
28842907
XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequest[@"external_user_id"], @"");
28852908
}
28862909

2910+
- (void)testRemoveExternalUserId_forPushAndEmail_withAuthHash {
2911+
// 1. Init OneSignal
2912+
[UnitTestCommonMethods initOneSignalAndThreadWait];
2913+
2914+
// 2. Set email
2915+
[OneSignal setEmail:TEST_EMAIL withEmailAuthHashToken:TEST_EMAIL_HASH_TOKEN];
2916+
[UnitTestCommonMethods runBackgroundThreads];
2917+
2918+
// 3. Set external user id
2919+
[OneSignal setExternalUserId:TEST_EXTERNAL_USER_ID withExternalIdAuthHashToken:TEST_EXTERNAL_USER_ID_HASH_TOKEN withSuccess:nil withFailure:nil];
2920+
[UnitTestCommonMethods runBackgroundThreads];
2921+
2922+
// 4. Make sure last request was external id and had the correct external id being used in the request payload
2923+
XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequestType, NSStringFromClass([OSRequestUpdateExternalUserId class]));
2924+
XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequest[@"external_user_id"], TEST_EXTERNAL_USER_ID);
2925+
XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequest[@"external_user_id_auth_hash"], TEST_EXTERNAL_USER_ID_HASH_TOKEN);
2926+
2927+
// 5. Remove the external user id
2928+
[OneSignal removeExternalUserId];
2929+
[UnitTestCommonMethods runBackgroundThreads];
2930+
2931+
// 6. Make sure last request was external id and the external id being used was an empty string
2932+
XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequestType, NSStringFromClass([OSRequestUpdateExternalUserId class]));
2933+
XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequest[@"external_user_id"], @"");
2934+
XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequest[@"external_user_id_auth_hash"], TEST_EXTERNAL_USER_ID_HASH_TOKEN);
2935+
}
2936+
28872937
- (void)testRemoveExternalUserId_forPush_withCompletion {
28882938
// 1. Init OneSignal
28892939
[UnitTestCommonMethods initOneSignalAndThreadWait];
@@ -2916,6 +2966,38 @@ - (void)testRemoveExternalUserId_forPush_withCompletion {
29162966
XCTAssertNil(self.CALLBACK_EMAIL_EXTERNAL_USER_ID);
29172967
}
29182968

2969+
- (void)testRemoveExternalUserId_forPush_withAuthHash_withCompletion {
2970+
// 1. Init OneSignal
2971+
[UnitTestCommonMethods initOneSignalAndThreadWait];
2972+
2973+
// 2. Set external user id
2974+
[OneSignal setExternalUserId:TEST_EXTERNAL_USER_ID withExternalIdAuthHashToken:TEST_EXTERNAL_USER_ID_HASH_TOKEN withSuccess:nil withFailure:nil];
2975+
[UnitTestCommonMethods runBackgroundThreads];
2976+
2977+
// 3. Make sure last request was external id and had the correct external id being used in the request payload
2978+
XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequestType, NSStringFromClass([OSRequestUpdateExternalUserId class]));
2979+
XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequest[@"external_user_id"], TEST_EXTERNAL_USER_ID);
2980+
2981+
// 4. Remove the external user id with a callack implemented
2982+
[OneSignal removeExternalUserId:^(NSDictionary *results) {
2983+
if (results[@"push"] && results[@"push"][@"success"] && [results[@"push"][@"success"] boolValue])
2984+
self.CALLBACK_EXTERNAL_USER_ID = @"";
2985+
2986+
if (results[@"email"] && results[@"email"][@"success"] && [results[@"email"][@"success"] boolValue])
2987+
self.CALLBACK_EMAIL_EXTERNAL_USER_ID = @"";
2988+
} withFailure:^(NSError *error) {
2989+
}];
2990+
[UnitTestCommonMethods runBackgroundThreads];
2991+
2992+
// 5. Make sure last request was external id and the external id being used was an empty string
2993+
XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequestType, NSStringFromClass([OSRequestUpdateExternalUserId class]));
2994+
XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequest[@"external_user_id"], @"");
2995+
2996+
// 6. Make sure completion handler was called, push external id is an empty string and email external id is nil since email as never set
2997+
XCTAssertEqual(self.CALLBACK_EXTERNAL_USER_ID, @"");
2998+
XCTAssertNil(self.CALLBACK_EMAIL_EXTERNAL_USER_ID);
2999+
}
3000+
29193001
- (void)testRemoveExternalUserId_forPushAndEmail_withCompletion {
29203002
// 1. Init OneSignal
29213003
[UnitTestCommonMethods initOneSignalAndThreadWait];

0 commit comments

Comments
 (0)