Created
June 23, 2017 23:34
-
-
Save inacioferrarini/d4abfcb7373eac5ede10497b16e05471 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
import Foundation | |
import Quick | |
import Nimble | |
import OHHTTPStubs | |
@testable import SimpleNetworkLayer | |
class FixerApiSpec: QuickSpec { | |
override func spec() { | |
describe("all Api Request") { | |
it("if request succeeds, must return valid object") { | |
stub(condition: isHost("api.fixer.io")) { request in | |
let notConnectedError = NSError(domain:NSURLErrorDomain, code:Int(CFNetworkErrors.cfurlErrorNotConnectedToInternet.rawValue), userInfo:nil) | |
let error = OHHTTPStubsResponse(error:notConnectedError) | |
guard let fixtureFile = OHPathForFile("FixerApi_all_response.json", type(of: self)) else { return error } | |
return OHHTTPStubsResponse( | |
fileAtPath: fixtureFile, | |
statusCode: 200, | |
headers: ["Content-Type" : "application/json"] | |
) | |
} | |
var returnedRates: Rates? = nil | |
let client = FinancialApiClient() | |
let api = AppBaseApi(client) | |
waitUntil { done in | |
guard let apiClient = api.apiClient as? FinancialApiClient else { done(); return } | |
apiClient.rates.all(completionBlock: { (rates) in | |
returnedRates = rates | |
done() | |
}) { (error) in | |
fail("Mocked response returned error") | |
done() | |
} | |
} | |
expect(returnedRates).toNot(beNil()) | |
expect(returnedRates?.base) == "EUR" | |
expect(returnedRates?.date) == "2017-06-23" | |
expect(returnedRates?.rates.count) == 31 | |
} | |
it("if request fails, must execute failure block") { | |
stub(condition: isHost("api.fixer.io")) { request in | |
let notConnectedError = NSError(domain:NSURLErrorDomain, code:Int(CFNetworkErrors.cfurlErrorNotConnectedToInternet.rawValue), userInfo:nil) | |
return OHHTTPStubsResponse(error: notConnectedError) | |
} | |
var returnedRates: Rates? = nil | |
let client = FinancialApiClient() | |
let api = AppBaseApi(client) | |
waitUntil { done in | |
guard let apiClient = api.apiClient as? FinancialApiClient else { done(); return } | |
apiClient.rates.all(completionBlock: { (rates) in | |
fail("Mocked response returned success") | |
returnedRates = rates | |
done() | |
}) { (error) in | |
done() | |
} | |
} | |
expect(returnedRates).to(beNil()) | |
} | |
} | |
describe("byCurrency Api Request") { | |
it("if request succeeds, must return valid object") { | |
stub(condition: isHost("api.fixer.io")) { request in | |
let notConnectedError = NSError(domain:NSURLErrorDomain, code:Int(CFNetworkErrors.cfurlErrorNotConnectedToInternet.rawValue), userInfo:nil) | |
let error = OHHTTPStubsResponse(error:notConnectedError) | |
guard let fixtureFile = OHPathForFile("FixerApi_all_response.json", type(of: self)) else { return error } | |
return OHHTTPStubsResponse( | |
fileAtPath: fixtureFile, | |
statusCode: 200, | |
headers: ["Content-Type" : "application/json"] | |
) | |
} | |
var returnedRates: Rates? = nil | |
let client = FinancialApiClient() | |
let api = AppBaseApi(client) | |
waitUntil { done in | |
guard let apiClient = api.apiClient as? FinancialApiClient else { done(); return } | |
apiClient.rates.byCurrency("USD", completionBlock: { (rates) in | |
returnedRates = rates | |
done() | |
}) { (error) in | |
fail("Mocked response returned error") | |
done() | |
} | |
} | |
expect(returnedRates).toNot(beNil()) | |
expect(returnedRates?.base) == "EUR" | |
expect(returnedRates?.date) == "2017-06-23" | |
expect(returnedRates?.rates.count) == 31 | |
} | |
it("if request fails, must execute failure block") { | |
stub(condition: isHost("api.fixer.io")) { request in | |
let notConnectedError = NSError(domain:NSURLErrorDomain, code:Int(CFNetworkErrors.cfurlErrorNotConnectedToInternet.rawValue), userInfo:nil) | |
return OHHTTPStubsResponse(error: notConnectedError) | |
} | |
var returnedRates: Rates? = nil | |
let client = FinancialApiClient() | |
let api = AppBaseApi(client) | |
waitUntil { done in | |
guard let apiClient = api.apiClient as? FinancialApiClient else { done(); return } | |
apiClient.rates.byCurrency("USD", completionBlock: { (rates) in | |
fail("Mocked response returned success") | |
returnedRates = rates | |
done() | |
}) { (error) in | |
done() | |
} | |
} | |
expect(returnedRates).to(beNil()) | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment