Skip to content

Commit

Permalink
* No longer pollPendingRequests when request fails prepareForExecution
Browse files Browse the repository at this point in the history
* Update MockOSDispatchQueue to use dispatch queue under the covers
  • Loading branch information
brismithers committed May 7, 2024
1 parent 8886d1f commit 44c8cd3
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 17 deletions.
21 changes: 19 additions & 2 deletions iOS_SDK/OneSignalSDK/OneSignalCoreMocks/MockOSDispatchQueue.swift
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,30 @@
import OneSignalOSCore

public class MockDispatchQueue: OSDispatchQueue {
let requestDispatch = DispatchQueue(label: "MockDispatchQueue")
var numDispatches = 0

public init() {}

public func async(execute work: @escaping @convention(block) () -> Void) {
work()
requestDispatch.async {
work()
self.numDispatches += 1
}
}

public func asyncAfterTime(deadline: DispatchTime, execute work: @escaping @Sendable @convention(block) () -> Void) {
work()
requestDispatch.asyncAfterTime(deadline: deadline) {
work()
self.numDispatches += 1
}
}

public func waitForDispatches(_ numDispatches: Int) -> Void {
while self.numDispatches < numDispatches {
requestDispatch.sync {
Thread.sleep(forTimeInterval: TimeInterval(1))
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,6 @@ class OSLiveActivitiesExecutor: OSPushSubscriptionObserver {
}

if !request.prepareForExecution() {
self.pollPendingRequests()
return
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ class OSRequestRemoveUpdateToken: OneSignalRequest, OSLiveActivityRequest, OSLiv

func prepareForExecution() -> Bool {
guard let appId = OneSignalConfigManager.getAppId() else {
OneSignalLog.onesignalLog(.LL_DEBUG, message: "Cannot generate the reemove update token request due to null app ID.")
OneSignalLog.onesignalLog(.LL_DEBUG, message: "Cannot generate the remove update token request due to null app ID.")
return false
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ final class OSLiveActivitiesExecutorTests: XCTestCase {

func testAppendSetStartTokenWithSuccessfulRequest() throws {
/* Setup */
let mockDispatchQueue = MockDispatchQueue()
let mockClient = MockOneSignalClient()
OneSignalCoreImpl.setSharedClient(mockClient)
OneSignalUserDefaults.initShared().saveString(forKey: OSUD_LEGACY_PLAYER_ID, withValue: "my-subscription-id")
Expand All @@ -61,8 +62,9 @@ final class OSLiveActivitiesExecutorTests: XCTestCase {
mockClient.setMockResponseForRequest(request: String(describing: request), response: [String: Any]())

/* When */
let executor = OSLiveActivitiesExecutor(requestDispatch: MockDispatchQueue())
let executor = OSLiveActivitiesExecutor(requestDispatch: mockDispatchQueue)
executor.append(request)
mockDispatchQueue.waitForDispatches(2)

/* Then */
XCTAssertEqual(executor.startTokens.items.count, 1)
Expand All @@ -74,6 +76,7 @@ final class OSLiveActivitiesExecutorTests: XCTestCase {

func testRemoveStartTokenWithSuccessfulRequest() throws {
/* Setup */
let mockDispatchQueue = MockDispatchQueue()
let mockClient = MockOneSignalClient()
OneSignalCoreImpl.setSharedClient(mockClient)
OneSignalUserDefaults.initShared().saveString(forKey: OSUD_LEGACY_PLAYER_ID, withValue: "my-subscription-id")
Expand All @@ -84,8 +87,9 @@ final class OSLiveActivitiesExecutorTests: XCTestCase {
mockClient.setMockResponseForRequest(request: String(describing: request), response: [String: Any]())

/* When */
let executor = OSLiveActivitiesExecutor(requestDispatch: MockDispatchQueue())
let executor = OSLiveActivitiesExecutor(requestDispatch: mockDispatchQueue)
executor.append(request)
mockDispatchQueue.waitForDispatches(2)

/* Then */
XCTAssertEqual(executor.startTokens.items.count, 0)
Expand All @@ -95,6 +99,7 @@ final class OSLiveActivitiesExecutorTests: XCTestCase {

func testSetUpdateTokenWithSuccessfulRequest() throws {
/* Setup */
let mockDispatchQueue = MockDispatchQueue()
let mockClient = MockOneSignalClient()
OneSignalCoreImpl.setSharedClient(mockClient)
OneSignalUserDefaults.initShared().saveString(forKey: OSUD_LEGACY_PLAYER_ID, withValue: "my-subscription-id")
Expand All @@ -105,8 +110,9 @@ final class OSLiveActivitiesExecutorTests: XCTestCase {
mockClient.setMockResponseForRequest(request: String(describing: request), response: [String: Any]())

/* When */
let executor = OSLiveActivitiesExecutor(requestDispatch: MockDispatchQueue())
let executor = OSLiveActivitiesExecutor(requestDispatch: mockDispatchQueue)
executor.append(request)
mockDispatchQueue.waitForDispatches(2)

/* Then */
XCTAssertEqual(executor.updateTokens.items.count, 1)
Expand All @@ -118,6 +124,7 @@ final class OSLiveActivitiesExecutorTests: XCTestCase {

func testRemoveUpdateTokenWithSuccessfulRequest() throws {
/* Setup */
let mockDispatchQueue = MockDispatchQueue()
let mockClient = MockOneSignalClient()
OneSignalCoreImpl.setSharedClient(mockClient)
OneSignalUserDefaults.initShared().saveString(forKey: OSUD_LEGACY_PLAYER_ID, withValue: "my-subscription-id")
Expand All @@ -128,8 +135,9 @@ final class OSLiveActivitiesExecutorTests: XCTestCase {
mockClient.setMockResponseForRequest(request: String(describing: request), response: [String: Any]())

/* When */
let executor = OSLiveActivitiesExecutor(requestDispatch: MockDispatchQueue())
let executor = OSLiveActivitiesExecutor(requestDispatch: mockDispatchQueue)
executor.append(request)
mockDispatchQueue.waitForDispatches(2)

/* Then */
XCTAssertEqual(executor.updateTokens.items.count, 0)
Expand All @@ -139,12 +147,14 @@ final class OSLiveActivitiesExecutorTests: XCTestCase {

func testRequestWillNotExecuteWhenNoSubscription() throws {
/* Setup */
let mockDispatchQueue = MockDispatchQueue()
let mockClient = MockOneSignalClient()
let request = OSRequestSetStartToken(key: "my-activity-type", token: "my-token")

/* When */
let executor = OSLiveActivitiesExecutor(requestDispatch: MockDispatchQueue())
let executor = OSLiveActivitiesExecutor(requestDispatch: mockDispatchQueue)
executor.append(request)
mockDispatchQueue.waitForDispatches(1)

/* Then */
XCTAssertEqual(executor.startTokens.items.count, 1)
Expand All @@ -155,6 +165,7 @@ final class OSLiveActivitiesExecutorTests: XCTestCase {

func testRequestStaysInCacheForRetryableError() throws {
/* Setup */
let mockDispatchQueue = MockDispatchQueue()
let mockClient = MockOneSignalClient()
OneSignalCoreImpl.setSharedClient(mockClient)
OneSignalUserDefaults.initShared().saveString(forKey: OSUD_LEGACY_PLAYER_ID, withValue: "my-subscription-id")
Expand All @@ -165,8 +176,9 @@ final class OSLiveActivitiesExecutorTests: XCTestCase {
mockClient.setMockFailureResponseForRequest(request: String(describing: request), error: NSError(domain: "not-important", code: 500))

/* When */
let executor = OSLiveActivitiesExecutor(requestDispatch: MockDispatchQueue())
let executor = OSLiveActivitiesExecutor(requestDispatch: mockDispatchQueue)
executor.append(request)
mockDispatchQueue.waitForDispatches(1)

/* Then */
XCTAssertEqual(executor.startTokens.items.count, 1)
Expand All @@ -178,6 +190,7 @@ final class OSLiveActivitiesExecutorTests: XCTestCase {

func testRequestRemovedFromCacheForNonRetryableError() throws {
/* Setup */
let mockDispatchQueue = MockDispatchQueue()
let mockClient = MockOneSignalClient()
OneSignalCoreImpl.setSharedClient(mockClient)
OneSignalUserDefaults.initShared().saveString(forKey: OSUD_LEGACY_PLAYER_ID, withValue: "my-subscription-id")
Expand All @@ -188,8 +201,9 @@ final class OSLiveActivitiesExecutorTests: XCTestCase {
mockClient.setMockFailureResponseForRequest(request: String(describing: request), error: NSError(domain: "not-important", code: 401))

/* When */
let executor = OSLiveActivitiesExecutor(requestDispatch: MockDispatchQueue())
let executor = OSLiveActivitiesExecutor(requestDispatch: mockDispatchQueue)
executor.append(request)
mockDispatchQueue.waitForDispatches(2)

/* Then */
XCTAssertEqual(executor.startTokens.items.count, 0)
Expand All @@ -199,6 +213,7 @@ final class OSLiveActivitiesExecutorTests: XCTestCase {

func testSetStartRequestNotExecutedWithSameActivityTypeAndToken() throws {
/* Setup */
let mockDispatchQueue = MockDispatchQueue()
let mockClient = MockOneSignalClient()
OneSignalCoreImpl.setSharedClient(mockClient)
OneSignalUserDefaults.initShared().saveString(forKey: OSUD_LEGACY_PLAYER_ID, withValue: "my-subscription-id")
Expand All @@ -211,9 +226,10 @@ final class OSLiveActivitiesExecutorTests: XCTestCase {
mockClient.setMockResponseForRequest(request: String(describing: request2), response: [String: Any]())

/* When */
let executor = OSLiveActivitiesExecutor(requestDispatch: MockDispatchQueue())
let executor = OSLiveActivitiesExecutor(requestDispatch: mockDispatchQueue)
executor.append(request1)
executor.append(request2)
mockDispatchQueue.waitForDispatches(3)

/* Then */
XCTAssertEqual(executor.startTokens.items.count, 1)
Expand All @@ -224,6 +240,7 @@ final class OSLiveActivitiesExecutorTests: XCTestCase {

func testSetStartRequestNotExecutedWithSameActivityTypeAndDiffToken() throws {
/* Setup */
let mockDispatchQueue = MockDispatchQueue()
let mockClient = MockOneSignalClient()
OneSignalCoreImpl.setSharedClient(mockClient)
OneSignalUserDefaults.initShared().saveString(forKey: OSUD_LEGACY_PLAYER_ID, withValue: "my-subscription-id")
Expand All @@ -236,9 +253,10 @@ final class OSLiveActivitiesExecutorTests: XCTestCase {
mockClient.setMockResponseForRequest(request: String(describing: request2), response: [String: Any]())

/* When */
let executor = OSLiveActivitiesExecutor(requestDispatch: MockDispatchQueue())
let executor = OSLiveActivitiesExecutor(requestDispatch: mockDispatchQueue)
executor.append(request1)
executor.append(request2)
mockDispatchQueue.waitForDispatches(3)

/* Then */
XCTAssertEqual(executor.startTokens.items.count, 1)
Expand All @@ -250,6 +268,7 @@ final class OSLiveActivitiesExecutorTests: XCTestCase {

func testSetStartRequestFollowedByRemoveStartIsSuccessful() throws {
/* Setup */
let mockDispatchQueue = MockDispatchQueue()
let mockClient = MockOneSignalClient()
OneSignalCoreImpl.setSharedClient(mockClient)
OneSignalUserDefaults.initShared().saveString(forKey: OSUD_LEGACY_PLAYER_ID, withValue: "my-subscription-id")
Expand All @@ -262,9 +281,10 @@ final class OSLiveActivitiesExecutorTests: XCTestCase {
mockClient.setMockResponseForRequest(request: String(describing: request2), response: [String: Any]())

/* When */
let executor = OSLiveActivitiesExecutor(requestDispatch: MockDispatchQueue())
let executor = OSLiveActivitiesExecutor(requestDispatch: mockDispatchQueue)
executor.append(request1)
executor.append(request2)
mockDispatchQueue.waitForDispatches(4)

/* Then */
XCTAssertEqual(executor.startTokens.items.count, 0)
Expand All @@ -275,6 +295,7 @@ final class OSLiveActivitiesExecutorTests: XCTestCase {

func testSetUpdateRequestNotExecutedWithSameActivityIdAndToken() throws {
/* Setup */
let mockDispatchQueue = MockDispatchQueue()
let mockClient = MockOneSignalClient()
OneSignalCoreImpl.setSharedClient(mockClient)
OneSignalUserDefaults.initShared().saveString(forKey: OSUD_LEGACY_PLAYER_ID, withValue: "my-subscription-id")
Expand All @@ -287,9 +308,10 @@ final class OSLiveActivitiesExecutorTests: XCTestCase {
mockClient.setMockResponseForRequest(request: String(describing: request2), response: [String: Any]())

/* When */
let executor = OSLiveActivitiesExecutor(requestDispatch: MockDispatchQueue())
let executor = OSLiveActivitiesExecutor(requestDispatch: mockDispatchQueue)
executor.append(request1)
executor.append(request2)
mockDispatchQueue.waitForDispatches(3)

/* Then */
XCTAssertEqual(executor.updateTokens.items.count, 1)
Expand All @@ -300,6 +322,7 @@ final class OSLiveActivitiesExecutorTests: XCTestCase {

func testSetUpdateRequestNotExecutedWithSameActivityIdAndDiffToken() throws {
/* Setup */
let mockDispatchQueue = MockDispatchQueue()
let mockClient = MockOneSignalClient()
OneSignalCoreImpl.setSharedClient(mockClient)
OneSignalUserDefaults.initShared().saveString(forKey: OSUD_LEGACY_PLAYER_ID, withValue: "my-subscription-id")
Expand All @@ -312,9 +335,10 @@ final class OSLiveActivitiesExecutorTests: XCTestCase {
mockClient.setMockResponseForRequest(request: String(describing: request2), response: [String: Any]())

/* When */
let executor = OSLiveActivitiesExecutor(requestDispatch: MockDispatchQueue())
let executor = OSLiveActivitiesExecutor(requestDispatch: mockDispatchQueue)
executor.append(request1)
executor.append(request2)
mockDispatchQueue.waitForDispatches(3)

/* Then */
XCTAssertEqual(executor.updateTokens.items.count, 1)
Expand All @@ -326,6 +350,7 @@ final class OSLiveActivitiesExecutorTests: XCTestCase {

func testSetUpdateRequestFollowedByRemoveUpdateIsSuccessful() throws {
/* Setup */
let mockDispatchQueue = MockDispatchQueue()
let mockClient = MockOneSignalClient()
OneSignalCoreImpl.setSharedClient(mockClient)
OneSignalUserDefaults.initShared().saveString(forKey: OSUD_LEGACY_PLAYER_ID, withValue: "my-subscription-id")
Expand All @@ -338,9 +363,10 @@ final class OSLiveActivitiesExecutorTests: XCTestCase {
mockClient.setMockResponseForRequest(request: String(describing: request2), response: [String: Any]())

/* When */
let executor = OSLiveActivitiesExecutor(requestDispatch: MockDispatchQueue())
let executor = OSLiveActivitiesExecutor(requestDispatch: mockDispatchQueue)
executor.append(request1)
executor.append(request2)
mockDispatchQueue.waitForDispatches(4)

/* Then */
XCTAssertEqual(executor.updateTokens.items.count, 0)
Expand Down

0 comments on commit 44c8cd3

Please sign in to comment.