From cbac1579a9a779055dc4c31e9bf5ba5fe41df905 Mon Sep 17 00:00:00 2001 From: "akihito.nakano" Date: Wed, 30 May 2018 19:17:08 +0900 Subject: [PATCH 1/4] set example value from parameter --- .../openapitools/codegen/DefaultCodegen.java | 17 +++++++++++++- .../codegen/DefaultCodegenTest.java | 12 ++++++++++ .../src/test/resources/3_0/examples.yaml | 23 +++++++++++++++++++ 3 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 modules/openapi-generator/src/test/resources/3_0/examples.yaml diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java index 7f09e70dc659..d3180c5e87ed 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java @@ -1082,6 +1082,21 @@ public void setParameterExampleValue(CodegenParameter codegenParameter) { } + /** + * Return the example value of the parameter. + * + * @param codegenParameter Codegen parameter + * @param parameter Parameter + */ + public void setParameterExampleValue(CodegenParameter codegenParameter, Parameter parameter) { + if (parameter.getExample() != null) { + codegenParameter.example = parameter.getExample().toString(); + return; + } + + setParameterExampleValue(codegenParameter); + } + /** * Return the example value of the property * @@ -2738,7 +2753,7 @@ public CodegenParameter fromParameter(Parameter parameter, Set imports) // set the parameter excample value // should be overridden by lang codegen - setParameterExampleValue(codegenParameter); + setParameterExampleValue(codegenParameter, parameter); postProcessParameter(codegenParameter); LOGGER.debug("debugging codegenParameter return: " + codegenParameter); diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java index 104f7ce5d5a0..ab06fa3f2c6a 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java @@ -214,4 +214,16 @@ public void testGetSchemaTypeWithComposedSchemaWithOneOf() { Assert.assertNotNull(type); } + + @Test + public void testExample1() { + final OpenAPI openAPI = new OpenAPIParser().readLocation("src/test/resources/3_0/examples.yaml", null, new ParseOptions()).getOpenAPI(); + final DefaultCodegen codegen = new DefaultCodegen(); + + Operation operation = openAPI.getPaths().get("/example1").getGet(); + CodegenParameter codegenParameter = CodegenModelFactory.newInstance(CodegenModelType.PARAMETER); + codegen.setParameterExampleValue(codegenParameter, operation.getParameters().get(0)); + + Assert.assertEquals(codegenParameter.example, "example1 value"); + } } diff --git a/modules/openapi-generator/src/test/resources/3_0/examples.yaml b/modules/openapi-generator/src/test/resources/3_0/examples.yaml new file mode 100644 index 000000000000..6acca94449e4 --- /dev/null +++ b/modules/openapi-generator/src/test/resources/3_0/examples.yaml @@ -0,0 +1,23 @@ +openapi: 3.0.0 +servers: + - url: 'http://petstore.swagger.io/v2' +info: + version: 1.0.0 + title: OpenAPI Petstore + license: + name: Apache-2.0 + url: 'http://www.apache.org/licenses/LICENSE-2.0.html' +paths: + /example1: + get: + operationId: example1Get + parameters: + - name: parameter + in: query + example: 'example1 value' + schema: + type: string + responses: + '200': + description: successful operation + From 9fecdd6c559c32c339cfc2bf324b776b382af41d Mon Sep 17 00:00:00 2001 From: "akihito.nakano" Date: Thu, 31 May 2018 10:28:23 +0900 Subject: [PATCH 2/4] the example value of parameter schema --- .../org/openapitools/codegen/DefaultCodegen.java | 6 ++++++ .../org/openapitools/codegen/DefaultCodegenTest.java | 12 ++++++++++++ .../src/test/resources/3_0/examples.yaml | 12 ++++++++++++ 3 files changed, 30 insertions(+) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java index d3180c5e87ed..9787a044250d 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java @@ -1094,6 +1094,12 @@ public void setParameterExampleValue(CodegenParameter codegenParameter, Paramete return; } + Schema schema = parameter.getSchema(); + if (schema != null && schema.getExample() != null) { + codegenParameter.example = schema.getExample().toString(); + return; + } + setParameterExampleValue(codegenParameter); } diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java index ab06fa3f2c6a..620f0442f490 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java @@ -226,4 +226,16 @@ public void testExample1() { Assert.assertEquals(codegenParameter.example, "example1 value"); } + + @Test + public void testExample2() { + final OpenAPI openAPI = new OpenAPIParser().readLocation("src/test/resources/3_0/examples.yaml", null, new ParseOptions()).getOpenAPI(); + final DefaultCodegen codegen = new DefaultCodegen(); + + Operation operation = openAPI.getPaths().get("/example2").getGet(); + CodegenParameter codegenParameter = CodegenModelFactory.newInstance(CodegenModelType.PARAMETER); + codegen.setParameterExampleValue(codegenParameter, operation.getParameters().get(0)); + + Assert.assertEquals(codegenParameter.example, "example2 value"); + } } diff --git a/modules/openapi-generator/src/test/resources/3_0/examples.yaml b/modules/openapi-generator/src/test/resources/3_0/examples.yaml index 6acca94449e4..b4ac5e1eb769 100644 --- a/modules/openapi-generator/src/test/resources/3_0/examples.yaml +++ b/modules/openapi-generator/src/test/resources/3_0/examples.yaml @@ -20,4 +20,16 @@ paths: responses: '200': description: successful operation + /example2: + get: + operationId: example2Get + parameters: + - name: parameter + in: query + schema: + type: string + example: 'example2 value' + responses: + '200': + description: successful operation From 2498ca61599a180ab3725183e4dc7df097767841 Mon Sep 17 00:00:00 2001 From: "akihito.nakano" Date: Thu, 31 May 2018 10:37:06 +0900 Subject: [PATCH 3/4] Add a test case that defined the example on both parameter and schema --- .../openapitools/codegen/DefaultCodegenTest.java | 12 ++++++++++++ .../src/test/resources/3_0/examples.yaml | 13 +++++++++++++ 2 files changed, 25 insertions(+) diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java index 620f0442f490..4dc7846f9d73 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java @@ -238,4 +238,16 @@ public void testExample2() { Assert.assertEquals(codegenParameter.example, "example2 value"); } + + @Test + public void testExample3() { + final OpenAPI openAPI = new OpenAPIParser().readLocation("src/test/resources/3_0/examples.yaml", null, new ParseOptions()).getOpenAPI(); + final DefaultCodegen codegen = new DefaultCodegen(); + + Operation operation = openAPI.getPaths().get("/example3").getGet(); + CodegenParameter codegenParameter = CodegenModelFactory.newInstance(CodegenModelType.PARAMETER); + codegen.setParameterExampleValue(codegenParameter, operation.getParameters().get(0)); + + Assert.assertEquals(codegenParameter.example, "example3: parameter value"); + } } diff --git a/modules/openapi-generator/src/test/resources/3_0/examples.yaml b/modules/openapi-generator/src/test/resources/3_0/examples.yaml index b4ac5e1eb769..0dbbe92ab248 100644 --- a/modules/openapi-generator/src/test/resources/3_0/examples.yaml +++ b/modules/openapi-generator/src/test/resources/3_0/examples.yaml @@ -32,4 +32,17 @@ paths: responses: '200': description: successful operation + /example3: + get: + operationId: example3Get + parameters: + - name: parameter + in: query + example: 'example3: parameter value' + schema: + type: string + example: 'example3: schema value' + responses: + '200': + description: successful operation From 671f5624393985028285a7d98cd7120cd1585526 Mon Sep 17 00:00:00 2001 From: "akihito.nakano" Date: Sun, 3 Jun 2018 18:21:56 +0900 Subject: [PATCH 4/4] set example value from request body --- .../openapitools/codegen/DefaultCodegen.java | 30 +++++++++++++++---- .../codegen/DefaultCodegenTest.java | 12 ++++++++ .../src/test/resources/3_0/examples.yaml | 15 ++++++++++ 3 files changed, 52 insertions(+), 5 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java index 9787a044250d..766976539102 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java @@ -26,10 +26,7 @@ import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.Operation; import io.swagger.v3.oas.models.headers.Header; -import io.swagger.v3.oas.models.media.ArraySchema; -import io.swagger.v3.oas.models.media.ComposedSchema; -import io.swagger.v3.oas.models.media.Schema; -import io.swagger.v3.oas.models.media.StringSchema; +import io.swagger.v3.oas.models.media.*; import io.swagger.v3.oas.models.parameters.CookieParameter; import io.swagger.v3.oas.models.parameters.HeaderParameter; import io.swagger.v3.oas.models.parameters.Parameter; @@ -1103,6 +1100,29 @@ public void setParameterExampleValue(CodegenParameter codegenParameter, Paramete setParameterExampleValue(codegenParameter); } + /** + * Return the example value of the parameter. + * + * @param codegenParameter Codegen parameter + * @param requestBody Request body + */ + public void setParameterExampleValue(CodegenParameter codegenParameter, RequestBody requestBody) { + Content content = requestBody.getContent(); + + if (content.size() > 1) { + // @see ModelUtils.getSchemaFromContent() + LOGGER.warn("Multiple MediaTypes found, using only the first one"); + } + + MediaType mediaType = content.values().iterator().next(); + if (mediaType.getExample() != null) { + codegenParameter.example = mediaType.getExample().toString(); + return; + } + + setParameterExampleValue(codegenParameter); + } + /** * Return the example value of the property * @@ -4378,7 +4398,7 @@ public CodegenParameter fromRequestBody(RequestBody body, Map sc // set the parameter's example value // should be overridden by lang codegen - setParameterExampleValue(codegenParameter); + setParameterExampleValue(codegenParameter, body); return codegenParameter; } diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java index 4dc7846f9d73..86aec431b2f4 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java @@ -250,4 +250,16 @@ public void testExample3() { Assert.assertEquals(codegenParameter.example, "example3: parameter value"); } + + @Test + public void testExample4() { + final OpenAPI openAPI = new OpenAPIParser().readLocation("src/test/resources/3_0/examples.yaml", null, new ParseOptions()).getOpenAPI(); + final DefaultCodegen codegen = new DefaultCodegen(); + + Operation operation = openAPI.getPaths().get("/example4").getGet(); + CodegenParameter codegenParameter = CodegenModelFactory.newInstance(CodegenModelType.PARAMETER); + codegen.setParameterExampleValue(codegenParameter, operation.getRequestBody()); + + Assert.assertEquals(codegenParameter.example, "example4 value"); + } } diff --git a/modules/openapi-generator/src/test/resources/3_0/examples.yaml b/modules/openapi-generator/src/test/resources/3_0/examples.yaml index 0dbbe92ab248..01c22a5f5be0 100644 --- a/modules/openapi-generator/src/test/resources/3_0/examples.yaml +++ b/modules/openapi-generator/src/test/resources/3_0/examples.yaml @@ -45,4 +45,19 @@ paths: responses: '200': description: successful operation + /example4: + get: + operationId: example4Get + requestBody: + content: + application/x-www-form-urlencoded: + schema: + type: object + properties: + name: + type: string + example: 'example4 value' + responses: + '200': + description: successful operation