mirror of
https://github.com/bitwarden/ios.git
synced 2025-12-11 23:33:36 -06:00
47 lines
1.2 KiB
Swift
47 lines
1.2 KiB
Swift
import Foundation
|
|
|
|
@testable import Networking
|
|
|
|
@MainActor
|
|
class MockHTTPClient: HTTPClient {
|
|
var downloadRequests = [URLRequest]()
|
|
var downloadResults = [Result<URL, Error>]()
|
|
|
|
var requests = [HTTPRequest]()
|
|
var results = [Result<HTTPResponse, Error>]()
|
|
|
|
var result: Result<HTTPResponse, Error>? {
|
|
get { results.first }
|
|
set {
|
|
guard let newValue else {
|
|
results.removeAll()
|
|
return
|
|
}
|
|
results = [newValue]
|
|
}
|
|
}
|
|
|
|
func download(from urlRequest: URLRequest) async throws -> URL {
|
|
downloadRequests.append(urlRequest)
|
|
|
|
guard !downloadResults.isEmpty else { throw MockClientError.noResultForDownloadRequest }
|
|
|
|
let result = downloadResults.removeFirst()
|
|
return try result.get()
|
|
}
|
|
|
|
func send(_ request: HTTPRequest) async throws -> HTTPResponse {
|
|
requests.append(request)
|
|
|
|
guard !results.isEmpty else { throw MockClientError.noResultForRequest }
|
|
|
|
let result = results.removeFirst()
|
|
return try result.get()
|
|
}
|
|
}
|
|
|
|
enum MockClientError: Error {
|
|
case noResultForDownloadRequest
|
|
case noResultForRequest
|
|
}
|