forked from loafle/openapi-generator-original
updated to not flatten array, map properties in responses unless necessary
This commit is contained in:
parent
84b7302f12
commit
eeaf4071f9
@ -75,31 +75,41 @@ public class InlineModelResolver {
|
||||
swagger.addDefinition(modelName, model);
|
||||
}
|
||||
} else if (property instanceof ArrayProperty) {
|
||||
String modelName = uniqueName("inline_response_" + key);
|
||||
ArrayProperty ap = (ArrayProperty) property;
|
||||
Model model = modelFromProperty(ap, modelName);
|
||||
if (model != null) {
|
||||
String existing = matchGenerated(model);
|
||||
if(ap.getItems() instanceof ObjectProperty) {
|
||||
ObjectProperty op = (ObjectProperty) ap.getItems();
|
||||
Map<String, Property> props = op.getProperties();
|
||||
flattenProperties(props, "path");
|
||||
}
|
||||
} else if (property instanceof MapProperty) {
|
||||
MapProperty op = (MapProperty) property;
|
||||
|
||||
Property innerProperty = op.getAdditionalProperties();
|
||||
if(innerProperty instanceof ObjectProperty) {
|
||||
ModelImpl innerModel = new ModelImpl();
|
||||
// TODO: model props
|
||||
innerModel.setTitle(property.getTitle());
|
||||
property.getVendorExtensions();
|
||||
property.getRequired();
|
||||
property.getReadOnly();
|
||||
property.getAccess();
|
||||
innerModel.setDescription(property.getDescription());
|
||||
innerModel.setExample(property.getExample());
|
||||
innerModel.setName(property.getName());
|
||||
innerModel.setXml(property.getXml());
|
||||
|
||||
innerModel.setAdditionalProperties(innerProperty);
|
||||
|
||||
String modelName = uniqueName("inline_response_" + key);
|
||||
String existing = matchGenerated(innerModel);
|
||||
if (existing != null) {
|
||||
response.setSchema(new RefProperty(existing));
|
||||
} else {
|
||||
response.setSchema(new RefProperty(modelName));
|
||||
addGenerated(modelName, model);
|
||||
swagger.addDefinition(modelName, model);
|
||||
addGenerated(modelName, innerModel);
|
||||
swagger.addDefinition(modelName, innerModel);
|
||||
}
|
||||
}
|
||||
} else if (property instanceof MapProperty) {
|
||||
MapProperty op = (MapProperty) property;
|
||||
String modelName = uniqueName("inline_response_" + key);
|
||||
Model model = modelFromProperty(op, modelName);
|
||||
String existing = matchGenerated(model);
|
||||
if (existing != null) {
|
||||
response.setSchema(new RefProperty(existing));
|
||||
} else {
|
||||
response.setSchema(new RefProperty(modelName));
|
||||
addGenerated(modelName, model);
|
||||
swagger.addDefinition(modelName, model);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -186,7 +196,6 @@ public class InlineModelResolver {
|
||||
if (property instanceof ObjectProperty) {
|
||||
String modelName = uniqueName(path + "_" + key);
|
||||
|
||||
|
||||
ObjectProperty op = (ObjectProperty) property;
|
||||
Model model = modelFromProperty(op, modelName);
|
||||
|
||||
|
@ -5,6 +5,7 @@ import io.swagger.models.*;
|
||||
import io.swagger.models.parameters.BodyParameter;
|
||||
import io.swagger.models.parameters.Parameter;
|
||||
import io.swagger.models.properties.*;
|
||||
import io.swagger.util.Json;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import java.util.Map;
|
||||
@ -195,6 +196,30 @@ public class InlineModelResolverTest {
|
||||
MapProperty schema = new MapProperty();
|
||||
schema.setAdditionalProperties(new StringProperty());
|
||||
|
||||
swagger.path("/foo/baz", new Path()
|
||||
.get(new Operation()
|
||||
.response(200, new Response()
|
||||
.vendorExtension("x-foo", "bar")
|
||||
.description("it works!")
|
||||
.schema(schema))));
|
||||
new InlineModelResolver().flatten(swagger);
|
||||
Json.prettyPrint(swagger);
|
||||
|
||||
Response response = swagger.getPaths().get("/foo/baz").getGet().getResponses().get("200");
|
||||
|
||||
Property property = response.getSchema();
|
||||
assertTrue(property instanceof MapProperty);
|
||||
assertTrue(swagger.getDefinitions().size() == 0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInlineMapResponseWithObjectProperty() throws Exception {
|
||||
Swagger swagger = new Swagger();
|
||||
|
||||
MapProperty schema = new MapProperty();
|
||||
schema.setAdditionalProperties(new ObjectProperty()
|
||||
.property("name", new StringProperty()));
|
||||
|
||||
swagger.path("/foo/baz", new Path()
|
||||
.get(new Operation()
|
||||
.response(200, new Response()
|
||||
@ -209,9 +234,41 @@ public class InlineModelResolverTest {
|
||||
assertTrue(property instanceof RefProperty);
|
||||
|
||||
Model inline = swagger.getDefinitions().get("inline_response_200");
|
||||
assertTrue(inline instanceof ArrayModel);
|
||||
ArrayModel am = (ArrayModel) inline;
|
||||
Property innerProperty = am.getItems();
|
||||
assertTrue(innerProperty instanceof StringProperty);
|
||||
assertTrue(inline instanceof ModelImpl);
|
||||
ModelImpl impl = (ModelImpl) inline;
|
||||
|
||||
Property innerProperty = impl.getAdditionalProperties();
|
||||
assertTrue(innerProperty instanceof ObjectProperty);
|
||||
|
||||
ObjectProperty obj = (ObjectProperty) innerProperty;
|
||||
Property name = obj.getProperties().get("name");
|
||||
assertTrue(name instanceof StringProperty);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testArrayResponse() {
|
||||
Swagger swagger = new Swagger();
|
||||
|
||||
ArrayProperty schema = new ArrayProperty();
|
||||
schema.setItems(new ObjectProperty()
|
||||
.property("name", new StringProperty()));
|
||||
|
||||
swagger.path("/foo/baz", new Path()
|
||||
.get(new Operation()
|
||||
.response(200, new Response()
|
||||
.vendorExtension("x-foo", "bar")
|
||||
.description("it works!")
|
||||
.schema(schema))));
|
||||
new InlineModelResolver().flatten(swagger);
|
||||
|
||||
Response response = swagger.getPaths().get("/foo/baz").getGet().getResponses().get("200");
|
||||
assertTrue(response.getSchema() instanceof ArrayProperty);
|
||||
|
||||
ArrayProperty am = (ArrayProperty) response.getSchema();
|
||||
Property items = am.getItems();
|
||||
assertTrue(items instanceof ObjectProperty);
|
||||
ObjectProperty op = (ObjectProperty) items;
|
||||
Property name = op.getProperties().get("name");
|
||||
assertTrue(name instanceof StringProperty);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user