more flattening fixes

This commit is contained in:
Tony Tam 2015-10-19 23:10:48 -07:00
parent 555fd54fbb
commit aaf1df1971
2 changed files with 52 additions and 15 deletions

View File

@ -1,5 +1,6 @@
package io.swagger.codegen;
import com.sun.org.apache.xpath.internal.operations.Mod;
import io.swagger.models.*;
import io.swagger.models.parameters.BodyParameter;
import io.swagger.models.parameters.Parameter;
@ -43,14 +44,18 @@ public class InlineModelResolver {
BodyParameter bp = (BodyParameter) parameter;
if (bp.getSchema() != null) {
Model model = bp.getSchema();
String existing = matchGenerated(model);
if (existing != null) {
bp.setSchema(new RefModel(existing));
} else {
String name = uniqueName(bp.getName());
bp.setSchema(new RefModel(name));
addGenerated(name, model);
swagger.addDefinition(name, model);
if(model instanceof ModelImpl) {
ModelImpl obj = (ModelImpl) model;
flattenProperties(obj.getProperties(), pathname);
}
else if (model instanceof ArrayModel) {
ArrayModel am = (ArrayModel) model;
Property inner = am.getItems();
if(inner instanceof ObjectProperty) {
ObjectProperty op = (ObjectProperty) inner;
flattenProperties(op.getProperties(), pathname);
}
}
}
}
@ -170,6 +175,7 @@ public class InlineModelResolver {
public String uniqueName(String key) {
int count = 0;
boolean done = false;
key = key.replaceAll("[^a-z_\\.A-Z0-9 ]", "");
while (!done) {
String name = key;
if (count > 0) {

View File

@ -110,19 +110,21 @@ public class InlineModelResolverTest {
.parameter(new BodyParameter()
.name("body")
.schema(new ModelImpl()
.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);
assertTrue(bp.getSchema() instanceof ModelImpl);
Model body = swagger.getDefinitions().get("body");
Model body = swagger.getDefinitions().get("hello_address");
assertTrue(body instanceof ModelImpl);
ModelImpl impl = (ModelImpl) body;
assertNotNull(impl.getProperties().get("name"));
assertNotNull(impl.getProperties().get("street"));
}
@Test
@ -134,7 +136,9 @@ public class InlineModelResolverTest {
.parameter(new BodyParameter()
.name("body")
.schema(new ArrayModel()
.items(new StringProperty())))));
.items(new ObjectProperty()
.property("address", new ObjectProperty()
.property("street", new StringProperty())))))));
new InlineModelResolver().flatten(swagger);
@ -144,10 +148,17 @@ public class InlineModelResolverTest {
BodyParameter bp = (BodyParameter) param;
Model schema = bp.getSchema();
assertTrue(schema instanceof RefModel);
assertTrue(schema instanceof ArrayModel);
Model model = swagger.getDefinitions().get("body");
assertTrue(model instanceof ArrayModel);
ArrayModel am = (ArrayModel) schema;
Property inner = am.getItems();
ObjectProperty op = (ObjectProperty) inner;
Property name = op.getProperties().get("address");
assertTrue(name instanceof RefProperty);
Model model = swagger.getDefinitions().get("hello_address");
assertNotNull(model);
}
@Test
@ -267,4 +278,24 @@ public class InlineModelResolverTest {
Property name = op.getProperties().get("name");
assertTrue(name instanceof StringProperty);
}
@Test
public void testBasicInput() {
Swagger swagger = new Swagger();
ModelImpl user = new ModelImpl()
.property("name", new StringProperty());
swagger.path("/foo/baz", new Path()
.post(new Operation()
.parameter(new BodyParameter()
.name("myBody")
.schema(new RefModel("User")))));
swagger.addDefinition("User", user);
new InlineModelResolver().flatten(swagger);
Json.prettyPrint(swagger);
}
}