Browse Source

Added tests around response data, string and json serializer result behavior.

Christian Noon 10 years ago
parent
commit
d29f30f25f
1 changed files with 193 additions and 5 deletions
  1. 193 5
      Tests/ResponseTests.swift

+ 193 - 5
Tests/ResponseTests.swift

@@ -24,11 +24,199 @@ import Alamofire
 import Foundation
 import XCTest
 
-class JSONResponseTestCase: BaseTestCase {
-    func testGETRequestJSONResponse() {
+class ResponseDataTestCase: BaseTestCase {
+    func testThatResponseDataReturnsSuccessResultWithValidData() {
         // Given
         let URLString = "https://httpbin.org/get"
-        let expectation = expectationWithDescription("\(URLString)")
+        let expectation = expectationWithDescription("request should succeed")
+
+        var request: NSURLRequest?
+        var response: NSHTTPURLResponse?
+        var result: Result<NSData>!
+
+        // When
+        Alamofire.request(.GET, URLString, parameters: ["foo": "bar"])
+            .responseData { responseRequest, responseResponse, responseResult in
+                request = responseRequest
+                response = responseResponse
+                result = responseResult
+
+                expectation.fulfill()
+            }
+
+        waitForExpectationsWithTimeout(defaultTimeout, handler: nil)
+
+        // Then
+        XCTAssertNotNil(request, "request should not be nil")
+        XCTAssertNotNil(response, "response should not be nil")
+        XCTAssertTrue(result.isSuccess, "result should be success")
+        XCTAssertNotNil(result.value, "result value should not be nil")
+        XCTAssertNil(result.data, "result data should be nil")
+        XCTAssertNil(result.error, "result error should be nil")
+    }
+
+    func testThatResponseDataReturnsFailureResultWithOptionalDataAndError() {
+        // Given
+        let URLString = "https://invalid-url-here.org/this/does/not/exist"
+        let expectation = expectationWithDescription("request should fail with 404")
+
+        var request: NSURLRequest?
+        var response: NSHTTPURLResponse?
+        var result: Result<NSData>!
+
+        // When
+        Alamofire.request(.GET, URLString, parameters: ["foo": "bar"])
+            .responseData { responseRequest, responseResponse, responseResult in
+                request = responseRequest
+                response = responseResponse
+                result = responseResult
+
+                expectation.fulfill()
+            }
+
+        waitForExpectationsWithTimeout(defaultTimeout, handler: nil)
+
+        // Then
+        XCTAssertNotNil(request, "request should not be nil")
+        XCTAssertNil(response, "response should be nil")
+        XCTAssertTrue(result.isFailure, "result should be a failure")
+        XCTAssertNil(result.value, "result value should not be nil")
+        XCTAssertNotNil(result.data, "result data should be nil")
+        XCTAssertNotNil(result.error, "result error should be nil")
+    }
+}
+
+// MARK: -
+
+class ResponseStringTestCase: BaseTestCase {
+    func testThatResponseStringReturnsSuccessResultWithValidString() {
+        // Given
+        let URLString = "https://httpbin.org/get"
+        let expectation = expectationWithDescription("request should succeed")
+
+        var request: NSURLRequest?
+        var response: NSHTTPURLResponse?
+        var result: Result<String>!
+
+        // When
+        Alamofire.request(.GET, URLString, parameters: ["foo": "bar"])
+            .responseString { responseRequest, responseResponse, responseResult in
+                request = responseRequest
+                response = responseResponse
+                result = responseResult
+
+                expectation.fulfill()
+            }
+
+        waitForExpectationsWithTimeout(defaultTimeout, handler: nil)
+
+        // Then
+        XCTAssertNotNil(request, "request should not be nil")
+        XCTAssertNotNil(response, "response should not be nil")
+        XCTAssertTrue(result.isSuccess, "result should be success")
+        XCTAssertNotNil(result.value, "result value should not be nil")
+        XCTAssertNil(result.data, "result data should be nil")
+        XCTAssertNil(result.error, "result error should be nil")
+    }
+
+    func testThatResponseStringReturnsFailureResultWithOptionalDataAndError() {
+        // Given
+        let URLString = "https://invalid-url-here.org/this/does/not/exist"
+        let expectation = expectationWithDescription("request should fail with 404")
+
+        var request: NSURLRequest?
+        var response: NSHTTPURLResponse?
+        var result: Result<String>!
+
+        // When
+        Alamofire.request(.GET, URLString, parameters: ["foo": "bar"])
+            .responseString { responseRequest, responseResponse, responseResult in
+                request = responseRequest
+                response = responseResponse
+                result = responseResult
+
+                expectation.fulfill()
+            }
+
+        waitForExpectationsWithTimeout(defaultTimeout, handler: nil)
+
+        // Then
+        XCTAssertNotNil(request, "request should not be nil")
+        XCTAssertNil(response, "response should be nil")
+        XCTAssertTrue(result.isFailure, "result should be a failure")
+        XCTAssertNil(result.value, "result value should not be nil")
+        XCTAssertNotNil(result.data, "result data should be nil")
+        XCTAssertNotNil(result.error, "result error should be nil")
+    }
+}
+
+// MARK: -
+
+class ResponseJSONTestCase: BaseTestCase {
+    func testThatResponseJSONReturnsSuccessResultWithValidJSON() {
+        // Given
+        let URLString = "https://httpbin.org/get"
+        let expectation = expectationWithDescription("request should succeed")
+
+        var request: NSURLRequest?
+        var response: NSHTTPURLResponse?
+        var result: Result<AnyObject>!
+
+        // When
+        Alamofire.request(.GET, URLString, parameters: ["foo": "bar"])
+            .responseJSON { responseRequest, responseResponse, responseResult in
+                request = responseRequest
+                response = responseResponse
+                result = responseResult
+
+                expectation.fulfill()
+            }
+
+        waitForExpectationsWithTimeout(defaultTimeout, handler: nil)
+
+        // Then
+        XCTAssertNotNil(request, "request should not be nil")
+        XCTAssertNotNil(response, "response should not be nil")
+        XCTAssertTrue(result.isSuccess, "result should be success")
+        XCTAssertNotNil(result.value, "result value should not be nil")
+        XCTAssertNil(result.data, "result data should be nil")
+        XCTAssertNil(result.error, "result error should be nil")
+    }
+
+    func testThatResponseStringReturnsFailureResultWithOptionalDataAndError() {
+        // Given
+        let URLString = "https://invalid-url-here.org/this/does/not/exist"
+        let expectation = expectationWithDescription("request should fail with 404")
+
+        var request: NSURLRequest?
+        var response: NSHTTPURLResponse?
+        var result: Result<AnyObject>!
+
+        // When
+        Alamofire.request(.GET, URLString, parameters: ["foo": "bar"])
+            .responseJSON { responseRequest, responseResponse, responseResult in
+                request = responseRequest
+                response = responseResponse
+                result = responseResult
+
+                expectation.fulfill()
+            }
+
+        waitForExpectationsWithTimeout(defaultTimeout, handler: nil)
+
+        // Then
+        XCTAssertNotNil(request, "request should not be nil")
+        XCTAssertNil(response, "response should be nil")
+        XCTAssertTrue(result.isFailure, "result should be a failure")
+        XCTAssertNil(result.value, "result value should not be nil")
+        XCTAssertNotNil(result.data, "result data should be nil")
+        XCTAssertNotNil(result.error, "result error should be nil")
+    }
+
+    func testThatResponseJSONReturnsSuccessResultForGETRequest() {
+        // Given
+        let URLString = "https://httpbin.org/get"
+        let expectation = expectationWithDescription("request should succeed")
 
         var request: NSURLRequest?
         var response: NSHTTPURLResponse?
@@ -60,10 +248,10 @@ class JSONResponseTestCase: BaseTestCase {
         }
     }
 
-    func testPOSTRequestJSONResponse() {
+    func testThatResponseJSONReturnsSuccessResultForPOSTRequest() {
         // Given
         let URLString = "https://httpbin.org/post"
-        let expectation = expectationWithDescription("\(URLString)")
+        let expectation = expectationWithDescription("request should succeed")
 
         var request: NSURLRequest?
         var response: NSHTTPURLResponse?