Browse Source

Added test verifying retrier is called when request encounters adapt error.

Christian Noon 9 years ago
parent
commit
44c0706070
3 changed files with 37 additions and 3 deletions
  1. 1 1
      Source/SessionManager.swift
  2. 1 1
      Tests/DownloadTests.swift
  3. 35 1
      Tests/SessionManagerTests.swift

+ 1 - 1
Source/SessionManager.swift

@@ -806,7 +806,7 @@ open class SessionManager {
         DispatchQueue.utility.async { [weak self] in
         DispatchQueue.utility.async { [weak self] in
             guard let strongSelf = self else { return }
             guard let strongSelf = self else { return }
 
 
-            retrier.should(strongSelf, retry: request, with: error) { [weak self] shouldRetry, timeDelay in
+            retrier.should(strongSelf, retry: request, with: error) { shouldRetry, timeDelay in
                 guard let strongSelf = self else { return }
                 guard let strongSelf = self else { return }
 
 
                 guard shouldRetry else {
                 guard shouldRetry else {

+ 1 - 1
Tests/DownloadTests.swift

@@ -362,7 +362,7 @@ class DownloadResponseTestCase: BaseTestCase {
             .response { resp in
             .response { resp in
                 response = resp
                 response = resp
                 expectation.fulfill()
                 expectation.fulfill()
-        }
+            }
 
 
         waitForExpectations(timeout: timeout, handler: nil)
         waitForExpectations(timeout: timeout, handler: nil)
 
 

+ 35 - 1
Tests/SessionManagerTests.swift

@@ -52,11 +52,15 @@ class SessionManagerTestCase: BaseTestCase {
     private class RequestHandler: RequestAdapter, RequestRetrier {
     private class RequestHandler: RequestAdapter, RequestRetrier {
         var adaptedCount = 0
         var adaptedCount = 0
         var retryCount = 0
         var retryCount = 0
+
         var shouldApplyAuthorizationHeader = false
         var shouldApplyAuthorizationHeader = false
         var throwsErrorOnSecondAdapt = false
         var throwsErrorOnSecondAdapt = false
 
 
         func adapt(_ urlRequest: URLRequest) throws -> URLRequest {
         func adapt(_ urlRequest: URLRequest) throws -> URLRequest {
-            if throwsErrorOnSecondAdapt && adaptedCount == 1 { throw AFError.invalidURL(url: "") }
+            if throwsErrorOnSecondAdapt && adaptedCount == 1 {
+                throwsErrorOnSecondAdapt = false
+                throw AFError.invalidURL(url: "")
+            }
 
 
             var urlRequest = urlRequest
             var urlRequest = urlRequest
 
 
@@ -578,6 +582,36 @@ class SessionManagerTestCase: BaseTestCase {
         XCTAssertEqual(response?.result.isSuccess, false)
         XCTAssertEqual(response?.result.isSuccess, false)
     }
     }
 
 
+    func testThatSessionManagerCallsRequestRetrierWhenRequestInitiallyEncountersAdaptError() {
+        // Given
+        let handler = RequestHandler()
+        handler.adaptedCount = 1
+        handler.throwsErrorOnSecondAdapt = true
+        handler.shouldApplyAuthorizationHeader = true
+
+        let sessionManager = SessionManager()
+        sessionManager.adapter = handler
+        sessionManager.retrier = handler
+
+        let expectation = self.expectation(description: "request should eventually fail")
+        var response: DataResponse<Any>?
+
+        // When
+        sessionManager.request("https://httpbin.org/basic-auth/user/password")
+            .validate()
+            .responseJSON { jsonResponse in
+                response = jsonResponse
+                expectation.fulfill()
+            }
+
+        waitForExpectations(timeout: timeout, handler: nil)
+
+        // Then
+        XCTAssertEqual(handler.adaptedCount, 2)
+        XCTAssertEqual(handler.retryCount, 1)
+        XCTAssertEqual(response?.result.isSuccess, true)
+    }
+
     func testThatSessionManagerCallsAdapterWhenRequestIsRetried() {
     func testThatSessionManagerCallsAdapterWhenRequestIsRetried() {
         // Given
         // Given
         let handler = RequestHandler()
         let handler = RequestHandler()