Test function

This commit is contained in:
417-72KI 2019-12-19 09:53:45 +09:00
parent db1f3b903f
commit f4a8f61fc5
5 changed files with 90 additions and 25 deletions

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,6 @@
import Foundation
struct TestEntity: Codable {
let status: Int
let error: String?
}

View File

@ -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)
}
}
}

View File

@ -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
}
}