From f4a8f61fc59a44e02bfc9d4d074cb7daa336fd61 Mon Sep 17 00:00:00 2001 From: 417-72KI <417.72ki@gmail.com> Date: Thu, 19 Dec 2019 09:53:45 +0900 Subject: [PATCH] Test function --- ...MultipartFormDataTestUtil_CocoaTests.swift | 9 ++- ...MultipartFormDataTestUtil_UIKitTests.swift | 17 +++-- .../TestEntity.swift | 6 ++ .../TestFunctions/TestFunction_APIKit.swift | 72 +++++++++++++++++++ .../TestFunction_Alamofire.swift} | 11 --- 5 files changed, 90 insertions(+), 25 deletions(-) create mode 100644 Tests/MultipartFormDataParserTests/TestEntity.swift create mode 100644 Tests/MultipartFormDataParserTests/TestFunctions/TestFunction_APIKit.swift rename Tests/MultipartFormDataParserTests/{TestFunction.swift => TestFunctions/TestFunction_Alamofire.swift} (84%) diff --git a/Tests/MultipartFormDataParserTests/MultipartFormDataTestUtil_CocoaTests.swift b/Tests/MultipartFormDataParserTests/MultipartFormDataTestUtil_CocoaTests.swift index d5f1dc8..54b2e50 100644 --- a/Tests/MultipartFormDataParserTests/MultipartFormDataTestUtil_CocoaTests.swift +++ b/Tests/MultipartFormDataParserTests/MultipartFormDataTestUtil_CocoaTests.swift @@ -25,15 +25,14 @@ final class MultipartFormDataParser_CocoaTests: XCTestCase { XCTAssertNil(dic["error"]) } - func testAPIKit() { + func testAPIKit() throws { let genbaNeko = try XCTUnwrap(NSImage(data: TestResource.genbaNeko)?.jpegRepresentation) let denwaNeko = try XCTUnwrap(NSImage(data: TestResource.denwaNeko)?.jpegRepresentation) let message = try XCTUnwrap("Hello world!".data(using: .utf8)) - let data = try XCTUnwrap(uploadWithAPIKit(genbaNeko: genbaNeko, denwaNeko: denwaNeko, message: message)) - let dic = try XCTUnwrap(JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]) - XCTAssertEqual(dic["status"] as? Int, 200) - XCTAssertNil(dic["error"]) + let result = try XCTUnwrap(uploadWithAPIKit(genbaNeko: genbaNeko, denwaNeko: denwaNeko, message: message)) + XCTAssertEqual(result.status, 200) + XCTAssertNil(result.error) } } #endif diff --git a/Tests/MultipartFormDataParserTests/MultipartFormDataTestUtil_UIKitTests.swift b/Tests/MultipartFormDataParserTests/MultipartFormDataTestUtil_UIKitTests.swift index eb2b574..b884428 100644 --- a/Tests/MultipartFormDataParserTests/MultipartFormDataTestUtil_UIKitTests.swift +++ b/Tests/MultipartFormDataParserTests/MultipartFormDataTestUtil_UIKitTests.swift @@ -25,15 +25,14 @@ final class MultipartFormDataParser_UIKitTests: XCTestCase { XCTAssertNil(dic["error"]) } - func testAPIKit() { - let genbaNeko = try XCTUnwrap(UIImage(data: TestResource.genbaNeko)?.jpegData(compressionQuality: 1)) - let denwaNeko = try XCTUnwrap(UIImage(data: TestResource.denwaNeko)?.jpegData(compressionQuality: 1)) - let message = try XCTUnwrap("Hello world!".data(using: .utf8)) + func testAPIKit() throws { + let genbaNeko = try XCTUnwrap(UIImage(data: TestResource.genbaNeko)?.jpegData(compressionQuality: 1)) + let denwaNeko = try XCTUnwrap(UIImage(data: TestResource.denwaNeko)?.jpegData(compressionQuality: 1)) + let message = try XCTUnwrap("Hello world!".data(using: .utf8)) - let data = try XCTUnwrap(uploadWithAPIKit(genbaNeko: genbaNeko, denwaNeko: denwaNeko, message: message)) - let dic = try XCTUnwrap(JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]) - XCTAssertEqual(dic["status"] as? Int, 200) - XCTAssertNil(dic["error"]) - } + let result = try XCTUnwrap(uploadWithAPIKit(genbaNeko: genbaNeko, denwaNeko: denwaNeko, message: message)) + XCTAssertEqual(result.status, 200) + XCTAssertNil(result.error) + } } #endif diff --git a/Tests/MultipartFormDataParserTests/TestEntity.swift b/Tests/MultipartFormDataParserTests/TestEntity.swift new file mode 100644 index 0000000..438f040 --- /dev/null +++ b/Tests/MultipartFormDataParserTests/TestEntity.swift @@ -0,0 +1,6 @@ +import Foundation + +struct TestEntity: Codable { + let status: Int + let error: String? +} diff --git a/Tests/MultipartFormDataParserTests/TestFunctions/TestFunction_APIKit.swift b/Tests/MultipartFormDataParserTests/TestFunctions/TestFunction_APIKit.swift new file mode 100644 index 0000000..4da5be1 --- /dev/null +++ b/Tests/MultipartFormDataParserTests/TestFunctions/TestFunction_APIKit.swift @@ -0,0 +1,72 @@ +import APIKit +import Foundation +import XCTest + +extension XCTestCase { + func uploadWithAPIKit( + genbaNeko: Data, + denwaNeko: Data, + message: Data, + file: StaticString = #file, + line: UInt = #line + ) throws -> TestEntity? { + let exp = expectation(description: "response") + let request = TestRequest(genbaNeko: genbaNeko, denwaNeko: denwaNeko, message: message) + var entity: TestEntity! + Session.shared.send(request, callbackQueue: nil) { result in + defer { exp.fulfill() } + guard case let .success(response) = result else { return } + entity = response + } + + wait(for: [exp], timeout: 10) + return entity + } +} + +private struct TestRequest: APIKit.Request { + typealias Response = TestEntity + + var baseURL: URL { URL(string: "https://localhost")! } + var path: String { "/upload" } + var method: APIKit.HTTPMethod { .post } + + var genbaNeko: Data + var denwaNeko: Data + var message: Data + + var bodyParameters: BodyParameters? { + let parts: [MultipartFormDataBodyParameters.Part] = [ + .init( + data: genbaNeko, + name: "genbaNeko", + mimeType: "genbaNeko.jpeg", + fileName: "image/jpeg" + ), + .init( + data: denwaNeko, + name: "denwaNeko", + mimeType: "denwaNeko.jpeg", + fileName: "image/jpeg" + ), + .init(data: message, name: "message") + ] + return MultipartFormDataBodyParameters(parts: parts) + } + + func response(from object: Any, urlResponse: HTTPURLResponse) throws -> Response { + switch object { + case let data as Data: + let decoder = JSONDecoder() + decoder.keyDecodingStrategy = .convertFromSnakeCase + return try decoder.decode(Response.self, from: data) + case let dic as [String: Any]: + guard let status = dic["status"] as? Int else { + throw ResponseError.unexpectedObject(object) + } + return Response(status: status, error: dic["error"] as? String) + default: + throw ResponseError.unexpectedObject(object) + } + } +} diff --git a/Tests/MultipartFormDataParserTests/TestFunction.swift b/Tests/MultipartFormDataParserTests/TestFunctions/TestFunction_Alamofire.swift similarity index 84% rename from Tests/MultipartFormDataParserTests/TestFunction.swift rename to Tests/MultipartFormDataParserTests/TestFunctions/TestFunction_Alamofire.swift index ecbc5b4..24a408e 100644 --- a/Tests/MultipartFormDataParserTests/TestFunction.swift +++ b/Tests/MultipartFormDataParserTests/TestFunctions/TestFunction_Alamofire.swift @@ -1,5 +1,4 @@ import Alamofire -import APIKit import Foundation import XCTest @@ -35,14 +34,4 @@ extension XCTestCase { XCTAssertEqual(response.statusCode, 200, file: file, line: line) return request.data } - - func uploadWithAPIKit( - genbaNeko: Data, - denwaNeko: Data, - message: Data, - file: StaticString = #file, - line: UInt = #line - ) throws -> Data? { - return nil - } }