Skip to content

Commit da4adcb

Browse files
committed
Update tests
* Remove test on Update Subscription with JWT; it does not use User JWT * Make some changes to existing tests
1 parent d58a51e commit da4adcb

File tree

5 files changed

+24
-41
lines changed

5 files changed

+24
-41
lines changed

iOS_SDK/OneSignalSDK/OneSignalUserMocks/OneSignalExecutorMocks.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@ open class OneSignalExecutorMocks: NSObject {
6161
externalId: externalId,
6262
pushSubscriptionModel: OSSubscriptionModel(type: .push, address: "", subscriptionId: testPushSubId, reachable: false, isDisabled: false, changeNotifier: OSEventProducer()))
6363
if let onesignalId = onesignalId {
64-
user.identityModel.addAliases([OS_ONESIGNAL_ID: onesignalId])
64+
// Setting the OSID directly avoids generating a Delta
65+
user.identityModel.aliases[OS_ONESIGNAL_ID] = onesignalId
6566
}
6667
return user
6768
}

iOS_SDK/OneSignalSDK/OneSignalUserTests/Executors/IdentityExecutorTests.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -240,8 +240,7 @@ final class IdentityExecutorTests: XCTestCase {
240240
let addAliasRequests = mocks.client.executedRequests.filter { request in
241241
request.isKind(of: OSRequestAddAliases.self)
242242
}
243-
// It is 4 because setting user B's OneSignal ID counts as an add alias request
244-
XCTAssertEqual(addAliasRequests.count, 4)
243+
XCTAssertEqual(addAliasRequests.count, 3)
245244
}
246245

247246
func testRemoveAliasRequests_RetryRequests_OnTokenUpdate_ForOnlyUpdatedUser() {

iOS_SDK/OneSignalSDK/OneSignalUserTests/Executors/SubscriptionsExecutorTests.swift

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -165,32 +165,6 @@ final class SubscriptionExecutorTests: XCTestCase {
165165
XCTAssertTrue(invalidatedCallbackWasCalled)
166166
}
167167

168-
func testUpdateSubscription_IdentityVerificationRequired_withInvalidToken() {
169-
/* Setup */
170-
let mocks = Mocks()
171-
mocks.setAuthRequired(true)
172-
OneSignalUserManagerImpl.sharedInstance.operationRepo.paused = true
173-
174-
let user = mocks.setUserManagerInternalUser(externalId: userA_EUID, onesignalId: userA_OSID)
175-
user.identityModel.jwtBearerToken = userA_InvalidJwtToken
176-
let token = testPushToken
177-
MockUserRequests.setUnauthorizedUpdateSubscriptionFailureResponse(with: mocks.client, token: token)
178-
mocks.subscriptionExecutor.enqueueDelta(OSDelta(name: OS_UPDATE_SUBSCRIPTION_DELTA, identityModelId: user.identityModel.modelId, model: OSSubscriptionModel(type: .push, address: token, subscriptionId: testPushSubId, reachable: true, isDisabled: false, changeNotifier: OSEventProducer()), property: "token", value: token))
179-
180-
var invalidatedCallbackWasCalled = false
181-
OneSignalUserManagerImpl.sharedInstance.User.onJwtInvalidated { _ in
182-
invalidatedCallbackWasCalled = true
183-
}
184-
185-
/* When */
186-
mocks.subscriptionExecutor.processDeltaQueue(inBackground: false)
187-
OneSignalCoreMocks.waitForBackgroundThreads(seconds: 0.5)
188-
189-
/* Then */
190-
XCTAssertTrue(mocks.client.hasExecutedRequestOfType(OSRequestUpdateSubscription.self))
191-
XCTAssertTrue(invalidatedCallbackWasCalled)
192-
}
193-
194168
func testCreateSubscriptionRequests_Retry_OnTokenUpdate() {
195169
/* Setup */
196170
let mocks = Mocks()

iOS_SDK/OneSignalSDK/OneSignalUserTests/Executors/UserExecutorTests.swift

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -348,12 +348,11 @@ final class UserExecutorTests: XCTestCase {
348348

349349
mocks.setAuthRequired(true)
350350

351-
_ = mocks.setUserManagerInternalUser(externalId: userA_EUID)
351+
let userA = mocks.setUserManagerInternalUser(externalId: userA_EUID, onesignalId: userA_OSID)
352352
// We need to use the user manager's executor because the onJWTUpdated callback won't fire on the mock executor
353353
let executor = OneSignalUserManagerImpl.sharedInstance.userExecutor!
354354

355-
let userAIdentityModel = OSIdentityModel(aliases: [OS_ONESIGNAL_ID: userA_OSID, OS_EXTERNAL_ID: userA_EUID], changeNotifier: OSEventProducer())
356-
userAIdentityModel.jwtBearerToken = userA_InvalidJwtToken
355+
userA.identityModel.jwtBearerToken = userA_InvalidJwtToken
357356

358357
MockUserRequests.setUnauthorizedFetchUserFailureResponses(with: mocks.client, onesignalId: userA_OSID)
359358
MockUserRequests.setUnauthorizedCreateUserFailureResponses(with: mocks.client, externalId: userA_EUID)
@@ -364,8 +363,8 @@ final class UserExecutorTests: XCTestCase {
364363
}
365364

366365
/* When */
367-
executor.fetchUser(onesignalId: userA_OSID, identityModel: userAIdentityModel)
368-
executor.createUser(aliasLabel: OS_EXTERNAL_ID, aliasId: userA_EUID, identityModel: userAIdentityModel)
366+
executor.fetchUser(onesignalId: userA_OSID, identityModel: userA.identityModel)
367+
executor.createUser(aliasLabel: OS_EXTERNAL_ID, aliasId: userA_EUID, identityModel: userA.identityModel)
369368
OneSignalCoreMocks.waitForBackgroundThreads(seconds: 0.5)
370369

371370
MockUserRequests.setDefaultFetchUserResponseForHydration(with: mocks.client, externalId: userA_EUID)
@@ -379,24 +378,34 @@ final class UserExecutorTests: XCTestCase {
379378
XCTAssertTrue(mocks.client.hasExecutedRequestOfType(OSRequestFetchUser.self))
380379
XCTAssertTrue(mocks.client.hasExecutedRequestOfType(OSRequestCreateUser.self))
381380
XCTAssertTrue(invalidatedCallbackWasCalled)
382-
XCTAssertEqual(mocks.client.networkRequestCount, 4)
381+
/*
382+
Create and Fetch requests that fail
383+
Create and Fetch requests that pass
384+
Follow up Fetch made after the success of the Create request
385+
*/
386+
XCTAssertEqual(mocks.client.networkRequestCount, 5)
383387
}
384388

389+
/**
390+
This test executes a Fetch on userA, and a Create on userB, encountering an unauthorized response for both requests.
391+
The test next updates the JWT token for userA only.
392+
It expects only the Fetch userA request to be sent next.
393+
*/
385394
func testUserRequests_RetryRequests_OnTokenUpdate_ForOnlyUpdatedUser() {
386395
/* Setup */
387396
let mocks = Mocks()
388397

389398
mocks.setAuthRequired(true)
390399

391-
_ = mocks.setUserManagerInternalUser(externalId: userA_EUID)
400+
let userA = mocks.setUserManagerInternalUser(externalId: userA_EUID, onesignalId: userA_OSID)
392401
// We need to use the user manager's executor because the onJWTUpdated callback won't fire on the mock executor
393402
let executor = OneSignalUserManagerImpl.sharedInstance.userExecutor!
394403

395-
let userAIdentityModel = OSIdentityModel(aliases: [OS_ONESIGNAL_ID: userA_OSID, OS_EXTERNAL_ID: userA_EUID], changeNotifier: OSEventProducer())
396-
userAIdentityModel.jwtBearerToken = userA_InvalidJwtToken
404+
userA.identityModel.jwtBearerToken = userA_InvalidJwtToken
397405

398406
let userBIdentityModel = OSIdentityModel(aliases: [OS_ONESIGNAL_ID: userB_OSID, OS_EXTERNAL_ID: userB_EUID], changeNotifier: OSEventProducer())
399407
userBIdentityModel.jwtBearerToken = userA_InvalidJwtToken
408+
OneSignalUserManagerImpl.sharedInstance.addIdentityModelToRepo(userBIdentityModel)
400409

401410
MockUserRequests.setUnauthorizedFetchUserFailureResponses(with: mocks.client, onesignalId: userA_OSID)
402411
MockUserRequests.setUnauthorizedCreateUserFailureResponses(with: mocks.client, externalId: userB_EUID)
@@ -407,7 +416,7 @@ final class UserExecutorTests: XCTestCase {
407416
}
408417

409418
/* When */
410-
executor.fetchUser(onesignalId: userA_OSID, identityModel: userAIdentityModel)
419+
executor.fetchUser(onesignalId: userA_OSID, identityModel: userA.identityModel)
411420
executor.createUser(aliasLabel: OS_EXTERNAL_ID, aliasId: userB_EUID, identityModel: userBIdentityModel)
412421
OneSignalCoreMocks.waitForBackgroundThreads(seconds: 0.5)
413422

iOS_SDK/OneSignalSDK/OneSignalUserTests/UserConcurrencyTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ final class UserConcurrencyTests: XCTestCase {
120120
}
121121

122122
// 4. Run background threads
123-
OneSignalCoreMocks.waitForBackgroundThreads(seconds: 0.5)
123+
OneSignalCoreMocks.waitForBackgroundThreads(seconds: 2)
124124

125125
/* Then */
126126
// Previously caused crash: signal SIGABRT - malloc: double free for ptr
@@ -165,7 +165,7 @@ final class UserConcurrencyTests: XCTestCase {
165165
}
166166

167167
// 4. Run background threads
168-
OneSignalCoreMocks.waitForBackgroundThreads(seconds: 0.5)
168+
OneSignalCoreMocks.waitForBackgroundThreads(seconds: 2)
169169

170170
/* Then */
171171
// Previously caused crash: signal SIGABRT - malloc: double free for ptr

0 commit comments

Comments
 (0)