Search in sources :

Example 21 with Yaml

use of io.swagger.v3.core.util.Yaml in project swagger-core by swagger-api.

the class ReaderTest method testTicket2340.

@Test(description = "Responses with array schema")
public void testTicket2340() {
    Reader reader = new Reader(new OpenAPI());
    OpenAPI openAPI = reader.read(Ticket2340Resource.class);
    String yaml = "openapi: 3.0.1\n" + "paths:\n" + "  /test/test:\n" + "    post:\n" + "      operationId: getAnimal\n" + "      requestBody:\n" + "        content:\n" + "          application/json:\n" + "            schema:\n" + "              $ref: '#/components/schemas/Animal'\n" + "      responses:\n" + "        default:\n" + "          description: default response\n" + "          content:\n" + "            application/json:\n" + "              schema:\n" + "                type: string\n" + "components:\n" + "  schemas:\n" + "    Animal:\n" + "      required:\n" + "      - type\n" + "      type: object\n" + "      properties:\n" + "        type:\n" + "          type: string\n" + "      discriminator:\n" + "        propertyName: type\n" + "    Cat:\n" + "      type: object\n" + "      allOf:\n" + "      - $ref: '#/components/schemas/Animal'\n" + "      - type: object\n" + "        properties:\n" + "          lives:\n" + "            type: integer\n" + "            format: int32\n" + "    Dog:\n" + "      type: object\n" + "      allOf:\n" + "      - $ref: '#/components/schemas/Animal'\n" + "      - type: object\n" + "        properties:\n" + "          barkVolume:\n" + "            type: number\n" + "            format: double\n";
    SerializationMatchers.assertEqualsToYaml(openAPI, yaml);
}
Also used : OpenAPI(io.swagger.v3.oas.models.OpenAPI) Test(org.testng.annotations.Test)

Example 22 with Yaml

use of io.swagger.v3.core.util.Yaml in project swagger-core by swagger-api.

the class ReaderTest method testTicket3587.

@Test(description = "Parameter examples ordering")
public void testTicket3587() {
    Reader reader = new Reader(new OpenAPI());
    OpenAPI openAPI = reader.read(Ticket3587Resource.class);
    String yaml = "openapi: 3.0.1\n" + "paths:\n" + "  /test/test:\n" + "    get:\n" + "      operationId: parameterExamplesOrderingTest\n" + "      parameters:\n" + "      - in: query\n" + "        schema:\n" + "          type: string\n" + "        examples:\n" + "          Example One:\n" + "            description: Example One\n" + "          Example Two:\n" + "            description: Example Two\n" + "          Example Three:\n" + "            description: Example Three\n" + "      - in: query\n" + "        schema:\n" + "          type: string\n" + "        examples:\n" + "          Example Three:\n" + "            description: Example Three\n" + "          Example Two:\n" + "            description: Example Two\n" + "          Example One:\n" + "            description: Example One\n" + "      responses:\n" + "        default:\n" + "          description: default response\n" + "          content:\n" + "            '*/*': {}";
    SerializationMatchers.assertEqualsToYamlExact(openAPI, yaml);
}
Also used : OpenAPI(io.swagger.v3.oas.models.OpenAPI) Test(org.testng.annotations.Test)

Example 23 with Yaml

use of io.swagger.v3.core.util.Yaml in project swagger-core by swagger-api.

the class OpenApiServlet method doGet.

// TODO move to own servlet non jaxrs project and reference from there
// TODO cleanup and errors
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    String ctxId = getContextIdFromServletConfig(getServletConfig());
    OpenApiContext ctx = OpenApiContextLocator.getInstance().getOpenApiContext(ctxId);
    OpenAPI oas = ctx.read();
    if (oas != null) {
        if (ctx.getOpenApiConfiguration() != null && ctx.getOpenApiConfiguration().getFilterClass() != null) {
            try {
                OpenAPISpecFilter filterImpl = (OpenAPISpecFilter) Class.forName(ctx.getOpenApiConfiguration().getFilterClass()).newInstance();
                SpecFilter f = new SpecFilter();
                oas = f.filter(oas, filterImpl, ServletUtils.getQueryParams(req.getParameterMap()), ServletUtils.getCookies(req.getCookies()), ServletUtils.getHeaders(req));
            } catch (Exception e) {
                LOGGER.error("failed to load filter", e);
            }
        }
    }
    String type = "json";
    String acceptHeader = req.getHeader(ACCEPT_HEADER);
    if (!StringUtils.isBlank(acceptHeader) && acceptHeader.toLowerCase().contains(APPLICATION_YAML)) {
        type = "yaml";
    } else {
        // check URL:
        if (req.getRequestURL().toString().toLowerCase().endsWith("yaml")) {
            type = "yaml";
        }
    }
    boolean pretty = false;
    if (ctx.getOpenApiConfiguration() != null && Boolean.TRUE.equals(ctx.getOpenApiConfiguration().isPrettyPrint())) {
        pretty = true;
    }
    resp.setStatus(200);
    if (type.equalsIgnoreCase("yaml")) {
        resp.setContentType(APPLICATION_YAML);
        try (PrintWriter pw = resp.getWriter()) {
            pw.write(pretty ? ctx.getOutputYamlMapper().writer(new DefaultPrettyPrinter()).writeValueAsString(oas) : ctx.getOutputYamlMapper().writeValueAsString(oas));
        }
    } else {
        resp.setContentType(APPLICATION_JSON);
        try (PrintWriter pw = resp.getWriter()) {
            pw.write(pretty ? ctx.getOutputJsonMapper().writer(new DefaultPrettyPrinter()).writeValueAsString(oas) : ctx.getOutputJsonMapper().writeValueAsString(oas));
        }
    }
}
Also used : DefaultPrettyPrinter(com.fasterxml.jackson.core.util.DefaultPrettyPrinter) OpenAPISpecFilter(io.swagger.v3.core.filter.OpenAPISpecFilter) OpenAPI(io.swagger.v3.oas.models.OpenAPI) SpecFilter(io.swagger.v3.core.filter.SpecFilter) OpenAPISpecFilter(io.swagger.v3.core.filter.OpenAPISpecFilter) ServletException(javax.servlet.ServletException) IOException(java.io.IOException) OpenApiConfigurationException(io.swagger.v3.oas.integration.OpenApiConfigurationException) OpenApiContext(io.swagger.v3.oas.integration.api.OpenApiContext) PrintWriter(java.io.PrintWriter)

Example 24 with Yaml

use of io.swagger.v3.core.util.Yaml in project swagger-core by swagger-api.

the class ReaderTest method testTicket3731.

@Test(description = "Constraints annotations in models")
public void testTicket3731() {
    Reader reader = new Reader(new OpenAPI());
    OpenAPI openAPI = reader.read(Ticket3731Resource.class);
    String yaml = "openapi: 3.0.1\n" + "paths:\n" + "  /test/cart:\n" + "    get:\n" + "      summary: Get cart items\n" + "      description: Paging follows RFC 5005.\n" + "      operationId: getCart\n" + "      parameters:\n" + "      - name: pageSize\n" + "        in: query\n" + "        description: \"Number of items per page. Range[1, 200]\"\n" + "        schema:\n" + "          maximum: 200\n" + "          minimum: 1\n" + "          type: integer\n" + "          format: int32\n" + "          default: 50\n" + "      responses:\n" + "        default:\n" + "          description: default response\n" + "          content:\n" + "            '*/*':\n" + "              schema:\n" + "                type: array\n" + "                items:\n" + "                  type: string\n";
    SerializationMatchers.assertEqualsToYaml(openAPI, yaml);
    reader = new Reader(new OpenAPI());
    openAPI = reader.read(Ticket3731BisResource.class);
    SerializationMatchers.assertEqualsToYaml(openAPI, yaml);
}
Also used : Ticket3731BisResource(io.swagger.v3.jaxrs2.resources.Ticket3731BisResource) OpenAPI(io.swagger.v3.oas.models.OpenAPI) Test(org.testng.annotations.Test)

Example 25 with Yaml

use of io.swagger.v3.core.util.Yaml in project swagger-core by swagger-api.

the class ReaderTest method testGetResponsesWithComposition.

@Test(description = "Responses with composition")
public void testGetResponsesWithComposition() {
    Reader reader = new Reader(new OpenAPI());
    OpenAPI openAPI = reader.read(ResponsesResource.class);
    String yaml = "openapi: 3.0.1\n" + "paths:\n" + "  /:\n" + "    get:\n" + "      summary: Simple get operation\n" + "      description: Defines a simple get operation with no inputs and a complex output\n" + "        object\n" + "      operationId: getWithPayloadResponse\n" + "      responses:\n" + "        \"200\":\n" + "          description: voila!\n" + "          content:\n" + "            application/json:\n" + "              schema:\n" + "                $ref: '#/components/schemas/SampleResponseSchema'\n" + "        default:\n" + "          description: boo\n" + "          content:\n" + "            '*/*':\n" + "              schema:\n" + "                $ref: '#/components/schemas/GenericError'\n" + "      deprecated: true\n" + "  /allOf:\n" + "    get:\n" + "      summary: Test inheritance / polymorphism\n" + "      operationId: getAllOf\n" + "      parameters:\n" + "      - name: number\n" + "        in: query\n" + "        description: Test inheritance / polymorphism\n" + "        required: true\n" + "        schema:\n" + "          type: integer\n" + "          format: int32\n" + "        example: 1\n" + "      responses:\n" + "        \"200\":\n" + "          description: bean answer\n" + "          content:\n" + "            application/json:\n" + "              schema:\n" + "                allOf:\n" + "                - $ref: '#/components/schemas/MultipleSub1Bean'\n" + "                - $ref: '#/components/schemas/MultipleSub2Bean'\n" + "  /anyOf:\n" + "    get:\n" + "      summary: Test inheritance / polymorphism\n" + "      operationId: getAnyOf\n" + "      parameters:\n" + "      - name: number\n" + "        in: query\n" + "        description: Test inheritance / polymorphism\n" + "        required: true\n" + "        schema:\n" + "          type: integer\n" + "          format: int32\n" + "        example: 1\n" + "      responses:\n" + "        \"200\":\n" + "          description: bean answer\n" + "          content:\n" + "            application/json:\n" + "              schema:\n" + "                anyOf:\n" + "                - $ref: '#/components/schemas/MultipleSub1Bean'\n" + "                - $ref: '#/components/schemas/MultipleSub2Bean'\n" + "  /oneOf:\n" + "    get:\n" + "      summary: Test inheritance / polymorphism\n" + "      operationId: getOneOf\n" + "      parameters:\n" + "      - name: number\n" + "        in: query\n" + "        description: Test inheritance / polymorphism\n" + "        required: true\n" + "        schema:\n" + "          type: integer\n" + "          format: int32\n" + "        example: 1\n" + "      responses:\n" + "        \"200\":\n" + "          description: bean answer\n" + "          content:\n" + "            application/json:\n" + "              schema:\n" + "                oneOf:\n" + "                - $ref: '#/components/schemas/MultipleSub1Bean'\n" + "                - $ref: '#/components/schemas/MultipleSub2Bean'\n" + "components:\n" + "  schemas:\n" + "    SampleResponseSchema:\n" + "      type: object\n" + "    GenericError:\n" + "      type: object\n" + "    MultipleSub1Bean:\n" + "      type: object\n" + "      description: MultipleSub1Bean\n" + "      allOf:\n" + "      - $ref: '#/components/schemas/MultipleBaseBean'\n" + "      - type: object\n" + "        properties:\n" + "          c:\n" + "            type: integer\n" + "            format: int32\n" + "    MultipleSub2Bean:\n" + "      type: object\n" + "      description: MultipleSub2Bean\n" + "      allOf:\n" + "      - $ref: '#/components/schemas/MultipleBaseBean'\n" + "      - type: object\n" + "        properties:\n" + "          d:\n" + "            type: integer\n" + "            format: int32\n" + "    MultipleBaseBean:\n" + "      type: object\n" + "      properties:\n" + "        beanType:\n" + "          type: string\n" + "        a:\n" + "          type: integer\n" + "          format: int32\n" + "        b:\n" + "          type: string\n" + "      description: MultipleBaseBean";
    SerializationMatchers.assertEqualsToYaml(openAPI, yaml);
}
Also used : OpenAPI(io.swagger.v3.oas.models.OpenAPI) Test(org.testng.annotations.Test)

Aggregations

Test (org.testng.annotations.Test)63 OpenAPI (io.swagger.v3.oas.models.OpenAPI)55 Schema (io.swagger.v3.oas.models.media.Schema)15 Components (io.swagger.v3.oas.models.Components)13 Info (io.swagger.v3.oas.models.info.Info)13 AnnotatedType (io.swagger.v3.core.converter.AnnotatedType)9 OpenAPISpecFilter (io.swagger.v3.core.filter.OpenAPISpecFilter)8 SpecFilter (io.swagger.v3.core.filter.SpecFilter)8 StringSchema (io.swagger.v3.oas.models.media.StringSchema)8 AfterTest (org.testng.annotations.AfterTest)6 OpenApiContext (io.swagger.v3.oas.integration.api.OpenApiContext)5 IntegerSchema (io.swagger.v3.oas.models.media.IntegerSchema)5 Parameter (io.swagger.v3.oas.models.parameters.Parameter)5 DefaultPrettyPrinter (com.fasterxml.jackson.core.util.DefaultPrettyPrinter)4 AbstractSpecFilter (io.swagger.v3.core.filter.AbstractSpecFilter)4 OpenApiConfigurationException (io.swagger.v3.oas.integration.OpenApiConfigurationException)4 ArraySchema (io.swagger.v3.oas.models.media.ArraySchema)4 IOException (java.io.IOException)4 RequestBody (io.swagger.v3.oas.models.parameters.RequestBody)3 ApiResponse (io.swagger.v3.oas.models.responses.ApiResponse)3