forked from loafle/openapi-generator-original
Merge pull request #2872 from dmytrobr/feature/issue-2868
use Title attribute as model name
This commit is contained in:
commit
7b6747e6f3
1
modules/swagger-codegen/.gitignore
vendored
1
modules/swagger-codegen/.gitignore
vendored
@ -1 +1,2 @@
|
|||||||
/.settings/
|
/.settings/
|
||||||
|
/test-output/
|
||||||
|
@ -50,7 +50,7 @@ public class InlineModelResolver {
|
|||||||
if (obj.getType() == null || "object".equals(obj.getType())) {
|
if (obj.getType() == null || "object".equals(obj.getType())) {
|
||||||
if (obj.getProperties() != null && obj.getProperties().size() > 0) {
|
if (obj.getProperties() != null && obj.getProperties().size() > 0) {
|
||||||
flattenProperties(obj.getProperties(), pathname);
|
flattenProperties(obj.getProperties(), pathname);
|
||||||
String modelName = uniqueName(bp.getName());
|
String modelName = resolveModelName( obj.getTitle(), bp.getName());
|
||||||
bp.setSchema(new RefModel(modelName));
|
bp.setSchema(new RefModel(modelName));
|
||||||
addGenerated(modelName, model);
|
addGenerated(modelName, model);
|
||||||
swagger.addDefinition(modelName, model);
|
swagger.addDefinition(modelName, model);
|
||||||
@ -65,7 +65,7 @@ public class InlineModelResolver {
|
|||||||
ObjectProperty op = (ObjectProperty) inner;
|
ObjectProperty op = (ObjectProperty) inner;
|
||||||
if (op.getProperties() != null && op.getProperties().size() > 0) {
|
if (op.getProperties() != null && op.getProperties().size() > 0) {
|
||||||
flattenProperties(op.getProperties(), pathname);
|
flattenProperties(op.getProperties(), pathname);
|
||||||
String modelName = uniqueName(bp.getName());
|
String modelName = resolveModelName( op.getTitle(), bp.getName());
|
||||||
Model innerModel = modelFromProperty(op, modelName);
|
Model innerModel = modelFromProperty(op, modelName);
|
||||||
String existing = matchGenerated(innerModel);
|
String existing = matchGenerated(innerModel);
|
||||||
if (existing != null) {
|
if (existing != null) {
|
||||||
@ -91,7 +91,7 @@ public class InlineModelResolver {
|
|||||||
if (property instanceof ObjectProperty) {
|
if (property instanceof ObjectProperty) {
|
||||||
ObjectProperty op = (ObjectProperty) property;
|
ObjectProperty op = (ObjectProperty) property;
|
||||||
if (op.getProperties() != null && op.getProperties().size() > 0) {
|
if (op.getProperties() != null && op.getProperties().size() > 0) {
|
||||||
String modelName = uniqueName("inline_response_" + key);
|
String modelName = resolveModelName( op.getTitle(),"inline_response_" + key);
|
||||||
Model model = modelFromProperty(op, modelName);
|
Model model = modelFromProperty(op, modelName);
|
||||||
String existing = matchGenerated(model);
|
String existing = matchGenerated(model);
|
||||||
if (existing != null) {
|
if (existing != null) {
|
||||||
@ -110,7 +110,7 @@ public class InlineModelResolver {
|
|||||||
ObjectProperty op = (ObjectProperty) inner;
|
ObjectProperty op = (ObjectProperty) inner;
|
||||||
if (op.getProperties() != null && op.getProperties().size() > 0) {
|
if (op.getProperties() != null && op.getProperties().size() > 0) {
|
||||||
flattenProperties(op.getProperties(), pathname);
|
flattenProperties(op.getProperties(), pathname);
|
||||||
String modelName = uniqueName("inline_response_" + key);
|
String modelName = resolveModelName( op.getTitle(),"inline_response_" + key);
|
||||||
Model innerModel = modelFromProperty(op, modelName);
|
Model innerModel = modelFromProperty(op, modelName);
|
||||||
String existing = matchGenerated(innerModel);
|
String existing = matchGenerated(innerModel);
|
||||||
if (existing != null) {
|
if (existing != null) {
|
||||||
@ -130,7 +130,7 @@ public class InlineModelResolver {
|
|||||||
ObjectProperty op = (ObjectProperty) innerProperty;
|
ObjectProperty op = (ObjectProperty) innerProperty;
|
||||||
if (op.getProperties() != null && op.getProperties().size() > 0) {
|
if (op.getProperties() != null && op.getProperties().size() > 0) {
|
||||||
flattenProperties(op.getProperties(), pathname);
|
flattenProperties(op.getProperties(), pathname);
|
||||||
String modelName = uniqueName("inline_response_" + key);
|
String modelName = resolveModelName( op.getTitle(),"inline_response_" + key);
|
||||||
Model innerModel = modelFromProperty(op, modelName);
|
Model innerModel = modelFromProperty(op, modelName);
|
||||||
String existing = matchGenerated(innerModel);
|
String existing = matchGenerated(innerModel);
|
||||||
if (existing != null) {
|
if (existing != null) {
|
||||||
@ -184,6 +184,15 @@ public class InlineModelResolver {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String resolveModelName(String title, String key ) {
|
||||||
|
if (title == null) {
|
||||||
|
return uniqueName(key);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return uniqueName(title);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public String matchGenerated(Model model) {
|
public String matchGenerated(Model model) {
|
||||||
if (this.skipMatches) {
|
if (this.skipMatches) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -77,6 +77,40 @@ public class InlineModelResolverTest {
|
|||||||
assertTrue(model.getProperties().get("name") instanceof StringProperty);
|
assertTrue(model.getProperties().get("name") instanceof StringProperty);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testInlineResponseModelWithTitle() throws Exception {
|
||||||
|
Swagger swagger = new Swagger();
|
||||||
|
|
||||||
|
String responseTitle = "GetBarResponse";
|
||||||
|
swagger.path("/foo/bar", new Path()
|
||||||
|
.get(new Operation()
|
||||||
|
.response(200, new Response()
|
||||||
|
.description("it works!")
|
||||||
|
.schema(new ObjectProperty().title(responseTitle)
|
||||||
|
.property("name", new StringProperty())))))
|
||||||
|
.path("/foo/baz", new Path()
|
||||||
|
.get(new Operation()
|
||||||
|
.response(200, new Response()
|
||||||
|
.vendorExtension("x-foo", "bar")
|
||||||
|
.description("it works!")
|
||||||
|
.schema(new ObjectProperty()
|
||||||
|
.property("name", new StringProperty())))));
|
||||||
|
new InlineModelResolver().flatten(swagger);
|
||||||
|
|
||||||
|
Map<String, Response> responses = swagger.getPaths().get("/foo/bar").getGet().getResponses();
|
||||||
|
|
||||||
|
Response response = responses.get("200");
|
||||||
|
assertNotNull(response);
|
||||||
|
assertTrue(response.getSchema() instanceof RefProperty);
|
||||||
|
|
||||||
|
ModelImpl model = (ModelImpl)swagger.getDefinitions().get(responseTitle);
|
||||||
|
assertTrue(model.getProperties().size() == 1);
|
||||||
|
assertNotNull(model.getProperties().get("name"));
|
||||||
|
assertTrue(model.getProperties().get("name") instanceof StringProperty);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void resolveInlineArrayModel() throws Exception {
|
public void resolveInlineArrayModel() throws Exception {
|
||||||
Swagger swagger = new Swagger();
|
Swagger swagger = new Swagger();
|
||||||
@ -129,6 +163,35 @@ public class InlineModelResolverTest {
|
|||||||
assertNotNull(impl.getProperties().get("address"));
|
assertNotNull(impl.getProperties().get("address"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void resolveInlineBodyParameterWithTitle() throws Exception {
|
||||||
|
Swagger swagger = new Swagger();
|
||||||
|
|
||||||
|
ModelImpl addressModelItem = new ModelImpl();
|
||||||
|
String addressModelName = "DetailedAddress";
|
||||||
|
addressModelItem.setTitle(addressModelName);
|
||||||
|
swagger.path("/hello", new Path()
|
||||||
|
.get(new Operation()
|
||||||
|
.parameter(new BodyParameter()
|
||||||
|
.name("body")
|
||||||
|
.schema(addressModelItem
|
||||||
|
.property("address", new ObjectProperty()
|
||||||
|
.property("street", new StringProperty()))
|
||||||
|
.property("name", new StringProperty())))));
|
||||||
|
|
||||||
|
new InlineModelResolver().flatten(swagger);
|
||||||
|
|
||||||
|
Operation operation = swagger.getPaths().get("/hello").getGet();
|
||||||
|
BodyParameter bp = (BodyParameter)operation.getParameters().get(0);
|
||||||
|
assertTrue(bp.getSchema() instanceof RefModel);
|
||||||
|
|
||||||
|
Model body = swagger.getDefinitions().get(addressModelName);
|
||||||
|
assertTrue(body instanceof ModelImpl);
|
||||||
|
|
||||||
|
ModelImpl impl = (ModelImpl) body;
|
||||||
|
assertNotNull(impl.getProperties().get("address"));
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void notResolveNonModelBodyParameter() throws Exception {
|
public void notResolveNonModelBodyParameter() throws Exception {
|
||||||
Swagger swagger = new Swagger();
|
Swagger swagger = new Swagger();
|
||||||
@ -245,6 +308,50 @@ public class InlineModelResolverTest {
|
|||||||
assertTrue(impl.getProperties().get("name") instanceof StringProperty);
|
assertTrue(impl.getProperties().get("name") instanceof StringProperty);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void resolveInlineArrayResponseWithTitle() throws Exception {
|
||||||
|
Swagger swagger = new Swagger();
|
||||||
|
|
||||||
|
swagger.path("/foo/baz", new Path()
|
||||||
|
.get(new Operation()
|
||||||
|
.response(200, new Response()
|
||||||
|
.vendorExtension("x-foo", "bar")
|
||||||
|
.description("it works!")
|
||||||
|
.schema(new ArrayProperty()
|
||||||
|
.items(
|
||||||
|
new ObjectProperty()
|
||||||
|
.title("FooBar")
|
||||||
|
.property("name", new StringProperty()))))));
|
||||||
|
|
||||||
|
new InlineModelResolver().flatten(swagger);
|
||||||
|
|
||||||
|
Response response = swagger.getPaths().get("/foo/baz").getGet().getResponses().get("200");
|
||||||
|
assertNotNull(response);
|
||||||
|
|
||||||
|
assertNotNull(response.getSchema());
|
||||||
|
Property responseProperty = response.getSchema();
|
||||||
|
|
||||||
|
// no need to flatten more
|
||||||
|
assertTrue(responseProperty instanceof ArrayProperty);
|
||||||
|
|
||||||
|
ArrayProperty ap = (ArrayProperty) responseProperty;
|
||||||
|
Property p = ap.getItems();
|
||||||
|
|
||||||
|
assertNotNull(p);
|
||||||
|
|
||||||
|
RefProperty rp = (RefProperty) p;
|
||||||
|
assertEquals(rp.getType(), "ref");
|
||||||
|
assertEquals(rp.get$ref(), "#/definitions/"+ "FooBar");
|
||||||
|
assertEquals(rp.getSimpleRef(), "FooBar");
|
||||||
|
|
||||||
|
Model inline = swagger.getDefinitions().get("FooBar");
|
||||||
|
assertNotNull(inline);
|
||||||
|
assertTrue(inline instanceof ModelImpl);
|
||||||
|
ModelImpl impl = (ModelImpl) inline;
|
||||||
|
assertNotNull(impl.getProperties().get("name"));
|
||||||
|
assertTrue(impl.getProperties().get("name") instanceof StringProperty);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testInlineMapResponse() throws Exception {
|
public void testInlineMapResponse() throws Exception {
|
||||||
Swagger swagger = new Swagger();
|
Swagger swagger = new Swagger();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user