MultipartFormDataParser
Testing tool for `multipart/form-data`
Install / Use
/learn @417-72KI/MultipartFormDataParserREADME
MultipartFormDataParser
MultipartFormDataParser is a testing tool for multipart/form-data request in Swift.
When to upload some files via API, we must use multipart/form-data for request.
multipart/form-data is defined as RFC-2388
Most famous networking libraries (e.g. Alamofire, APIKit) can implement easily. However, to test if the created request is as expected is difficult and bothering.
This library provides a parser for multipart/form-data request to test it briefly.
let request: URLRequest = ...
do {
let data = try MultipartFormData.parse(from: request)
let genbaNeko = try XCTUnwrap(data.element(forName: "genbaNeko"))
let message = try XCTUnwrap(data.element(forName: "message"))
XCTAssertNotNil(Image(data: genbaNeko.data))
XCTAssertEqual(genbaNeko.mimeType, "image/jpeg")
XCTAssertEqual(message.string, "Hello world!")
} catch {
XCTFail(error.localizedDescription)
}
Using OHHTTPStubs, we can test a request created by networking libraries easily.
let expectedGenbaNeko: Data = ...
let condition = isHost("localhost") && isPath("/upload")
stub(condition: condition) { request in
let errorResponse = { (message: String) -> HTTPStubsResponse in
.init(
jsonObject: ["status": 403, "error": message],
statusCode: 403,
headers: ["Content-Type": "application/json"]
)
}
do {
let data = try MultipartFormData.parse(from: request)
guard let genbaNeko = data.element(forName: "genbaNeko"),
genbaNeko.data == expectedGenbaNeko else { return errorResponse("Unexpected genbaNeko") }
guard let message = data.element(forName: "message"),
message.string == "Hello world!" else { return errorResponse("Unexpected message: \(message)") }
} catch {
return .init(error: error)
}
return .init(
jsonObject: ["status": 200],
statusCode: 200,
headers: ["Content-Type": "application/json"]
)
}
Installation
Swift Package Manager (recommended)
Package.swift
dependencies: [
.package(url: "https://github.com/417-72KI/MultipartFormDataParser.git", from: "2.3.2")
]
Related Skills
node-connect
344.1kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
96.8kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
344.1kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
344.1kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
