add test pattern for parsing `httpBody`

This commit is contained in:
417-72KI 2021-11-13 18:13:37 +09:00
parent 40bd037f97
commit 12b4ef7329
5 changed files with 95 additions and 14 deletions

View File

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

View File

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

View File

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

View File

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

View File

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