63 lines
1.9 KiB
Swift
63 lines
1.9 KiB
Swift
import Alamofire
|
|
import Foundation
|
|
import XCTest
|
|
|
|
extension XCTestCase {
|
|
func uploadWithAlamoFire(
|
|
genbaNeko: Data,
|
|
denwaNeko: Data,
|
|
message: Data,
|
|
retryCount: UInt = 3,
|
|
file: StaticString = #file,
|
|
line: UInt = #line
|
|
) throws -> TestEntity? {
|
|
let exp = expectation(description: "response")
|
|
let task = AF.upload(
|
|
multipartFormData: { formData in
|
|
formData.append(
|
|
genbaNeko,
|
|
withName: "genbaNeko",
|
|
fileName: "genbaNeko.jpeg",
|
|
mimeType: "image/jpeg"
|
|
)
|
|
formData.append(
|
|
denwaNeko,
|
|
withName: "denwaNeko",
|
|
fileName: "denwaNeko.jpeg",
|
|
mimeType: "image/jpeg"
|
|
)
|
|
formData.append(message, withName: "message")
|
|
},
|
|
to: "https://localhost/upload",
|
|
interceptor: Interceptor()
|
|
)
|
|
var response: AFDataResponse<Any>!
|
|
task.responseJSON {
|
|
response = $0
|
|
exp.fulfill()
|
|
}
|
|
waitForExpectations(timeout: timeoutInterval)
|
|
|
|
XCTAssertNotNil(response, file: file, line: line)
|
|
XCTAssertEqual(response?.response?.statusCode, 200, file: file, line: line)
|
|
|
|
let decoder = JSONDecoder()
|
|
decoder.keyDecodingStrategy = .convertFromSnakeCase
|
|
return try decoder.decode(TestEntity.self, from: try XCTUnwrap(response?.data))
|
|
}
|
|
}
|
|
|
|
private class Interceptor: RequestInterceptor {
|
|
private let lock = NSLock()
|
|
|
|
func retry(_ request: Request, for session: Session, dueTo error: Error, completion: @escaping (RetryResult) -> Void) {
|
|
lock.lock(); defer { lock.unlock() }
|
|
|
|
if request.retryCount < 3 {
|
|
completion(.retry)
|
|
} else {
|
|
completion(.doNotRetry)
|
|
}
|
|
}
|
|
}
|