@@ -25,6 +25,8 @@ final class RequestProcessorTests: XCTestCase {
2525 super. tearDown ( )
2626 }
2727
28+ // MARK: Request Authentication
29+ //
2830 func test_adapt_authenticates_the_urlrequest( ) throws {
2931 // Given
3032 let urlRequest = URLRequest ( url: URL ( string: " https://test.com/ " ) !)
@@ -36,6 +38,8 @@ final class RequestProcessorTests: XCTestCase {
3638 XCTAssertTrue ( mockRequestAuthenticator. authenticateCalled)
3739 }
3840
41+ // MARK: Retry count
42+ //
3943 func test_request_with_zero_retryCount_is_scheduled_for_retry( ) throws {
4044 // Given
4145 let sessionManager = Alamofire . SessionManager ( configuration: URLSessionConfiguration . default)
@@ -69,6 +73,42 @@ final class RequestProcessorTests: XCTestCase {
6973 // Then
7074 XCTAssertFalse ( shouldRetry)
7175 }
76+
77+ // MARK: `shouldRetry` from RequestAuthenticator
78+ //
79+ func test_request_is_scheduled_for_retry_when_request_authenticator_shouldRetry_returns_true( ) throws {
80+ // Given
81+ let sessionManager = Alamofire . SessionManager ( configuration: URLSessionConfiguration . default)
82+ let request = try mockRequest ( )
83+
84+ // When
85+ mockRequestAuthenticator. mockedShouldRetryValue = true
86+ let shouldRetry = waitFor { promise in
87+ self . sut. should ( sessionManager, retry: request, with: RequestAuthenticatorError . applicationPasswordNotAvailable) { shouldRetry, timeDelay in
88+ promise ( shouldRetry)
89+ }
90+ }
91+
92+ // Then
93+ XCTAssertTrue ( shouldRetry)
94+ }
95+
96+ func test_request_is_not_scheduled_for_retry_when_request_authenticator_shouldRetry_returns_false( ) throws {
97+ // Given
98+ let sessionManager = Alamofire . SessionManager ( configuration: URLSessionConfiguration . default)
99+ let request = try mockRequest ( )
100+
101+ // When
102+ mockRequestAuthenticator. mockedShouldRetryValue = false
103+ let shouldRetry = waitFor { promise in
104+ self . sut. should ( sessionManager, retry: request, with: RequestAuthenticatorError . applicationPasswordNotAvailable) { shouldRetry, timeDelay in
105+ promise ( shouldRetry)
106+ }
107+ }
108+
109+ // Then
110+ XCTAssertFalse ( shouldRetry)
111+ }
72112}
73113
74114// MARK: Helpers
@@ -91,6 +131,8 @@ private class MockTaskConvertible: TaskConvertible {
91131}
92132
93133private class MockRequestAuthenticator : RequestAuthenticator {
134+ var mockedShouldRetryValue : Bool ?
135+
94136 private( set) var authenticateCalled = false
95137
96138 var credentials : Networking . Credentials ? = nil
@@ -105,6 +147,6 @@ private class MockRequestAuthenticator: RequestAuthenticator {
105147 }
106148
107149 func shouldRetry( _ urlRequest: URLRequest ) -> Bool {
108- true
150+ mockedShouldRetryValue ?? true
109151 }
110152}
0 commit comments