Skip to content

Commit f534267

Browse files
Test only requests with correct shouldRetry value from RequestAuthenticator are scheduled for retry.
1 parent fea3560 commit f534267

File tree

1 file changed

+43
-1
lines changed

1 file changed

+43
-1
lines changed

Networking/NetworkingTests/ApplicationPassword/RequestProcessorTests.swift

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

93133
private 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

Comments
 (0)