Skip to content

Commit 7d12cc4

Browse files
authored
Merge pull request #1589 from OneSignal/fix/live_activities_caching
fix: live activities uncaches correctly
2 parents 302e7a1 + 4f67d05 commit 7d12cc4

File tree

4 files changed

+37
-6
lines changed

4 files changed

+37
-6
lines changed

iOS_SDK/OneSignalSDK/OneSignalLiveActivities/Source/Executors/OSLiveActivitiesExecutor.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,9 @@ class RequestCache {
4848
init(cacheKey: String, ttl: TimeInterval) {
4949
self.cacheKey = cacheKey
5050
self.ttl = ttl
51-
self.items = OneSignalUserDefaults.initShared()
52-
.getSavedCodeableData(forKey: cacheKey, defaultValue: nil) as? [String: OSLiveActivityRequest] ?? [String: OSLiveActivityRequest]()
51+
let cached = OneSignalUserDefaults.initShared().getSavedCodeableData(forKey: cacheKey, defaultValue: nil)
52+
// for safe-casting to the protocol, the intermediary cast to AnyObject is necessary
53+
self.items = cached as? [String: AnyObject] as? [String: OSLiveActivityRequest] ?? [String: OSLiveActivityRequest]()
5354
OneSignalLog.onesignalLog(.LL_VERBOSE, message: "OneSignal.LiveActivities initialized token cache \(self): \(items)")
5455
}
5556

iOS_SDK/OneSignalSDK/OneSignalLiveActivities/Source/Requests/OSRequestRemoveStartToken.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,14 +78,13 @@ class OSRequestRemoveStartToken: OneSignalRequest, OSLiveActivityRequest, OSLive
7878
required init?(coder: NSCoder) {
7979
guard
8080
let key = coder.decodeObject(forKey: "key") as? String,
81-
let requestSuccessful = coder.decodeObject(forKey: "requestSuccessful") as? Bool,
8281
let timestamp = coder.decodeObject(forKey: "timestamp") as? Date
8382
else {
8483
// Log error
8584
return nil
8685
}
8786
self.key = key
88-
self.requestSuccessful = requestSuccessful
87+
self.requestSuccessful = coder.decodeBool(forKey: "requestSuccessful")
8988
super.init()
9089
self.timestamp = timestamp
9190
}

iOS_SDK/OneSignalSDK/OneSignalLiveActivities/Source/Requests/OSRequestRemoveUpdateToken.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,14 +79,13 @@ class OSRequestRemoveUpdateToken: OneSignalRequest, OSLiveActivityRequest, OSLiv
7979
required init?(coder: NSCoder) {
8080
guard
8181
let key = coder.decodeObject(forKey: "key") as? String,
82-
let requestSuccessful = coder.decodeObject(forKey: "requestSuccessful") as? Bool,
8382
let timestamp = coder.decodeObject(forKey: "timestamp") as? Date
8483
else {
8584
// Log error
8685
return nil
8786
}
8887
self.key = key
89-
self.requestSuccessful = requestSuccessful
88+
self.requestSuccessful = coder.decodeBool(forKey: "requestSuccessful")
9089
super.init()
9190
self.timestamp = timestamp
9291
}

iOS_SDK/OneSignalSDK/OneSignalLiveActivitiesTests/OSLiveActivitiesExecutorTests.swift

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,38 @@ final class OSLiveActivitiesExecutorTests: XCTestCase {
223223
XCTAssertTrue(mockClient.executedRequests[0] == request)
224224
}
225225

226+
func testRequestsUncacheCorrectly() throws {
227+
/* Setup */
228+
let mockClient = MockOneSignalClient()
229+
OneSignalCoreImpl.setSharedClient(mockClient)
230+
let mockDispatchQueue = MockDispatchQueue()
231+
let executor1 = OSLiveActivitiesExecutor(requestDispatch: mockDispatchQueue)
232+
233+
/* When */
234+
let setStartToken = OSRequestSetStartToken(key: "key-setStartToken", token: "my-token")
235+
let removeStartToken = OSRequestRemoveStartToken(key: "key-removeStartToken")
236+
let setUpdateToken = OSRequestSetUpdateToken(key: "key-setUpdateToken", token: "my-token")
237+
let removeUpdateToken = OSRequestRemoveUpdateToken(key: "key-removeUpdateToken")
238+
239+
executor1.append(setStartToken)
240+
executor1.append(removeStartToken)
241+
executor1.append(setUpdateToken)
242+
executor1.append(removeUpdateToken)
243+
mockDispatchQueue.waitForDispatches(4)
244+
245+
// create a new executor which will uncache requests
246+
let executor2 = OSLiveActivitiesExecutor(requestDispatch: MockDispatchQueue())
247+
248+
/* Then */
249+
XCTAssertEqual(executor2.startTokens.items.count, 2)
250+
XCTAssertTrue(executor2.startTokens.items["key-setStartToken"] is OSRequestSetStartToken)
251+
XCTAssertTrue(executor2.startTokens.items["key-removeStartToken"] is OSRequestRemoveStartToken)
252+
253+
XCTAssertEqual(executor2.updateTokens.items.count, 2)
254+
XCTAssertTrue(executor2.updateTokens.items["key-setUpdateToken"] is OSRequestSetUpdateToken)
255+
XCTAssertTrue(executor2.updateTokens.items["key-removeUpdateToken"] is OSRequestRemoveUpdateToken)
256+
}
257+
226258
func testSetStartRequestNotExecutedWithSameActivityTypeAndToken() throws {
227259
/* Setup */
228260
let mockDispatchQueue = MockDispatchQueue()

0 commit comments

Comments
 (0)