@@ -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 {
@@ -76,7 +100,49 @@ class InAppHelperTests: XCTestCase {
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+
112+ let initialFailedAuthCount = authManager. failedAuthCount
113+
114+ InAppHelper . getInAppMessagesFromServer ( apiClient: apiClient,
115+ authManager: authManager,
116+ number: apiClient. numOfMessages) . onSuccess { messages in
117+ print ( messages)
118+ } . onError { error in
119+ XCTFail ( " expected success, got error: \( error) " )
120+ }
121+
122+ InAppHelper . getInAppMessagesFromServer ( apiClient: apiClient,
123+ authManager: authManager,
124+ number: apiClient. numOfMessages,
125+ successHandler: { data in
126+ XCTAssertTrue ( authManager. handleAuthFailureCalled)
127+ XCTAssertTrue ( authManager. getNextRetryIntervalCalled)
128+
129+ XCTAssertTrue ( authManager. retryWasRequested)
130+ XCTAssertEqual ( authManager. getAuthToken ( ) , " newAuthToken " )
131+ } ) . onSuccess { messages in
132+ print ( messages)
133+ } . onError { error in
134+ XCTFail ( " expected success, got error: \( error) " )
135+ }
136+
137+ InAppHelper . getInAppMessagesFromServer ( apiClient: apiClient,
138+ authManager: authManager,
139+ number: apiClient. numOfMessages) . onSuccess { messages in
140+ XCTAssertTrue ( authManager. retryWasRequested)
141+ } . onError { error in
142+ XCTFail ( " expected success, got error: \( error) " )
143+ }
144+ }
145+
80146 func testParseURL( ) {
81147 let urlWithNoScheme = URL ( string: " blah " ) !
82148 XCTAssertNil ( InAppHelper . parse ( inAppUrl: urlWithNoScheme) )
0 commit comments