Skip to content

An automatic mock server to speed up your initial development using swagger json.

License

Notifications You must be signed in to change notification settings

lngyeen/SwaggerAutomocker

Repository files navigation

SwaggerAutomocker

CI Status Version License Platform

Example

To run the example project, clone the repo, and run pod install from the Example directory first.

Requirements

Installation

SwaggerAutomocker is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod 'SwaggerAutomocker'

Usage

Configure App Transport Security: Because the purpose of this mock server is only for mock environment, our server only supports http protocol, so to be able to run the mock server you need to disable App Transport Security by adding the key App Transport Security Settings to your Info.plist, with a sub-key where Allow Arbitrary Loads is set to Yes.

Config data generator:

var dataGenerator: DataGenerator {
    let dataGenerator = DataGenerator()
    dataGenerator.useFakeryDataGenerator = true
    dataGenerator.distinctElementsInArray = true
    dataGenerator.generateDummyDataLazily = true
    dataGenerator.rootArrayElementCount = 3
    dataGenerator.childArrayElementCount = 3
    
    // DefaultDataConfigurator
    dataGenerator.defaultDataConfigurator.dateTimeDefaultValue = "2021-01-01T17:32:28Z"
    // ...
    
    // FakeryDataConfigurator
    dataGenerator.fakeryDataConfigurator.minInt = 0
    dataGenerator.fakeryDataConfigurator.maxInt = 1000000
    // ...
    return dataGenerator
}

Start mock server from embedded swagger json file:

var mockServer: MockServer?

let swaggerJson = readJSONFromFile(fileName: "swagger")
if let swaggerJson = swaggerJson {
    mockServer = MockServer(port: 8080, 
                            concurrency: 50,
                            swaggerJson: swaggerJson, 
                            dataGenerator: dataGenerator,
                            genDataSourceExtensionInConsole: true)
    // Set genDataSourceExtensionInConsole to true, so the MockServerResponseDataSource extension will be printed automatically in the console log. 
    // You can copy it into your source code to save time implementing all the endpoints.
    mockServer?.responseDataSource = self
    mockServer?.start()
}

or from swagger json url:

var mockServer: MockServer?

let swaggerUrl = "https://mobileapp-fe-dev.swissmedical.net/aevis-app-backend-api/v3/api-docs"
mockServer = MockServer(port: 8080, 
                        concurrency: 50,
                        swaggerUrl: swaggerUrl, 
                        dataGenerator: dataGenerator,
                        genDataSourceExtensionInConsole: true)
// Set genDataSourceExtensionInConsole to true, so the MockServerResponseDataSource extension will be printed automatically in the console log. 
// You can copy it into your source code to save time implementing all the endpoints.
mockServer?.responseDataSource = self
mockServer?.start()

Stop mock server:

mockServer?.stop()

Custom response for each request if needed via MockServerResponseDataSource protocol:

func mockServer(_ mockServer: MockServer, responseFor request: HTTPRequest, to endpoint: MockServerEndpoint, possibleResponses: [HTTPResponse]) -> HTTPResponse? {
    // Pick one response from possibleResponses array
    return possibleResponses.first(where: {$0.statusCode > 299})
    
    // or customize your own response for each request depending on
    // request.path, request.method, request.pathParams, request.queryItems
    // request.body.jsonObject, request.body.jsonArray, request.body.stringArray, request.body.string
    return HTTPResponse(statusCode: 409, 
                        headers: ["X-Server-Message": "Conflict"], 
                        body: "Email was used to sign up for another account.".utf8Data)
}

Author

lngyeen, [email protected]

License

SwaggerAutomocker is available under the MIT license. See the LICENSE file for more info.

About

An automatic mock server to speed up your initial development using swagger json.

Resources

License

Stars

Watchers

Forks

Packages

No packages published