@@ -152,6 +152,31 @@ final class OSLiveActivitiesExecutorTests: XCTestCase {
152152 XCTAssertTrue ( mockClient. executedRequests [ 0 ] == request)
153153 }
154154
155+ func testReceiveReceiptsWithSuccessfulRequest( ) throws {
156+ /* Setup */
157+ let mockDispatchQueue = MockDispatchQueue ( )
158+ let mockClient = MockOneSignalClient ( )
159+ OneSignalCoreImpl . setSharedClient ( mockClient)
160+ OneSignalUserDefaults . initShared ( ) . saveString ( forKey: OSUD_LEGACY_PLAYER_ID, withValue: " my-subscription-id " )
161+ OneSignalUserManagerImpl . sharedInstance. start ( )
162+ // Wait for any user setup requests to complete
163+ OneSignalCoreMocks . waitForBackgroundThreads ( seconds: 0.2 )
164+ mockClient. reset ( )
165+
166+ let request = OSRequestLiveActivityReceiveReceipts ( key: " notification-id " , activityType: " my-activity-type " , activityId: " my-activity-id " )
167+ mockClient. setMockResponseForRequest ( request: String ( describing: request) , response: [ String: Any] ( ) )
168+
169+ /* When */
170+ let executor = OSLiveActivitiesExecutor ( requestDispatch: mockDispatchQueue)
171+ executor. append ( request)
172+ mockDispatchQueue. waitForDispatches ( 2 )
173+
174+ /* Then */
175+ XCTAssertEqual ( executor. receiveReceipts. items. count, 0 )
176+ XCTAssertEqual ( mockClient. executedRequests. count, 1 )
177+ XCTAssertTrue ( mockClient. executedRequests [ 0 ] == request)
178+ }
179+
155180 func testRequestWillNotExecuteWhenNoSubscription( ) throws {
156181 /* Setup */
157182 let mockDispatchQueue = MockDispatchQueue ( )
@@ -235,12 +260,14 @@ final class OSLiveActivitiesExecutorTests: XCTestCase {
235260 let removeStartToken = OSRequestRemoveStartToken ( key: " key-removeStartToken " )
236261 let setUpdateToken = OSRequestSetUpdateToken ( key: " key-setUpdateToken " , token: " my-token " )
237262 let removeUpdateToken = OSRequestRemoveUpdateToken ( key: " key-removeUpdateToken " )
263+ let receiveReceipt = OSRequestLiveActivityReceiveReceipts ( key: " key-receiveReceipt " , activityType: " my-activity-type " , activityId: " my-activity-id " )
238264
239265 executor1. append ( setStartToken)
240266 executor1. append ( removeStartToken)
241267 executor1. append ( setUpdateToken)
242268 executor1. append ( removeUpdateToken)
243- mockDispatchQueue. waitForDispatches ( 4 )
269+ executor1. append ( receiveReceipt)
270+ mockDispatchQueue. waitForDispatches ( 5 )
244271
245272 // create a new executor which will uncache requests
246273 let executor2 = OSLiveActivitiesExecutor ( requestDispatch: MockDispatchQueue ( ) )
@@ -253,6 +280,9 @@ final class OSLiveActivitiesExecutorTests: XCTestCase {
253280 XCTAssertEqual ( executor2. updateTokens. items. count, 2 )
254281 XCTAssertTrue ( executor2. updateTokens. items [ " key-setUpdateToken " ] is OSRequestSetUpdateToken )
255282 XCTAssertTrue ( executor2. updateTokens. items [ " key-removeUpdateToken " ] is OSRequestRemoveUpdateToken )
283+
284+ XCTAssertEqual ( executor2. receiveReceipts. items. count, 1 )
285+ XCTAssertTrue ( executor2. receiveReceipts. items [ " key-receiveReceipt " ] is OSRequestLiveActivityReceiveReceipts )
256286 }
257287
258288 func testSetStartRequestNotExecutedWithSameActivityTypeAndToken( ) throws {
@@ -430,4 +460,32 @@ final class OSLiveActivitiesExecutorTests: XCTestCase {
430460 XCTAssertTrue ( mockClient. executedRequests [ 0 ] == request1)
431461 XCTAssertTrue ( mockClient. executedRequests [ 1 ] == request2)
432462 }
463+
464+ func testReceiveReceiptsRequestNotExecutedWithSameNotificationId( ) throws {
465+ /* Setup */
466+ let mockDispatchQueue = MockDispatchQueue ( )
467+ let mockClient = MockOneSignalClient ( )
468+ OneSignalCoreImpl . setSharedClient ( mockClient)
469+ OneSignalUserDefaults . initShared ( ) . saveString ( forKey: OSUD_LEGACY_PLAYER_ID, withValue: " my-subscription-id " )
470+ OneSignalUserManagerImpl . sharedInstance. start ( )
471+ // Wait for any user setup requests to complete
472+ OneSignalCoreMocks . waitForBackgroundThreads ( seconds: 0.2 )
473+ mockClient. reset ( )
474+
475+ let request1 = OSRequestLiveActivityReceiveReceipts ( key: " my-notification-id " , activityType: " my-activity-type-1 " , activityId: " my-activity-id-1 " )
476+ let request2 = OSRequestLiveActivityReceiveReceipts ( key: " my-notification-id " , activityType: " my-activity-type-2 " , activityId: " my-activity-id-2 " )
477+ mockClient. setMockResponseForRequest ( request: String ( describing: request1) , response: [ String: Any] ( ) )
478+ mockClient. setMockResponseForRequest ( request: String ( describing: request2) , response: [ String: Any] ( ) )
479+
480+ /* When */
481+ let executor = OSLiveActivitiesExecutor ( requestDispatch: mockDispatchQueue)
482+ executor. append ( request1)
483+ executor. append ( request2)
484+ mockDispatchQueue. waitForDispatches ( 3 )
485+
486+ /* Then */
487+ XCTAssertEqual ( executor. receiveReceipts. items. count, 0 )
488+ XCTAssertEqual ( mockClient. executedRequests. count, 1 )
489+ XCTAssertTrue ( mockClient. executedRequests [ 0 ] == request1)
490+ }
433491}
0 commit comments