Преглед изворни кода

Added RequestAdapter tests on all testable SessionManager request APIs.

Christian Noon пре 9 година
родитељ
комит
90c4a83318
2 измењених фајлова са 106 додато и 4 уклоњено
  1. 6 0
      Tests/AFError+AlamofireTests.swift
  2. 100 4
      Tests/SessionManagerTests.swift

+ 6 - 0
Tests/AFError+AlamofireTests.swift

@@ -119,6 +119,8 @@ extension AFError {
     }
 }
 
+// MARK: -
+
 extension AFError.MultipartEncodingFailureReason {
     var isBodyPartURLInvalid: Bool {
         if case .bodyPartURLInvalid = self { return true }
@@ -186,6 +188,8 @@ extension AFError.MultipartEncodingFailureReason {
     }
 }
 
+// MARK: -
+
 extension AFError.SerializationFailureReason {
     var isInputDataNil: Bool {
         if case .inputDataNil = self { return true }
@@ -213,6 +217,8 @@ extension AFError.SerializationFailureReason {
     }
 }
 
+// MARK: -
+
 extension AFError.ValidationFailureReason {
     var isMissingContentType: Bool {
         if case .missingContentType = self { return true }

+ 100 - 4
Tests/SessionManagerTests.swift

@@ -28,7 +28,23 @@ import XCTest
 
 class SessionManagerTestCase: BaseTestCase {
 
-    // MARK: Initialization Tests
+    // MARK: Helper Types
+
+    private class HTTPMethodAdapter: RequestAdapter {
+        let method: HTTPMethod
+
+        init(method: HTTPMethod) {
+            self.method = method
+        }
+
+        func adapt(_ urlRequest: URLRequest) -> URLRequest {
+            var urlRequest = urlRequest
+            urlRequest.httpMethod = method.rawValue
+            return urlRequest
+        }
+    }
+
+    // MARK: Tests - Initialization
 
     func testInitializerWithDefaultArguments() {
         // Given, When
@@ -131,7 +147,7 @@ class SessionManagerTestCase: BaseTestCase {
         XCTAssertNil(manager, "manager should be nil")
     }
 
-    // MARK: Start Requests Immediately Tests
+    // MARK: Tests - Start Requests Immediately
 
     func testSetStartRequestsImmediatelyToFalseAndResumeRequest() {
         // Given
@@ -160,7 +176,7 @@ class SessionManagerTestCase: BaseTestCase {
         XCTAssertTrue(response?.statusCode == 200, "response status code should be 200")
     }
 
-    // MARK: Deinitialization Tests
+    // MARK: Tests - Deinitialization
 
     func testReleasingManagerWithPendingRequestDeinitializesSuccessfully() {
         // Given
@@ -197,11 +213,91 @@ class SessionManagerTestCase: BaseTestCase {
         XCTAssertTrue(state == .canceling || state == .completed, "state should be .Canceling or .Completed")
         XCTAssertNil(manager, "manager should be nil")
     }
+
+    // MARK: Tests - Request Adapter
+
+    func testThatSessionManagerCallsRequestAdapterWhenCreatingDataRequest() {
+        // Given
+        let adapter = HTTPMethodAdapter(method: .post)
+
+        let sessionManager = SessionManager()
+        sessionManager.adapter = adapter
+        sessionManager.startRequestsImmediately = false
+
+        // When
+        let request = sessionManager.request("https://httpbin.org/get", withMethod: .get)
+
+        // Then
+        XCTAssertEqual(request.task.originalRequest?.httpMethod, adapter.method.rawValue)
+    }
+
+    func testThatSessionManagerCallsRequestAdapterWhenCreatingDownloadRequest() {
+        // Given
+        let adapter = HTTPMethodAdapter(method: .post)
+
+        let sessionManager = SessionManager()
+        sessionManager.adapter = adapter
+        sessionManager.startRequestsImmediately = false
+
+        // When
+        let destination = Request.suggestedDownloadDestination()
+        let request = sessionManager.download("https://httpbin.org/get", to: destination, withMethod: .get)
+
+        // Then
+        XCTAssertEqual(request.task.originalRequest?.httpMethod, adapter.method.rawValue)
+    }
+
+    func testThatSessionManagerCallsRequestAdapterWhenCreatingUploadRequestWithData() {
+        // Given
+        let adapter = HTTPMethodAdapter(method: .get)
+
+        let sessionManager = SessionManager()
+        sessionManager.adapter = adapter
+        sessionManager.startRequestsImmediately = false
+
+        // When
+        let request = sessionManager.upload("data".data(using: .utf8)!, to: "https://httpbin.org/post", withMethod: .post)
+
+        // Then
+        XCTAssertEqual(request.task.originalRequest?.httpMethod, adapter.method.rawValue)
+    }
+
+    func testThatSessionManagerCallsRequestAdapterWhenCreatingUploadRequestWithFile() {
+        // Given
+        let adapter = HTTPMethodAdapter(method: .get)
+
+        let sessionManager = SessionManager()
+        sessionManager.adapter = adapter
+        sessionManager.startRequestsImmediately = false
+
+        // When
+        let fileURL = URL(fileURLWithPath: "/path/to/some/file.txt")
+        let request = sessionManager.upload(fileURL, to: "https://httpbin.org/post", withMethod: .post)
+
+        // Then
+        XCTAssertEqual(request.task.originalRequest?.httpMethod, adapter.method.rawValue)
+    }
+
+    func testThatSessionManagerCallsRequestAdapterWhenCreatingUploadRequestWithInputStream() {
+        // Given
+        let adapter = HTTPMethodAdapter(method: .get)
+
+        let sessionManager = SessionManager()
+        sessionManager.adapter = adapter
+        sessionManager.startRequestsImmediately = false
+
+        // When
+        let inputStream = InputStream(data: "data".data(using: .utf8)!)
+        let request = sessionManager.upload(inputStream, to: "https://httpbin.org/post", withMethod: .post)
+
+        // Then
+        XCTAssertEqual(request.task.originalRequest?.httpMethod, adapter.method.rawValue)
+    }
 }
 
 // MARK: -
 
-class ManagerConfigurationHeadersTestCase: BaseTestCase {
+class SessionManagerConfigurationHeadersTestCase: BaseTestCase {
     enum ConfigurationType {
         case `default`, ephemeral, background
     }