add test pattern for parsing `httpBody`
This commit is contained in:
parent
40bd037f97
commit
12b4ef7329
|
@ -0,0 +1,5 @@
|
|||
import XCTest
|
||||
|
||||
func runActivity<Result>(named name: String, block: () throws -> Result) rethrows -> Result {
|
||||
try XCTContext.runActivity(named: name) { _ in try block() }
|
||||
}
|
|
@ -14,6 +14,17 @@ final class MultipartFormDataParser_CocoaTests: XCTestCase {
|
|||
clearStubs()
|
||||
}
|
||||
|
||||
func testRequest() 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 request = createRequest(genbaNeko: genbaNeko, denwaNeko: denwaNeko, message: message)
|
||||
let data = try MultipartFormData.parse(from: request)
|
||||
XCTAssertEqual(data.element(forName: "genbaNeko")?.data, genbaNeko)
|
||||
XCTAssertEqual(data.element(forName: "denwaNeko")?.data, denwaNeko)
|
||||
XCTAssertEqual(data.element(forName: "message")?.string, "Hello world!")
|
||||
}
|
||||
|
||||
func testAlamofire() throws {
|
||||
let genbaNeko = try XCTUnwrap(NSImage(data: TestResource.genbaNeko)?.jpegRepresentation)
|
||||
let denwaNeko = try XCTUnwrap(NSImage(data: TestResource.denwaNeko)?.jpegRepresentation)
|
||||
|
@ -29,9 +40,21 @@ final class MultipartFormDataParser_CocoaTests: XCTestCase {
|
|||
let denwaNeko = try XCTUnwrap(NSImage(data: TestResource.denwaNeko)?.jpegRepresentation)
|
||||
let message = try XCTUnwrap("Hello world!".data(using: .utf8))
|
||||
|
||||
let result = try XCTUnwrap(uploadWithAPIKit(genbaNeko: genbaNeko, denwaNeko: denwaNeko, message: message))
|
||||
XCTAssertEqual(result.status, 200)
|
||||
XCTAssertNil(result.error)
|
||||
try runActivity(named: "request") {
|
||||
let request = try requestWithAPIKit(genbaNeko: genbaNeko,
|
||||
denwaNeko: denwaNeko,
|
||||
message: message)
|
||||
let data = try MultipartFormData.parse(from: request)
|
||||
XCTAssertEqual(data.element(forName: "genbaNeko")?.data, genbaNeko)
|
||||
XCTAssertEqual(data.element(forName: "denwaNeko")?.data, denwaNeko)
|
||||
XCTAssertEqual(data.element(forName: "message")?.string, "Hello world!")
|
||||
}
|
||||
|
||||
try runActivity(named: "stub") {
|
||||
let result = try XCTUnwrap(uploadWithAPIKit(genbaNeko: genbaNeko, denwaNeko: denwaNeko, message: message))
|
||||
XCTAssertEqual(result.status, 200)
|
||||
XCTAssertNil(result.error)
|
||||
}
|
||||
}
|
||||
|
||||
func testMoya() throws {
|
||||
|
|
|
@ -14,6 +14,17 @@ final class MultipartFormDataParser_UIKitTests: XCTestCase {
|
|||
clearStubs()
|
||||
}
|
||||
|
||||
func testRequest() 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 request = createRequest(genbaNeko: genbaNeko, denwaNeko: denwaNeko, message: message)
|
||||
let data = try MultipartFormData.parse(from: request)
|
||||
XCTAssertEqual(data.element(forName: "genbaNeko")?.data, genbaNeko)
|
||||
XCTAssertEqual(data.element(forName: "denwaNeko")?.data, denwaNeko)
|
||||
XCTAssertEqual(data.element(forName: "message")?.string, "Hello world!")
|
||||
}
|
||||
|
||||
func testAlamofire() throws {
|
||||
let genbaNeko = try XCTUnwrap(UIImage(data: TestResource.genbaNeko)?.jpegData(compressionQuality: 1))
|
||||
let denwaNeko = try XCTUnwrap(UIImage(data: TestResource.denwaNeko)?.jpegData(compressionQuality: 1))
|
||||
|
@ -29,9 +40,21 @@ final class MultipartFormDataParser_UIKitTests: XCTestCase {
|
|||
let denwaNeko = try XCTUnwrap(UIImage(data: TestResource.denwaNeko)?.jpegData(compressionQuality: 1))
|
||||
let message = try XCTUnwrap("Hello world!".data(using: .utf8))
|
||||
|
||||
let result = try XCTUnwrap(uploadWithAPIKit(genbaNeko: genbaNeko, denwaNeko: denwaNeko, message: message))
|
||||
XCTAssertEqual(result.status, 200)
|
||||
XCTAssertNil(result.error)
|
||||
try runActivity(named: "request") {
|
||||
let request = try requestWithAPIKit(genbaNeko: genbaNeko,
|
||||
denwaNeko: denwaNeko,
|
||||
message: message)
|
||||
let data = try MultipartFormData.parse(from: request)
|
||||
XCTAssertEqual(data.element(forName: "genbaNeko")?.data, genbaNeko)
|
||||
XCTAssertEqual(data.element(forName: "denwaNeko")?.data, denwaNeko)
|
||||
XCTAssertEqual(data.element(forName: "message")?.string, "Hello world!")
|
||||
}
|
||||
|
||||
try runActivity(named: "stub") {
|
||||
let result = try XCTUnwrap(uploadWithAPIKit(genbaNeko: genbaNeko, denwaNeko: denwaNeko, message: message))
|
||||
XCTAssertEqual(result.status, 200)
|
||||
XCTAssertNil(result.error)
|
||||
}
|
||||
}
|
||||
|
||||
func testMoya() throws {
|
||||
|
|
|
@ -3,6 +3,21 @@ import Foundation
|
|||
import XCTest
|
||||
|
||||
extension XCTestCase {
|
||||
func requestWithAPIKit(
|
||||
genbaNeko: Data,
|
||||
denwaNeko: Data,
|
||||
message: Data,
|
||||
file: StaticString = #file,
|
||||
line: UInt = #line
|
||||
) throws -> URLRequest {
|
||||
try TestRequest(genbaNeko: genbaNeko,
|
||||
denwaNeko: denwaNeko,
|
||||
message: message,
|
||||
file: file,
|
||||
line: line)
|
||||
.buildURLRequest()
|
||||
}
|
||||
|
||||
func uploadWithAPIKit(
|
||||
genbaNeko: Data,
|
||||
denwaNeko: Data,
|
||||
|
|
|
@ -12,14 +12,7 @@ extension XCTestCase {
|
|||
) throws -> TestEntity? {
|
||||
let exp = expectation(description: "response")
|
||||
|
||||
let boundary = "YoWatanabe0417"
|
||||
var request = URLRequest(url: URL(string: "https://localhost/upload")!)
|
||||
request.httpMethod = "POST"
|
||||
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
|
||||
request.httpBody = createBody(boundary: boundary,
|
||||
genbaNeko: genbaNeko,
|
||||
denwaNeko: denwaNeko,
|
||||
message: message)
|
||||
let request = createRequest(genbaNeko: genbaNeko, denwaNeko: denwaNeko, message: message)
|
||||
var responseData: Data!
|
||||
URLSession.shared.dataTask(with: request) { data, _, _ in
|
||||
responseData = data
|
||||
|
@ -75,6 +68,28 @@ extension XCTestCase {
|
|||
}
|
||||
}
|
||||
|
||||
extension XCTestCase {
|
||||
func createRequest(
|
||||
genbaNeko: Data,
|
||||
denwaNeko: Data,
|
||||
message: Data,
|
||||
file: StaticString = #file,
|
||||
line: UInt = #line
|
||||
) -> URLRequest {
|
||||
let boundary = "YoWatanabe0417"
|
||||
var request = URLRequest(url: URL(string: "https://localhost/upload")!)
|
||||
request.httpMethod = "POST"
|
||||
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
|
||||
request.httpBody = createBody(
|
||||
boundary: boundary,
|
||||
genbaNeko: genbaNeko,
|
||||
denwaNeko: denwaNeko,
|
||||
message: message
|
||||
)
|
||||
return request
|
||||
}
|
||||
}
|
||||
|
||||
private func createBody(boundary: String,
|
||||
genbaNeko: Data,
|
||||
denwaNeko: Data,
|
||||
|
|
Loading…
Reference in New Issue