Obtain the example value from examples (#419)

* Fix error: "GET operations can not have a requestBody"
* Add support for "examples" in addition to "support example"
This commit is contained in:
Jérémie Bresson 2018-06-30 06:58:30 +02:00 committed by GitHub
parent 0c11718917
commit 1f1a47c57b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 94 additions and 12 deletions

View File

@ -24,6 +24,7 @@ import com.samskivert.mustache.Mustache.Compiler;
import io.swagger.v3.core.util.Json; import io.swagger.v3.core.util.Json;
import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation; import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.examples.Example;
import io.swagger.v3.oas.models.headers.Header; import io.swagger.v3.oas.models.headers.Header;
import io.swagger.v3.oas.models.media.*; import io.swagger.v3.oas.models.media.*;
import io.swagger.v3.oas.models.parameters.CookieParameter; import io.swagger.v3.oas.models.parameters.CookieParameter;
@ -1092,6 +1093,14 @@ public class DefaultCodegen implements CodegenConfig {
return; return;
} }
if (parameter.getExamples() != null && !parameter.getExamples().isEmpty()) {
Example example = parameter.getExamples().values().iterator().next();
if(example.getValue() != null) {
codegenParameter.example = example.getValue().toString();
return;
}
}
Schema schema = parameter.getSchema(); Schema schema = parameter.getSchema();
if (schema != null && schema.getExample() != null) { if (schema != null && schema.getExample() != null) {
codegenParameter.example = schema.getExample().toString(); codegenParameter.example = schema.getExample().toString();
@ -1121,6 +1130,14 @@ public class DefaultCodegen implements CodegenConfig {
return; return;
} }
if (mediaType.getExamples() != null && !mediaType.getExamples().isEmpty()) {
Example example = mediaType.getExamples().values().iterator().next();
if(example.getValue() != null) {
codegenParameter.example = example.getValue().toString();
return;
}
}
setParameterExampleValue(codegenParameter); setParameterExampleValue(codegenParameter);
} }

View File

@ -238,11 +238,17 @@ public class DefaultCodegenTest {
final OpenAPI openAPI = new OpenAPIParser().readLocation("src/test/resources/3_0/examples.yaml", null, new ParseOptions()).getOpenAPI(); final OpenAPI openAPI = new OpenAPIParser().readLocation("src/test/resources/3_0/examples.yaml", null, new ParseOptions()).getOpenAPI();
final DefaultCodegen codegen = new DefaultCodegen(); final DefaultCodegen codegen = new DefaultCodegen();
Operation operation = openAPI.getPaths().get("/example1").getGet(); Operation operation = openAPI.getPaths().get("/example1/singular").getGet();
CodegenParameter codegenParameter = CodegenModelFactory.newInstance(CodegenModelType.PARAMETER); CodegenParameter codegenParameter = CodegenModelFactory.newInstance(CodegenModelType.PARAMETER);
codegen.setParameterExampleValue(codegenParameter, operation.getParameters().get(0)); codegen.setParameterExampleValue(codegenParameter, operation.getParameters().get(0));
Assert.assertEquals(codegenParameter.example, "example1 value"); Assert.assertEquals(codegenParameter.example, "example1 value");
Operation operation2 = openAPI.getPaths().get("/example1/plural").getGet();
CodegenParameter codegenParameter2 = CodegenModelFactory.newInstance(CodegenModelType.PARAMETER);
codegen.setParameterExampleValue(codegenParameter2, operation2.getParameters().get(0));
Assert.assertEquals(codegenParameter2.example, "An example1 value");
} }
@Test @Test
@ -250,7 +256,7 @@ public class DefaultCodegenTest {
final OpenAPI openAPI = new OpenAPIParser().readLocation("src/test/resources/3_0/examples.yaml", null, new ParseOptions()).getOpenAPI(); final OpenAPI openAPI = new OpenAPIParser().readLocation("src/test/resources/3_0/examples.yaml", null, new ParseOptions()).getOpenAPI();
final DefaultCodegen codegen = new DefaultCodegen(); final DefaultCodegen codegen = new DefaultCodegen();
Operation operation = openAPI.getPaths().get("/example2").getGet(); Operation operation = openAPI.getPaths().get("/example2/singular").getGet();
CodegenParameter codegenParameter = CodegenModelFactory.newInstance(CodegenModelType.PARAMETER); CodegenParameter codegenParameter = CodegenModelFactory.newInstance(CodegenModelType.PARAMETER);
codegen.setParameterExampleValue(codegenParameter, operation.getParameters().get(0)); codegen.setParameterExampleValue(codegenParameter, operation.getParameters().get(0));
@ -262,11 +268,17 @@ public class DefaultCodegenTest {
final OpenAPI openAPI = new OpenAPIParser().readLocation("src/test/resources/3_0/examples.yaml", null, new ParseOptions()).getOpenAPI(); final OpenAPI openAPI = new OpenAPIParser().readLocation("src/test/resources/3_0/examples.yaml", null, new ParseOptions()).getOpenAPI();
final DefaultCodegen codegen = new DefaultCodegen(); final DefaultCodegen codegen = new DefaultCodegen();
Operation operation = openAPI.getPaths().get("/example3").getGet(); Operation operation = openAPI.getPaths().get("/example3/singular").getGet();
CodegenParameter codegenParameter = CodegenModelFactory.newInstance(CodegenModelType.PARAMETER); CodegenParameter codegenParameter = CodegenModelFactory.newInstance(CodegenModelType.PARAMETER);
codegen.setParameterExampleValue(codegenParameter, operation.getParameters().get(0)); codegen.setParameterExampleValue(codegenParameter, operation.getParameters().get(0));
Assert.assertEquals(codegenParameter.example, "example3: parameter value"); Assert.assertEquals(codegenParameter.example, "example3: parameter value");
Operation operation2 = openAPI.getPaths().get("/example3/plural").getGet();
CodegenParameter codegenParameter2 = CodegenModelFactory.newInstance(CodegenModelType.PARAMETER);
codegen.setParameterExampleValue(codegenParameter2, operation2.getParameters().get(0));
Assert.assertEquals(codegenParameter2.example, "example3: parameter value");
} }
@Test @Test
@ -274,11 +286,17 @@ public class DefaultCodegenTest {
final OpenAPI openAPI = new OpenAPIParser().readLocation("src/test/resources/3_0/examples.yaml", null, new ParseOptions()).getOpenAPI(); final OpenAPI openAPI = new OpenAPIParser().readLocation("src/test/resources/3_0/examples.yaml", null, new ParseOptions()).getOpenAPI();
final DefaultCodegen codegen = new DefaultCodegen(); final DefaultCodegen codegen = new DefaultCodegen();
Operation operation = openAPI.getPaths().get("/example4").getGet(); Operation operation = openAPI.getPaths().get("/example4/singular").getPost();
CodegenParameter codegenParameter = CodegenModelFactory.newInstance(CodegenModelType.PARAMETER); CodegenParameter codegenParameter = CodegenModelFactory.newInstance(CodegenModelType.PARAMETER);
codegen.setParameterExampleValue(codegenParameter, operation.getRequestBody()); codegen.setParameterExampleValue(codegenParameter, operation.getRequestBody());
Assert.assertEquals(codegenParameter.example, "example4 value"); Assert.assertEquals(codegenParameter.example, "example4 value");
Operation operation2 = openAPI.getPaths().get("/example4/plural").getPost();
CodegenParameter codegenParameter2 = CodegenModelFactory.newInstance(CodegenModelType.PARAMETER);
codegen.setParameterExampleValue(codegenParameter2, operation2.getRequestBody());
Assert.assertEquals(codegenParameter2.example, "An example4 value");
} }
private CodegenProperty codegenPropertyWithArrayOfIntegerValues() { private CodegenProperty codegenPropertyWithArrayOfIntegerValues() {

View File

@ -8,9 +8,9 @@ info:
name: Apache-2.0 name: Apache-2.0
url: 'http://www.apache.org/licenses/LICENSE-2.0.html' url: 'http://www.apache.org/licenses/LICENSE-2.0.html'
paths: paths:
/example1: /example1/singular:
get: get:
operationId: example1Get operationId: example1GetSingular
parameters: parameters:
- name: parameter - name: parameter
in: query in: query
@ -20,9 +20,23 @@ paths:
responses: responses:
'200': '200':
description: successful operation description: successful operation
/example2: /example1/plural:
get: get:
operationId: example2Get operationId: example1GetPlural
parameters:
- name: parameter
in: query
examples:
AnExample:
value: 'An example1 value'
schema:
type: string
responses:
'200':
description: successful operation
/example2/singular:
get:
operationId: example2GetSingular
parameters: parameters:
- name: parameter - name: parameter
in: query in: query
@ -32,9 +46,9 @@ paths:
responses: responses:
'200': '200':
description: successful operation description: successful operation
/example3: /example3/singular:
get: get:
operationId: example3Get operationId: example3GetSingular
parameters: parameters:
- name: parameter - name: parameter
in: query in: query
@ -45,9 +59,25 @@ paths:
responses: responses:
'200': '200':
description: successful operation description: successful operation
/example4: /example3/plural:
get: get:
operationId: example4Get operationId: example3GetSingular
parameters:
- name: parameter
in: query
example: 'example3: parameter value'
examples:
AnExample:
value: 'An example3 value'
schema:
type: string
example: 'example3: schema value'
responses:
'200':
description: successful operation
/example4/singular:
post:
operationId: example4PostSingular
requestBody: requestBody:
content: content:
application/x-www-form-urlencoded: application/x-www-form-urlencoded:
@ -60,4 +90,21 @@ paths:
responses: responses:
'200': '200':
description: successful operation description: successful operation
/example4/plural:
post:
operationId: example4PostSingular
requestBody:
content:
application/x-www-form-urlencoded:
schema:
type: object
properties:
name:
type: string
examples:
AnExample:
value: 'An example4 value'
responses:
'200':
description: successful operation