Skip to content

Instantly share code, notes, and snippets.

@johndpope
Last active March 14, 2017 01:05
Show Gist options
  • Save johndpope/009b9301ef422daca4c3588aad7b337b to your computer and use it in GitHub Desktop.
Save johndpope/009b9301ef422daca4c3588aad7b337b to your computer and use it in GitHub Desktop.
ios mock swagger responses locally via swagger.json file + OHHTTPStubs
import Foundation
import UIKit
import OHHTTPStubs
import SwiftyJSON
// Pods
// pod 'OHHTTPStub'
// pod 'SwiftyJSON'
//
// Usage: in Appdelegate instantiate HTTPStub()
@objc class HTTPStub: NSObject {
override init() {
HTTPStub.stubHTTP() // N.B. when enabling do a clean
}
class func stubHTTP() {
OHHTTPStubs.setEnabled(true)
OHHTTPStubs.onStubActivation { (request: URLRequest, stub: OHHTTPStubsDescriptor, response: OHHTTPStubsResponse) in
print("[OHHTTPStubs] Request to \(request.url) has been stubbed")
}
OHHTTPStubs.removeAllStubs()
let filePath = Bundle.main.path(forResource: "yourswagger-instance-1.0.0-swagger",ofType:"json")
let url = URL.init(fileURLWithPath: filePath!)
do{
let data = try Data.init(contentsOf: url, options: Data.ReadingOptions.uncached)
let json = JSON(data: data)
for (key,value) in json["paths"] {
let response = value["get"]["responses"]["200"]["examples"]["application/json"]
if let _ = response.null {
return
}
do {
let responseData = try response.rawData()
OHHTTPStubs.stubRequests(passingTest: { (request) -> Bool in
if let path = request.url?.path{
return(request.url?.host == "virtserver.swaggerhub.com" && path.contains( key))
}
return false
}) { (request) -> OHHTTPStubsResponse in
print("INFO: mocking response ")
return OHHTTPStubsResponse(data:responseData , statusCode: 200, headers: ["Content-Type" : "application/json"])
}
}catch {
}
}
}catch _ {
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment