Last active
March 14, 2017 01:05
-
-
Save johndpope/009b9301ef422daca4c3588aad7b337b to your computer and use it in GitHub Desktop.
ios mock swagger responses locally via swagger.json file + OHHTTPStubs
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 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