From aaf1df19717aea46e2c0eedf54e7cfeacd09afd0 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Mon, 19 Oct 2015 23:10:48 -0700 Subject: [PATCH] more flattening fixes --- .../swagger/codegen/InlineModelResolver.java | 22 +++++---- .../codegen/InlineModelResolverTest.java | 45 ++++++++++++++++--- 2 files changed, 52 insertions(+), 15 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java index e137b8843c6..1a811ab4372 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java @@ -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) { diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java index d1c9fc63d9e..d3d8a60f866 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/InlineModelResolverTest.java @@ -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); + } }