Skip to content

Adding support for properties in ComposedModel #9827

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Nov 12, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -1474,6 +1474,10 @@ public CodegenModel fromModel(String name, Model model, Map<String, Model> allDe
}
}

if (model.getProperties() != null) {
properties.putAll(model.getProperties());
}

// child model (properties owned by the model itself)
Model child = composed.getChild();
if (child != null && child instanceof RefModel && allDefinitions != null) {
Expand All @@ -1486,6 +1490,7 @@ public CodegenModel fromModel(String name, Model model, Map<String, Model> allDe
addProperties(allProperties, allRequired, child, allDefinitions);
}
}

addVars(m, properties, required, allDefinitions, allProperties, allRequired);
} else {
ModelImpl impl = (ModelImpl) model;
Expand Down Expand Up @@ -1556,9 +1561,14 @@ protected void addProperties(Map<String, Property> properties,
}
} else if (model instanceof RefModel) {
String interfaceRef = ((RefModel) model).getSimpleRef();
Model interfaceModel = allDefinitions.get(interfaceRef);
addProperties(properties, required, interfaceModel, allDefinitions);
if (allDefinitions != null) {
Model interfaceModel = allDefinitions.get(interfaceRef);
addProperties(properties, required, interfaceModel, allDefinitions);
}
} else if (model instanceof ComposedModel) {
if (model.getProperties() != null) {
properties.putAll(model.getProperties());
}
for (Model component :((ComposedModel) model).getAllOf()) {
addProperties(properties, required, component, allDefinitions);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,21 @@

public class CodegenTest {

@Test(description = "handle simple composition")
public void propertiesInComposedModelTest() {
final Swagger swagger = parseAndPrepareSwagger("src/test/resources/2_0/allOfProperties.yaml");
final DefaultCodegen codegen = new DefaultCodegen();
codegen.supportsInheritance = true;
final Model model = swagger.getDefinitions().get("RedisResource");
CodegenModel composed = codegen.fromModel("RedisResource", model, swagger.getDefinitions());

Assert.assertEquals(composed.vars.size(), 3);
Assert.assertEquals(composed.vars.get(0).baseName, "modelOneProp");
Assert.assertEquals(composed.vars.get(1).baseName, "properties");
Assert.assertEquals(composed.vars.get(2).baseName, "zones");
Assert.assertNull(composed.parent);
}

@Test(description = "test sanitizeTag")
public void sanitizeTagTest() {
final DefaultCodegen codegen = new DefaultCodegen();
Expand Down Expand Up @@ -47,7 +62,7 @@ public void camelizeNamesTest() {
Assert.assertEquals(codegen.camelize(".foo.bar"), "FooBar");
Assert.assertEquals(codegen.camelize("foo$bar"), "Foo$bar");
Assert.assertEquals(codegen.camelize("foo_$bar"), "Foo$bar");

Assert.assertEquals(codegen.camelize("foo_bar"), "FooBar");
Assert.assertEquals(codegen.camelize("foo_bar_baz"), "FooBarBaz");
Assert.assertEquals(codegen.camelize("foo/bar.baz"), "FooBarBaz");
Expand Down Expand Up @@ -232,7 +247,7 @@ public void fileResponeseTest() {
Assert.assertTrue(op.responses.get(0).isFile);
Assert.assertTrue(op.isResponseFile);
}

@Test(description = "discriminator is present")
public void discriminatorTest() {
final Swagger model = parseAndPrepareSwagger("src/test/resources/2_0/discriminatorTest.json");
Expand Down Expand Up @@ -410,47 +425,47 @@ public void relativeDefinitionsMapInResponseTest() {
Assert.assertTrue(op.imports.contains("PhotoThumbnailsRequest"));

}

@Test(description = "use operation consumes and produces")
public void localConsumesAndProducesTest() {
final Swagger model = parseAndPrepareSwagger("src/test/resources/2_0/globalConsumesAndProduces.json");
final DefaultCodegen codegen = new DefaultCodegen();
final String path = "/tests/localConsumesAndProduces";
final Operation p = model.getPaths().get(path).getGet();
CodegenOperation op = codegen.fromOperation(path, "get", p, model.getDefinitions(), model);

Assert.assertTrue(op.hasConsumes);
Assert.assertEquals(op.consumes.size(), 1);
Assert.assertEquals(op.consumes.get(0).get("mediaType"), "application/json");
Assert.assertTrue(op.hasProduces);
Assert.assertEquals(op.produces.size(), 1);
Assert.assertEquals(op.produces.get(0).get("mediaType"), "application/json");
}

@Test(description = "use spec consumes and produces")
public void globalConsumesAndProducesTest() {
final Swagger model = parseAndPrepareSwagger("src/test/resources/2_0/globalConsumesAndProduces.json");
final DefaultCodegen codegen = new DefaultCodegen();
final String path = "/tests/globalConsumesAndProduces";
final Operation p = model.getPaths().get(path).getGet();
CodegenOperation op = codegen.fromOperation(path, "get", p, model.getDefinitions(), model);

Assert.assertTrue(op.hasConsumes);
Assert.assertEquals(op.consumes.size(), 1);
Assert.assertEquals(op.consumes.get(0).get("mediaType"), "application/global_consumes");
Assert.assertTrue(op.hasProduces);
Assert.assertEquals(op.produces.size(), 1);
Assert.assertEquals(op.produces.get(0).get("mediaType"), "application/global_produces");
}

@Test(description = "use operation consumes and produces (reset in operation with empty array)")
public void localResetConsumesAndProducesTest() {
final Swagger model = parseAndPrepareSwagger("src/test/resources/2_0/globalConsumesAndProduces.json");
final DefaultCodegen codegen = new DefaultCodegen();
final String path = "/tests/localResetConsumesAndProduces";
final Operation p = model.getPaths().get(path).getGet();
CodegenOperation op = codegen.fromOperation(path, "get", p, model.getDefinitions(), model);

Assert.assertNotNull(op);
Assert.assertFalse(op.hasConsumes);
Assert.assertNull(op.consumes);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
swagger: '2.0'
info:
version: 0.0.0
title: Simple API
paths:
/:
get:
responses:
200:
description: OK

definitions:

ModelOne:
type: object
properties:
modelOneProp:
type: string

ModelTwo:
type: object
properties:
modelTwoProp:
type: string

ModelThree:
type: object
properties:
modelThreeProp:
type: string


User_Id_Resource:
allOf:
- "$ref": "#/definitions/ModelTwo"
properties:
aplicacion:
type: string
description: some description
example: some example value

RedisResource:
properties:
properties:
x-ms-client-flatten: true
"$ref": "#/definitions/ModelTwo"
description: Redis cache properties.
zones:
type: array
items:
type: string
description: A list of availability zones denoting where the resource needs
to come from.
required:
- properties
allOf:
- "$ref": "#/definitions/ModelOne"
description: A single Redis item in List or Get Operation.
4 changes: 2 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -938,10 +938,10 @@
</repository>
</repositories>
<properties>
<swagger-parser-version>1.0.47</swagger-parser-version>
<swagger-parser-version>1.0.48-SNAPSHOT</swagger-parser-version>
<scala-version>2.11.1</scala-version>
<felix-version>3.3.0</felix-version>
<swagger-core-version>1.5.24</swagger-core-version>
<swagger-core-version>1.5.25-SNAPSHOT</swagger-core-version>
<commons-io-version>2.4</commons-io-version>
<commons-cli-version>1.2</commons-cli-version>
<junit-version>4.8.1</junit-version>
Expand Down
4 changes: 2 additions & 2 deletions pom.xml.bash
Original file line number Diff line number Diff line change
Expand Up @@ -914,10 +914,10 @@
</repository>
</repositories>
<properties>
<swagger-parser-version>1.0.47</swagger-parser-version>
<swagger-parser-version>1.0.48-SNAPSHOT</swagger-parser-version>
<scala-version>2.11.1</scala-version>
<felix-version>3.3.0</felix-version>
<swagger-core-version>1.5.24</swagger-core-version>
<swagger-core-version>1.5.25-SNAPSHOT</swagger-core-version>
<commons-io-version>2.4</commons-io-version>
<commons-cli-version>1.2</commons-cli-version>
<junit-version>4.8.1</junit-version>
Expand Down
4 changes: 2 additions & 2 deletions pom.xml.circleci
Original file line number Diff line number Diff line change
Expand Up @@ -962,10 +962,10 @@
</repository>
</repositories>
<properties>
<swagger-parser-version>1.0.47</swagger-parser-version>
<swagger-parser-version>1.0.48-SNAPSHOT</swagger-parser-version>
<scala-version>2.11.1</scala-version>
<felix-version>3.3.0</felix-version>
<swagger-core-version>1.5.24</swagger-core-version>
<swagger-core-version>1.5.25-SNAPSHOT</swagger-core-version>
<commons-io-version>2.4</commons-io-version>
<commons-cli-version>1.2</commons-cli-version>
<junit-version>4.8.1</junit-version>
Expand Down
4 changes: 2 additions & 2 deletions pom.xml.circleci.java7
Original file line number Diff line number Diff line change
Expand Up @@ -944,10 +944,10 @@
</repository>
</repositories>
<properties>
<swagger-parser-version>1.0.47</swagger-parser-version>
<swagger-parser-version>1.0.48-SNAPSHOT</swagger-parser-version>
<scala-version>2.11.1</scala-version>
<felix-version>3.3.0</felix-version>
<swagger-core-version>1.5.24</swagger-core-version>
<swagger-core-version>1.5.25-SNAPSHOT</swagger-core-version>
<commons-io-version>2.4</commons-io-version>
<commons-cli-version>1.2</commons-cli-version>
<junit-version>4.8.1</junit-version>
Expand Down
4 changes: 2 additions & 2 deletions pom.xml.ios
Original file line number Diff line number Diff line change
Expand Up @@ -922,10 +922,10 @@
</repository>
</repositories>
<properties>
<swagger-parser-version>1.0.47</swagger-parser-version>
<swagger-parser-version>1.0.48-SNAPSHOT</swagger-parser-version>
<scala-version>2.11.1</scala-version>
<felix-version>3.3.0</felix-version>
<swagger-core-version>1.5.24</swagger-core-version>
<swagger-core-version>1.5.25-SNAPSHOT</swagger-core-version>
<commons-io-version>2.4</commons-io-version>
<commons-cli-version>1.2</commons-cli-version>
<junit-version>4.8.1</junit-version>
Expand Down
4 changes: 2 additions & 2 deletions pom.xml.jenkins
Original file line number Diff line number Diff line change
Expand Up @@ -1004,10 +1004,10 @@
</repository>
</repositories>
<properties>
<swagger-parser-version>1.0.47</swagger-parser-version>
<swagger-parser-version>1.0.48-SNAPSHOT</swagger-parser-version>
<scala-version>2.11.1</scala-version>
<felix-version>3.3.0</felix-version>
<swagger-core-version>1.5.24</swagger-core-version>
<swagger-core-version>1.5.25-SNAPSHOT</swagger-core-version>
<commons-io-version>2.4</commons-io-version>
<commons-cli-version>1.2</commons-cli-version>
<junit-version>4.8.1</junit-version>
Expand Down
4 changes: 2 additions & 2 deletions pom.xml.jenkins.java7
Original file line number Diff line number Diff line change
Expand Up @@ -926,10 +926,10 @@
</repository>
</repositories>
<properties>
<swagger-parser-version>1.0.47</swagger-parser-version>
<swagger-parser-version>1.0.48-SNAPSHOT</swagger-parser-version>
<scala-version>2.11.1</scala-version>
<felix-version>3.3.0</felix-version>
<swagger-core-version>1.5.24</swagger-core-version>
<swagger-core-version>1.5.25-SNAPSHOT</swagger-core-version>
<commons-io-version>2.4</commons-io-version>
<commons-cli-version>1.2</commons-cli-version>
<junit-version>4.8.1</junit-version>
Expand Down
4 changes: 2 additions & 2 deletions pom.xml.travis
Original file line number Diff line number Diff line change
Expand Up @@ -938,10 +938,10 @@
</repository>
</repositories>
<properties>
<swagger-parser-version>1.0.47</swagger-parser-version>
<swagger-parser-version>1.0.48-SNAPSHOT</swagger-parser-version>
<scala-version>2.11.1</scala-version>
<felix-version>3.3.0</felix-version>
<swagger-core-version>1.5.24</swagger-core-version>
<swagger-core-version>1.5.25-SNAPSHOT</swagger-core-version>
<commons-io-version>2.4</commons-io-version>
<commons-cli-version>1.2</commons-cli-version>
<junit-version>4.8.1</junit-version>
Expand Down