Skip to content

Instantly share code, notes, and snippets.

@ykpoh
Created July 24, 2021 07:57
Show Gist options
  • Save ykpoh/3299f6c107febe4d71a12dc53a2f4895 to your computer and use it in GitHub Desktop.
Save ykpoh/3299f6c107febe4d71a12dc53a2f4895 to your computer and use it in GitHub Desktop.
@testable import SpaceXLaunch
import Alamofire
enum MockAPIServiceError: Error {
case permissionDenied
}
class MockAPIService: APIServiceProtocol { // 1
enum Status {
case success
case error
}
var mockLaunchResponse: LaunchResponse?
var mockRocket: Rocket?
var mockErrorResponse: Error?
var isFetchLaunchesWithQuery = false
var isFetchRocket = false
var status: Status = .success
var completionHandler: ((LaunchResponse?, Error?, AFDataResponse<Any>) -> Void)?
// 2
@discardableResult func fetchLaunchesWithQuery(startDate: Date = Calendar.current.date(byAdding: .year, value: -3, to: Date()) ?? Date(), endDate: Date = Date(), completion: @escaping (LaunchResponse?, Error?, AFDataResponse<Any>) -> Void) -> DataRequestProtocol {
isFetchLaunchesWithQuery = true
let mockDataResponse = generateMockDataResponse()
switch status {
case .success:
completion(mockLaunchResponse, nil, mockDataResponse)
case .error:
completion(nil, mockErrorResponse, mockDataResponse)
}
return MockDataRequest()
}
func fetchRocket(rocketName: String, completion: @escaping (Rocket?, Error?, AFDataResponse<Any>) -> Void) -> DataRequestProtocol {
isFetchRocket = true
let mockDataResponse = generateMockDataResponse()
switch status {
case .success:
completion(mockRocket, nil, mockDataResponse)
case .error:
completion(nil, mockErrorResponse, mockDataResponse)
}
return MockDataRequest()
}
private func generateMockDataResponse() -> AFDataResponse<Any> {
return AFDataResponse<Any>(
request: nil,
response: HTTPURLResponse(url: URL(string: "yungkien.com")!, statusCode: MockDataRequest.statusCode, httpVersion: "1.1", headerFields: nil),
data: MockDataRequest.data,
metrics: nil,
serializationDuration: TimeInterval(),
result: Result.success(true)
)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment