diff --git a/modules/swagger-parser/src/main/java/io/swagger/parser/processors/ModelProcessor.java b/modules/swagger-parser/src/main/java/io/swagger/parser/processors/ModelProcessor.java index 06b99d1555..6f93c76d67 100644 --- a/modules/swagger-parser/src/main/java/io/swagger/parser/processors/ModelProcessor.java +++ b/modules/swagger-parser/src/main/java/io/swagger/parser/processors/ModelProcessor.java @@ -37,13 +37,13 @@ public void processModel(Model model) { } else if (model instanceof ComposedModel) { processComposedModel((ComposedModel) model); } else if (model instanceof ModelImpl) { - processModelImpl((ModelImpl) model); + processModelProperties( model); } } - private void processModelImpl(ModelImpl modelImpl) { + private void processModelProperties(Model model) { - final Map properties = modelImpl.getProperties(); + final Map properties = model.getProperties(); if (properties == null) { return; @@ -68,6 +68,7 @@ private void processComposedModel(ComposedModel composedModel) { } } + processModelProperties(composedModel); } private void processArrayModel(ArrayModel arrayModel) { diff --git a/modules/swagger-parser/src/test/java/io/swagger/parser/processors/ModelProcessorTest.java b/modules/swagger-parser/src/test/java/io/swagger/parser/processors/ModelProcessorTest.java index 587dd4a4a2..0778c5c031 100644 --- a/modules/swagger-parser/src/test/java/io/swagger/parser/processors/ModelProcessorTest.java +++ b/modules/swagger-parser/src/test/java/io/swagger/parser/processors/ModelProcessorTest.java @@ -2,6 +2,7 @@ import io.swagger.models.*; import io.swagger.models.properties.Property; +import io.swagger.models.properties.RefProperty; import io.swagger.models.refs.RefFormat; import io.swagger.parser.ResolverCache; import mockit.*; @@ -150,4 +151,56 @@ private void setupPropertyAndExternalRefProcessors() { result = externalRefProcessor; }}; } + + + @Test + public void testProcessComposedModelWithProperties(@Injectable final Property property1) throws Exception { + setupPropertyAndExternalRefProcessors(); + + final String ref1 = "http://my.company.com/path/to/file.json#/foo/bar"; + final String ref2 = "http://my.company.com/path/to/file.json#/this/that"; + final String ref3 = "http://my.company.com/path/to/file.json#/hello/world"; + final String ref4 = "http://my.company.com/path/to/file.json#/hello/ref"; + final Property property2 = new RefProperty(ref4); + + ModelProcessor modelProcessor = new ModelProcessor(cache, swagger); + + new Expectations() {{ + externalRefProcessor.processRefToExternalDefinition(ref1, RefFormat.URL); + times = 1; + result = "bar"; + externalRefProcessor.processRefToExternalDefinition(ref2, RefFormat.URL); + times = 1; + result = "that"; + externalRefProcessor.processRefToExternalDefinition(ref3, RefFormat.URL); + times = 1; + result = "world"; + propertyProcessor.processProperty(property1); + times = 1; + propertyProcessor.processProperty(property2); + times = 1; + }}; + + ComposedModel composedModel = new ComposedModel(); + composedModel.child(new RefModel(ref1)); + composedModel.parent(new RefModel(ref2)); + composedModel.interfaces(Arrays.asList(new RefModel(ref3))); + composedModel.addProperty("foo", property1); + composedModel.addProperty("bar", property2); + + modelProcessor.processModel(composedModel); + + new FullVerifications() {{ + externalRefProcessor.processRefToExternalDefinition(ref1, RefFormat.URL); + times = 1; + externalRefProcessor.processRefToExternalDefinition(ref2, RefFormat.URL); + times = 1; + externalRefProcessor.processRefToExternalDefinition(ref3, RefFormat.URL); + times = 1; + }}; + + assertEquals(((RefModel) composedModel.getChild()).get$ref(), "#/definitions/bar"); + assertEquals(((RefModel) composedModel.getParent()).get$ref(), "#/definitions/that"); + assertEquals((composedModel.getInterfaces().get(0)).get$ref(), "#/definitions/world"); + } }