Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,7 @@ private List<Map<String, String>> generateFromResponseSchema(Schema responseSche
}

if (responseSchema.getExample() != null && !(responseSchema.getExample() instanceof Map)) {
LOGGER.warn("example value (array/primitive) not handled at the moment: " + responseSchema.getExample());
return null;
return generate(responseSchema.getExample(), new ArrayList<>(producesInfo));
}

if (ModelUtils.isArraySchema(responseSchema)) { // array of schema
Expand Down Expand Up @@ -190,6 +189,34 @@ public List<Map<String, String>> generate(Map<String, Object> examples, List<Str
return output;
}

private List<Map<String, String>> generate(Object example, List<String> mediaTypes) {
List<Map<String, String>> output = new ArrayList<>();
if (examples != null) {
if (mediaTypes == null) {
// assume application/json for this
mediaTypes = Collections.singletonList(MIME_TYPE_JSON);
}
for (String mediaType : mediaTypes) {
Map<String, String> kv = new HashMap<>();
kv.put(CONTENT_TYPE, mediaType);
if ((mediaType.startsWith(MIME_TYPE_JSON) || mediaType.contains("*/*"))) {
kv.put(EXAMPLE, Json.pretty(example));
output.add(kv);
} else if (mediaType.startsWith(MIME_TYPE_XML)) {
// TODO
LOGGER.warn("XML example value of (array/primitive) is not handled at the moment: " + example);
}
}
}

if (output.size() == 0) {
Map<String, String> kv = new HashMap<>();
kv.put(OUTPUT, NONE);
output.add(kv);
}
return output;
}

private Object resolvePropertyToExample(String propertyName, String mediaType, Schema property, Set<String> processedModels) {
LOGGER.debug("Resolving example for property {}...", property);
if (property.getExample() != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,36 @@
import static org.testng.AssertJUnit.*;

public class ExampleGeneratorTest {
@Test
public void generateFromResponseSchemaWithPrimitiveType() {
OpenAPI openAPI = new OpenAPIParser().readLocation("src/test/resources/3_0/example_generator_test.yaml", null, new
ParseOptions()).getOpenAPI();

new InlineModelResolver().flatten(openAPI);

ExampleGenerator exampleGenerator = new ExampleGenerator(openAPI.getComponents().getSchemas(), openAPI);
Set<String> mediaTypeKeys = new TreeSet<>();
mediaTypeKeys.add("application/json");
List<Map<String, String>> examples = exampleGenerator.generateFromResponseSchema(
"200",
openAPI
.getPaths()
.get("/generate_from_response_schema_with_primitive_type")
.getGet()
.getResponses()
.get("200")
.getContent()
.get("application/json")
.getSchema(),
mediaTypeKeys
);

assertEquals(1, examples.size());
assertEquals("application/json", examples.get(0).get("contentType"));
assertEquals("\"primitive type example value\"", examples.get(0).get("example"));
assertEquals("200", examples.get(0).get("statusCode"));
}

@Test
public void generateFromResponseSchemaWithNoExample() {
OpenAPI openAPI = new OpenAPIParser().readLocation("src/test/resources/3_0/example_generator_test.yaml", null, new
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,17 @@ paths:
application/json:
schema:
type: string
/generate_from_response_schema_with_primitive_type:
get:
operationId: generateFromResponseSchemaWithNoExample
responses:
'200':
description: successful operation
content:
application/json:
schema:
type: string
example: primitive type example value
/generate_from_response_schema_with_array_of_model:
get:
operationId: generateFromResponseSchemaWithArrayOfModel
Expand Down