-
-
Save laevandus/f5ed2f0b80894ad4dc21b81c79f388f3 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
final class UITestingURLProcotol: URLProtocol { | |
override class func canInit(with request: URLRequest) -> Bool { | |
return true // TODO: only return true for requests we have mocked data | |
} | |
override class func canonicalRequest(for request: URLRequest) -> URLRequest { | |
return request | |
} | |
struct ResponseData { | |
let response: URLResponse | |
let data: Data | |
} | |
static var responseProvider: ((URLRequest) -> Result<ResponseData, Error>)? | |
override func startLoading() { | |
guard let client else { fatalError() } | |
if let responseProvider = Self.responseProvider { | |
switch responseProvider(request) { | |
case .success(let responseData): | |
client.urlProtocol(self, didReceive: responseData.response, cacheStoragePolicy: .notAllowed) | |
client.urlProtocol(self, didLoad: responseData.data) | |
client.urlProtocolDidFinishLoading(self) | |
case .failure(let error): | |
client.urlProtocol(self, didFailWithError: error) | |
client.urlProtocolDidFinishLoading(self) | |
} | |
} | |
else { | |
let error = NSError(domain: "UITestingURLProcotol", code: -1) | |
client.urlProtocol(self, didFailWithError: error) | |
} | |
} | |
override func stopLoading() {} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment