示例#1
0
def test_generate_schema_from_json():
    # given
    raw_json = json.dumps(
        dict(
            name="john doe",
            age=51,
            height=5.10,
            addresses=[],
            balance=dict(amount=1000, currency="GBP"),
        ))
    # when
    generated_schema = schema_from_json(raw_json).get("schema")
    # then
    assert generated_schema is not None
    assert generated_schema.get("type") == "object"

    object_properties = generated_schema.get("properties")
    assert object_properties.get("name").get("type") == "string"
    assert object_properties.get("age").get("type") == "integer"
    assert object_properties.get("height").get("type") == "number"
    assert object_properties.get("addresses").get("type") == "array"
    assert object_properties.get("balance").get("type") == "object"
    balance_properties = object_properties.get("balance").get("properties")
    assert balance_properties.get("amount").get("type") == "integer"
    assert balance_properties.get("currency").get("type") == "string"

    assert "name" in generated_schema.get("required")
    assert "age" in generated_schema.get("required")
    assert "height" in generated_schema.get("required")
示例#2
0
def test_generate_schema_with_no_required_fields():
    # given
    raw_json = json.dumps(
        dict(
            name="john doe",
            age=51,
            height=5.10,
            addresses=[],
            balance=dict(amount=1000, currency="GBP"),
        ))
    # when
    generated_schema = schema_from_json(raw_json,
                                        remove_required=True).get("schema")
    # then
    assert generated_schema.get("required") is None
    assert generated_schema.get("properties").get("balance").get(
        "required") is None
示例#3
0
    def export_api_calls(self, api_spec, api_path, api_calls, servers):

        http_relative_uri = self.url_from_last_exchange(api_calls, servers)
        # http_relative_uri = extract_uri(api_path, servers)

        operations = {}

        for api in api_calls:
            http_method = api.http_method.lower()
            logging.debug(
                f"Exporting API Path: {http_method} {api_path}: API calls: {len(api_calls)}"
            )

            operations[http_method] = operations.get(http_method) or {
                "summary": api.title,
                "tags": [],
            }

            if api.tags:
                operations[http_method]["tags"].extend(api.tags)

            last_exchange = self.app_config.app_data_cache.get_last_exchange(
                api.id)

            parameters = []
            self.add_params(parameters, last_exchange.request.headers,
                            "header")
            self.add_params(parameters, last_exchange.request.query_params,
                            "query")

            if parameters:
                operations[http_method]["parameters"] = parameters

            # Request object
            if last_exchange.request.request_body:
                operations[http_method]["requestBody"] = operations[
                    http_method].get("requestBody", {})
                operations[http_method]["requestBody"]["content"] = operations[
                    http_method]["requestBody"].get("content", {})

                request_content_type = last_exchange.request.content_type()
                operations[http_method]["requestBody"]["content"][
                    request_content_type] = schema_from_json(
                        last_exchange.request.request_body)

            # Response object
            response_code = last_exchange.response.http_status_code
            if response_code:
                operations[http_method]["responses"] = {
                    response_code: {
                        "description": "Map Status Code to Description Here"
                    }
                }

                if last_exchange.response.response_body:
                    generated_response_schema = schema_from_json(
                        last_exchange.response.response_body,
                        remove_required=True)
                    response_content_type = last_exchange.response.content_type(
                    )

                    operations[http_method]["responses"][response_code][
                        "content"] = {
                            response_content_type: generated_response_schema
                        }

        # Build spec
        api_spec.path(http_relative_uri, operations=operations)
示例#4
0
 def __generate_fuzzed_payload(self, request_json_body):
     if not request_json_body:
         return ""
     request_schema = schema_from_json(request_json_body)
     return json.dumps(jdg.json_from_schema(request_schema.get("schema")))