@@ -6,6 +6,30 @@ import XCTest
66
77@testable import IterableSDK
88
9+ private final class RetryingApiClient : BlankApiClient {
10+ var numOfMessages = 3
11+ var callCount = - 1
12+ var lastCountRequested : NSNumber ?
13+ var failureReason = " jwt token is expired "
14+ weak var authManager : MockAuthManager ?
15+
16+ override func getInAppMessages( _ count: NSNumber ) -> Pending < SendRequestValue , SendRequestError > {
17+ callCount += 1
18+ lastCountRequested = count
19+
20+ if callCount == 0 {
21+ return Fulfill ( value: TestInAppPayloadGenerator . createPayloadWithUrl ( numMessages: numOfMessages) )
22+ }
23+
24+ if authManager? . retryWasRequested == true {
25+ return Fulfill ( value: TestInAppPayloadGenerator . createPayloadWithUrl ( numMessages: numOfMessages) )
26+ }
27+ return Fulfill ( error: SendRequestError ( reason: failureReason,
28+ httpStatusCode: 401 ,
29+ iterableCode: JsonValue . Code. invalidJwtPayload) )
30+ }
31+ }
32+
933class InAppHelperTests : XCTestCase {
1034 func testGetInAppMessagesWithNoError( ) {
1135 class MyApiClient : BlankApiClient {
@@ -15,7 +39,7 @@ class InAppHelperTests: XCTestCase {
1539 }
1640 }
1741
18- InAppHelper . getInAppMessagesFromServer ( apiClient: MyApiClient ( ) , number: 10 ) . onSuccess { messages in
42+ InAppHelper . getInAppMessagesFromServer ( apiClient: MyApiClient ( ) , authManager : nil , number: 10 ) . onSuccess { messages in
1943 XCTAssertEqual ( messages. count, 3 )
2044 XCTAssertEqual ( messages [ 0 ] . messageId, " message1 " )
2145 XCTAssertEqual ( messages [ 1 ] . messageId, " message2 " )
@@ -69,14 +93,53 @@ class InAppHelperTests: XCTestCase {
6993 }
7094 }
7195
72- InAppHelper . getInAppMessagesFromServer ( apiClient: MyApiClient ( expectation: expectation1) , number: 10 ) . onSuccess { messages in
96+ InAppHelper . getInAppMessagesFromServer ( apiClient: MyApiClient ( expectation: expectation1) , authManager : nil , number: 10 ) . onSuccess { messages in
7397 XCTAssertEqual ( messages. count, 1 )
7498 XCTAssertEqual ( messages [ 0 ] . messageId, " message1 " )
7599 }
76100
77101 wait ( for: [ expectation1] , timeout: testExpectationTimeout)
78102 }
79-
103+
104+ func testGetInAppMessagesRetriesAfterJWT401( ) {
105+ let authManager = MockAuthManager ( )
106+ authManager. shouldRetry = true
107+
108+ let apiClient = RetryingApiClient ( )
109+ apiClient. authManager = authManager
110+
111+ InAppHelper . getInAppMessagesFromServer ( apiClient: apiClient,
112+ authManager: authManager,
113+ number: apiClient. numOfMessages) . onSuccess { messages in
114+ print ( messages)
115+ } . onError { error in
116+ XCTFail ( " expected success, got error: \( error) " )
117+ }
118+
119+ InAppHelper . getInAppMessagesFromServer ( apiClient: apiClient,
120+ authManager: authManager,
121+ number: apiClient. numOfMessages,
122+ successHandler: { data in
123+ XCTAssertTrue ( authManager. handleAuthFailureCalled)
124+ XCTAssertTrue ( authManager. getNextRetryIntervalCalled)
125+
126+ XCTAssertTrue ( authManager. retryWasRequested)
127+ XCTAssertEqual ( authManager. getAuthToken ( ) , " newAuthToken " )
128+ } ) . onSuccess { messages in
129+ print ( messages)
130+ } . onError { error in
131+ XCTFail ( " expected success, got error: \( error) " )
132+ }
133+
134+ InAppHelper . getInAppMessagesFromServer ( apiClient: apiClient,
135+ authManager: authManager,
136+ number: apiClient. numOfMessages) . onSuccess { messages in
137+ XCTAssertTrue ( authManager. retryWasRequested)
138+ } . onError { error in
139+ XCTFail ( " expected success, got error: \( error) " )
140+ }
141+ }
142+
80143 func testParseURL( ) {
81144 let urlWithNoScheme = URL ( string: " blah " ) !
82145 XCTAssertNil ( InAppHelper . parse ( inAppUrl: urlWithNoScheme) )
0 commit comments