Go to file
417-72KI 268e15ba22 remove unnecessary debug print 2022-07-19 23:04:21 +09:00
.github replace tvOS simulator 2022-07-19 22:23:53 +09:00
Sources/MultipartFormDataParser remove unnecessary debug print 2022-07-19 23:04:21 +09:00
Tests/MultipartFormDataParserTests remove unused files 2022-04-18 01:17:21 +09:00
scripts add podspec updating 2022-04-18 01:31:21 +09:00
.gitignore add test report folder to .gitignore 2022-04-18 01:17:21 +09:00
.swiftlint.yml Add .swiftlint.yml 2019-12-25 17:59:01 +09:00
Dangerfile.swift fix Dangerfile 2020-09-28 19:55:52 +09:00
LICENSE Revert "Test rename" 2019-12-25 19:08:37 +09:00
Makefile use release.sh in local 2022-04-18 01:17:21 +09:00
MultipartFormDataParser.podspec Bump version to 2.0.0 2022-04-18 01:37:54 +09:00
Package.swift switch release flag to false 2022-04-18 01:37:57 +09:00
README.md remove badge about Carthage 2022-07-19 01:14:57 +09:00

README.md

MultipartFormDataParser

Actions Status Version Platform GitHub release Swift Package Manager GitHub license

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

Package.swift

dependencies: [
    .package(url: "https://github.com/417-72KI/MultipartFormDataParser.git", from: "2.0.0")
]

CocoaPods

Podfile

pod 'MultipartFormDataParser'