Test function
This commit is contained in:
parent
db1f3b903f
commit
f4a8f61fc5
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
import Foundation
|
||||
|
||||
struct TestEntity: Codable {
|
||||
let status: Int
|
||||
let error: String?
|
||||
}
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue