Skip to content

Commit

Permalink
Showing 3 changed files with 11 additions and 38 deletions.
10 changes: 0 additions & 10 deletions iOS_SDK/OneSignalSDK/Source/OSStateSynchronizer.m
Original file line number Diff line number Diff line change
@@ -200,16 +200,6 @@ - (void)setExternalUserId:(NSString *)externalId withExternalIdAuthHashToken:(NS
withAppId:appId];
}

// Make sure this is not a duplicate request, if the email and push channels are aligned correctly with the same external id
if (![OneSignal shouldUpdateExternalUserId:externalId withRequests:requests]) {
// Use callback to return success for both cases here, since push and
// email (if email is not setup, email is not included) have been set already
let results = [OneSignal getDuplicateExternalUserIdResponse:externalId withRequests:requests];
if (successBlock)
successBlock(results);
return;
}

[OneSignalClient.sharedClient executeSimultaneousRequests:requests withCompletion:^(NSDictionary<NSString *,NSDictionary *> *results) {
if (results[OS_PUSH] && results[OS_PUSH][OS_SUCCESS] && [results[OS_PUSH][OS_SUCCESS] boolValue]) {
[OneSignalUserDefaults.initStandard saveStringForKey:OSUD_EXTERNAL_USER_ID withValue:externalId];
18 changes: 0 additions & 18 deletions iOS_SDK/OneSignalSDK/Source/OneSignal.m
Original file line number Diff line number Diff line change
@@ -2773,24 +2773,6 @@ + (BOOL)shouldUpdateExternalUserId:(NSString*)externalId withRequests:(NSDiction
return updateExternalUserId || updateEmailExternalUserId;
}

+ (NSMutableDictionary*)getDuplicateExternalUserIdResponse:(NSString*)externalId withRequests:(NSDictionary*)requests {
NSMutableDictionary *results = [NSMutableDictionary new];
[OneSignal onesignal_Log:ONE_S_LL_WARN message:[NSString stringWithFormat:@"Attempted to set external user id, but %@ is already set", externalId]];

results[@"push"] = @{
@"success" : @(true)
};

// Make sure to only add email if email was attempted
if (requests[@"email"]) {
results[@"email"] = @{
@"success" : @(true)
};
}

return results;
}

/*
Start of outcome module
*/
21 changes: 11 additions & 10 deletions iOS_SDK/OneSignalSDK/UnitTests/UnitTests.m
Original file line number Diff line number Diff line change
@@ -2323,9 +2323,9 @@ - (void)testSetExternalUserIdWithRegistration {
[OneSignal setExternalUserId:TEST_EXTERNAL_USER_ID];

[UnitTestCommonMethods initOneSignal_andThreadWait];

XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequest[@"external_user_id"], TEST_EXTERNAL_USER_ID);
XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequestType, NSStringFromClass([OSRequestRegisterUser class]));
let registerUserRequest = OneSignalClientOverrider.executedRequests[1];
XCTAssertEqualObjects(registerUserRequest.parameters[@"external_user_id"], TEST_EXTERNAL_USER_ID);
XCTAssertEqualObjects(NSStringFromClass([registerUserRequest class]), NSStringFromClass([OSRequestRegisterUser class]));
}

- (void)testSetExternalUserIdAfterRegistration {
@@ -2354,33 +2354,33 @@ - (void)testRemoveExternalUserId {
}

// Tests to make sure that the SDK will not send an external ID if it already successfully sent the same ID
- (void)testDoesntSendExistingExternalUserIdAfterRegistration {
- (void)testDoesSendExistingExternalUserIdAfterRegistration {
[OneSignal setExternalUserId:TEST_EXTERNAL_USER_ID];

[UnitTestCommonMethods initOneSignal_andThreadWait];

XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequestType, NSStringFromClass([OSRequestRegisterUser class]));
XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequestType, NSStringFromClass([OSRequestUpdateExternalUserId class]));

[OneSignal setExternalUserId:TEST_EXTERNAL_USER_ID];

// the PUT request to set external ID should not happen since the external ID
// is the same as it was during registration
XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequestType, NSStringFromClass([OSRequestRegisterUser class]));
XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequestType, NSStringFromClass([OSRequestUpdateExternalUserId class]));
}

- (void)testDoesntSendExistingExternalUserIdBeforeRegistration {
- (void)testDoesSendExistingExternalUserIdBeforeRegistration {
//mimics a previous session where the external user ID was set
[OneSignalUserDefaults.initStandard saveStringForKey:OSUD_EXTERNAL_USER_ID withValue:TEST_EXTERNAL_USER_ID];

[OneSignal setExternalUserId:TEST_EXTERNAL_USER_ID];

[UnitTestCommonMethods initOneSignal_andThreadWait];

XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequestType, NSStringFromClass([OSRequestRegisterUser class]));
XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequestType, NSStringFromClass([OSRequestUpdateExternalUserId class]));

// the registration request should not have included external user ID
// since it had been set already to the same value in a previous session
XCTAssertNil(OneSignalClientOverrider.lastHTTPRequest[@"external_user_id"]);
XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequest[@"external_user_id"], TEST_EXTERNAL_USER_ID);
}

- (void)testSetExternalUserId_forPush_withCompletion {
@@ -2441,13 +2441,14 @@ - (void)testSetExternalUserId_WithAuthToken_forPush_withCompletion_beforRegister

// 2. Init OneSignal
[UnitTestCommonMethods initOneSignal_andThreadWait];
[UnitTestCommonMethods runBackgroundThreads];

// 3. Make sure only push external id was attempted to be set since no email was set yet
XCTAssertEqual(self.CALLBACK_EXTERNAL_USER_ID, TEST_EXTERNAL_USER_ID);
XCTAssertNil(self.CALLBACK_EMAIL_EXTERNAL_USER_ID);

// 3. Make sure last request was external id and had the correct external id being used in the request payload
XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequestType, NSStringFromClass([OSRequestRegisterUser class]));
XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequestType, NSStringFromClass([OSRequestUpdateExternalUserId class]));
XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequest[@"external_user_id"], TEST_EXTERNAL_USER_ID);
XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequest[@"external_user_id_auth_hash"], TEST_EXTERNAL_USER_ID_HASH_TOKEN);
}

0 comments on commit 3384bd7

Please sign in to comment.