forked from loafle/openapi-generator-original
Do not generate models for "object" type with no properties
Also updated the petstore sample to include operations to cover the case in model property and response, and updated Java clients to sync with it. Closes #2237
This commit is contained in:
@@ -179,7 +179,7 @@ public class InlineModelResolverTest {
|
||||
assertTrue(inner instanceof RefProperty);
|
||||
|
||||
RefProperty rp = (RefProperty) inner;
|
||||
|
||||
|
||||
assertEquals(rp.getType(), "ref");
|
||||
assertEquals(rp.get$ref(), "#/definitions/body");
|
||||
assertEquals(rp.getSimpleRef(), "body");
|
||||
@@ -349,4 +349,287 @@ public class InlineModelResolverTest {
|
||||
|
||||
Json.prettyPrint(swagger);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testArbitraryObjectBodyParam() {
|
||||
Swagger swagger = new Swagger();
|
||||
|
||||
swagger.path("/hello", new Path()
|
||||
.get(new Operation()
|
||||
.parameter(new BodyParameter()
|
||||
.name("body")
|
||||
.schema(new ModelImpl()))));
|
||||
|
||||
new InlineModelResolver().flatten(swagger);
|
||||
|
||||
Operation operation = swagger.getPaths().get("/hello").getGet();
|
||||
BodyParameter bp = (BodyParameter)operation.getParameters().get(0);
|
||||
assertTrue(bp.getSchema() instanceof ModelImpl);
|
||||
ModelImpl m = (ModelImpl) bp.getSchema();
|
||||
assertNull(m.getType());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testArbitraryObjectBodyParamInline() {
|
||||
Swagger swagger = new Swagger();
|
||||
|
||||
swagger.path("/hello", new Path()
|
||||
.get(new Operation()
|
||||
.parameter(new BodyParameter()
|
||||
.name("body")
|
||||
.schema(new ModelImpl()
|
||||
.property("arbitrary", new ObjectProperty())))));
|
||||
|
||||
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("body");
|
||||
assertTrue(body instanceof ModelImpl);
|
||||
|
||||
ModelImpl impl = (ModelImpl) body;
|
||||
Property p = impl.getProperties().get("arbitrary");
|
||||
assertNotNull(p);
|
||||
assertTrue(p instanceof ObjectProperty);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testArbitraryObjectBodyParamWithArray() {
|
||||
Swagger swagger = new Swagger();
|
||||
|
||||
swagger.path("/hello", new Path()
|
||||
.get(new Operation()
|
||||
.parameter(new BodyParameter()
|
||||
.name("body")
|
||||
.schema(new ArrayModel()
|
||||
.items(new ObjectProperty())))));
|
||||
|
||||
new InlineModelResolver().flatten(swagger);
|
||||
|
||||
Parameter param = swagger.getPaths().get("/hello").getGet().getParameters().get(0);
|
||||
assertTrue(param instanceof BodyParameter);
|
||||
|
||||
BodyParameter bp = (BodyParameter) param;
|
||||
Model schema = bp.getSchema();
|
||||
|
||||
assertTrue(schema instanceof ArrayModel);
|
||||
|
||||
ArrayModel am = (ArrayModel) schema;
|
||||
Property inner = am.getItems();
|
||||
assertTrue(inner instanceof ObjectProperty);
|
||||
|
||||
ObjectProperty op = (ObjectProperty) inner;
|
||||
assertNotNull(op);
|
||||
assertNull(op.getProperties());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testArbitraryObjectBodyParamArrayInline() {
|
||||
Swagger swagger = new Swagger();
|
||||
|
||||
swagger.path("/hello", new Path()
|
||||
.get(new Operation()
|
||||
.parameter(new BodyParameter()
|
||||
.name("body")
|
||||
.schema(new ArrayModel()
|
||||
.items(new ObjectProperty()
|
||||
.property("arbitrary", new ObjectProperty()))))));
|
||||
|
||||
new InlineModelResolver().flatten(swagger);
|
||||
|
||||
Parameter param = swagger.getPaths().get("/hello").getGet().getParameters().get(0);
|
||||
assertTrue(param instanceof BodyParameter);
|
||||
|
||||
BodyParameter bp = (BodyParameter) param;
|
||||
Model schema = bp.getSchema();
|
||||
|
||||
assertTrue(schema instanceof ArrayModel);
|
||||
|
||||
ArrayModel am = (ArrayModel) schema;
|
||||
Property inner = am.getItems();
|
||||
assertTrue(inner instanceof RefProperty);
|
||||
|
||||
RefProperty rp = (RefProperty) inner;
|
||||
|
||||
assertEquals(rp.getType(), "ref");
|
||||
assertEquals(rp.get$ref(), "#/definitions/body");
|
||||
assertEquals(rp.getSimpleRef(), "body");
|
||||
|
||||
Model inline = swagger.getDefinitions().get("body");
|
||||
assertNotNull(inline);
|
||||
assertTrue(inline instanceof ModelImpl);
|
||||
ModelImpl impl = (ModelImpl) inline;
|
||||
Property p = impl.getProperties().get("arbitrary");
|
||||
assertNotNull(p);
|
||||
assertTrue(p instanceof ObjectProperty);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testArbitraryObjectResponse() {
|
||||
Swagger swagger = new Swagger();
|
||||
|
||||
swagger.path("/foo/bar", new Path()
|
||||
.get(new Operation()
|
||||
.response(200, new Response()
|
||||
.description("it works!")
|
||||
.schema(new ObjectProperty()))));
|
||||
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 ObjectProperty);
|
||||
ObjectProperty op = (ObjectProperty) response.getSchema();
|
||||
assertNull(op.getProperties());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testArbitraryObjectResponseArray() {
|
||||
Swagger swagger = new Swagger();
|
||||
|
||||
swagger.path("/foo/baz", new Path()
|
||||
.get(new Operation()
|
||||
.response(200, new Response()
|
||||
.description("it works!")
|
||||
.schema(new ArrayProperty()
|
||||
.items(new ObjectProperty())))));
|
||||
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;
|
||||
assertNull(op.getProperties());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testArbitraryObjectResponseArrayInline() {
|
||||
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()
|
||||
.property("arbitrary", new ObjectProperty()))))));
|
||||
|
||||
new InlineModelResolver().flatten(swagger);
|
||||
|
||||
Response response = swagger.getPaths().get("/foo/baz").getGet().getResponses().get("200");
|
||||
assertNotNull(response);
|
||||
|
||||
assertNotNull(response.getSchema());
|
||||
Property responseProperty = response.getSchema();
|
||||
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/inline_response_200");
|
||||
assertEquals(rp.getSimpleRef(), "inline_response_200");
|
||||
|
||||
Model inline = swagger.getDefinitions().get("inline_response_200");
|
||||
assertNotNull(inline);
|
||||
assertTrue(inline instanceof ModelImpl);
|
||||
ModelImpl impl = (ModelImpl) inline;
|
||||
Property inlineProp = impl.getProperties().get("arbitrary");
|
||||
assertNotNull(inlineProp);
|
||||
assertTrue(inlineProp instanceof ObjectProperty);
|
||||
ObjectProperty op = (ObjectProperty) inlineProp;
|
||||
assertNull(op.getProperties());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testArbitraryObjectResponseMapInline() {
|
||||
Swagger swagger = new Swagger();
|
||||
|
||||
MapProperty schema = new MapProperty();
|
||||
schema.setAdditionalProperties(new ObjectProperty());
|
||||
|
||||
swagger.path("/foo/baz", new Path()
|
||||
.get(new Operation()
|
||||
.response(200, new Response()
|
||||
.description("it works!")
|
||||
.schema(schema))));
|
||||
new InlineModelResolver().flatten(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);
|
||||
Property inlineProp = ((MapProperty) property).getAdditionalProperties();
|
||||
assertTrue(inlineProp instanceof ObjectProperty);
|
||||
ObjectProperty op = (ObjectProperty) inlineProp;
|
||||
assertNull(op.getProperties());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testArbitraryObjectModelInline() {
|
||||
Swagger swagger = new Swagger();
|
||||
|
||||
swagger.addDefinition("User", new ModelImpl()
|
||||
.name("user")
|
||||
.description("a common user")
|
||||
.property("name", new StringProperty())
|
||||
.property("arbitrary", new ObjectProperty()
|
||||
.title("title")
|
||||
._default("default")
|
||||
.access("access")
|
||||
.readOnly(false)
|
||||
.required(true)
|
||||
.description("description")
|
||||
.name("name")));
|
||||
|
||||
new InlineModelResolver().flatten(swagger);
|
||||
|
||||
ModelImpl user = (ModelImpl)swagger.getDefinitions().get("User");
|
||||
assertNotNull(user);
|
||||
Property inlineProp = user.getProperties().get("arbitrary");
|
||||
assertTrue(inlineProp instanceof ObjectProperty);
|
||||
ObjectProperty op = (ObjectProperty) inlineProp;
|
||||
assertNull(op.getProperties());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testArbitraryObjectModelWithArrayInline() {
|
||||
Swagger swagger = new Swagger();
|
||||
|
||||
swagger.addDefinition("User", new ArrayModel()
|
||||
.items(new ObjectProperty()
|
||||
.title("title")
|
||||
._default("default")
|
||||
.access("access")
|
||||
.readOnly(false)
|
||||
.required(true)
|
||||
.description("description")
|
||||
.name("name")
|
||||
.property("arbitrary", new ObjectProperty())));
|
||||
|
||||
new InlineModelResolver().flatten(swagger);
|
||||
|
||||
Model model = swagger.getDefinitions().get("User");
|
||||
assertTrue(model instanceof ArrayModel);
|
||||
ArrayModel am = (ArrayModel) model;
|
||||
Property inner = am.getItems();
|
||||
assertTrue(inner instanceof RefProperty);
|
||||
|
||||
ModelImpl userInner = (ModelImpl)swagger.getDefinitions().get("User_inner");
|
||||
assertNotNull(userInner);
|
||||
Property inlineProp = userInner.getProperties().get("arbitrary");
|
||||
assertTrue(inlineProp instanceof ObjectProperty);
|
||||
ObjectProperty op = (ObjectProperty) inlineProp;
|
||||
assertNull(op.getProperties());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user