Skip to content

Commit e828526

Browse files
Test only requests with correct error are scheduled for retry.
1 parent f534267 commit e828526

File tree

1 file changed

+56
-1
lines changed

1 file changed

+56
-1
lines changed

Networking/NetworkingTests/ApplicationPassword/RequestProcessorTests.swift

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ final class RequestProcessorTests: XCTestCase {
99
private var sut: RequestProcessor!
1010
private var sessionManager: Alamofire.SessionManager!
1111

12+
private let url = URL(string: "https://test.com/")!
13+
1214
override func setUp() {
1315
super.setUp()
1416

@@ -29,7 +31,7 @@ final class RequestProcessorTests: XCTestCase {
2931
//
3032
func test_adapt_authenticates_the_urlrequest() throws {
3133
// Given
32-
let urlRequest = URLRequest(url: URL(string: "https://test.com/")!)
34+
let urlRequest = URLRequest(url: url)
3335

3436
// When
3537
let _ = try sut.adapt(urlRequest)
@@ -109,6 +111,59 @@ final class RequestProcessorTests: XCTestCase {
109111
// Then
110112
XCTAssertFalse(shouldRetry)
111113
}
114+
115+
// MARK: Error type
116+
//
117+
func test_request_is_scheduled_for_retry_when_applicationPasswordNotAvailable_error_occurs() throws {
118+
// Given
119+
let sessionManager = Alamofire.SessionManager(configuration: URLSessionConfiguration.default)
120+
let request = try mockRequest()
121+
122+
// When
123+
let error = RequestAuthenticatorError.applicationPasswordNotAvailable
124+
let shouldRetry = waitFor { promise in
125+
self.sut.should(sessionManager, retry: request, with: error) { shouldRetry, timeDelay in
126+
promise(shouldRetry)
127+
}
128+
}
129+
130+
// Then
131+
XCTAssertTrue(shouldRetry)
132+
}
133+
134+
func test_request_is_scheduled_for_retry_when_401_error_occurs() throws {
135+
// Given
136+
let sessionManager = Alamofire.SessionManager(configuration: URLSessionConfiguration.default)
137+
let request = try mockRequest()
138+
139+
// When
140+
let error = AFError.responseValidationFailed(reason: .unacceptableStatusCode(code: 401))
141+
let shouldRetry = waitFor { promise in
142+
self.sut.should(sessionManager, retry: request, with: error) { shouldRetry, timeDelay in
143+
promise(shouldRetry)
144+
}
145+
}
146+
147+
// Then
148+
XCTAssertTrue(shouldRetry)
149+
}
150+
151+
func test_request_is_not_scheduled_for_retry_when_irrelavant_error_occurs() throws {
152+
// Given
153+
let sessionManager = Alamofire.SessionManager(configuration: URLSessionConfiguration.default)
154+
let request = try mockRequest()
155+
156+
// When
157+
let error = AFError.invalidURL(url: url)
158+
let shouldRetry = waitFor { promise in
159+
self.sut.should(sessionManager, retry: request, with: error) { shouldRetry, timeDelay in
160+
promise(shouldRetry)
161+
}
162+
}
163+
164+
// Then
165+
XCTAssertFalse(shouldRetry)
166+
}
112167
}
113168

114169
// MARK: Helpers

0 commit comments

Comments
 (0)