Merge pull request #3637 from cbornet/fix_multi_inheritance

[All] Fix some inheritance/composition issues and add allOf unit tests
This commit is contained in:
wing328
2016-10-03 23:18:43 +08:00
committed by GitHub
4 changed files with 264 additions and 6 deletions

View File

@@ -1,5 +1,6 @@
package io.swagger.codegen;
import io.swagger.models.Model;
import io.swagger.models.Operation;
import io.swagger.models.Swagger;
import io.swagger.models.properties.Property;
@@ -187,6 +188,129 @@ public class CodegenTest {
Assert.assertEquals(op.discriminator, "className");
}
@Test(description = "handle simple composition")
public void simpleCompositionTest() {
final Swagger swagger = parseAndPrepareSwagger("src/test/resources/2_0/allOfTest.yaml");
final DefaultCodegen codegen = new DefaultCodegen();
codegen.supportsInheritance = true;
final Model model = swagger.getDefinitions().get("SimpleComposition");
CodegenModel composed = codegen.fromModel("SimpleComposition", model, swagger.getDefinitions());
Assert.assertEquals(composed.vars.size(), 3);
Assert.assertEquals(composed.vars.get(0).baseName, "modelOneProp");
Assert.assertEquals(composed.vars.get(1).baseName, "modelTwoProp");
Assert.assertEquals(composed.vars.get(2).baseName, "simpleCompositionProp");
Assert.assertNull(composed.parent);
}
@Test(description = "handle multi level composition")
public void multiCompositionTest() {
final Swagger swagger = parseAndPrepareSwagger("src/test/resources/2_0/allOfTest.yaml");
final DefaultCodegen codegen = new DefaultCodegen();
codegen.supportsInheritance = true;
final Model model = swagger.getDefinitions().get("CompositionOfSimpleComposition");
CodegenModel composed = codegen.fromModel("CompositionOfSimpleComposition", model, swagger.getDefinitions());
Assert.assertEquals(composed.vars.size(), 5);
Assert.assertEquals(composed.vars.get(0).baseName, "modelOneProp");
Assert.assertEquals(composed.vars.get(1).baseName, "modelTwoProp");
Assert.assertEquals(composed.vars.get(2).baseName, "simpleCompositionProp");
Assert.assertEquals(composed.vars.get(3).baseName, "modelThreeProp");
Assert.assertEquals(composed.vars.get(4).baseName, "compositionOfSimpleCompositionProp");
Assert.assertNull(composed.parent);
}
@Test(description = "handle simple inheritance")
public void simpleInheritanceTest() {
final Swagger swagger = parseAndPrepareSwagger("src/test/resources/2_0/allOfTest.yaml");
final DefaultCodegen codegen = new DefaultCodegen();
codegen.supportsInheritance = true;
final Model model = swagger.getDefinitions().get("ChildOfSimpleParent");
CodegenModel child = codegen.fromModel("ChildOfSimpleParent", model, swagger.getDefinitions());
Assert.assertEquals(child.vars.size(), 2);
Assert.assertEquals(child.vars.get(0).baseName, "modelOneProp");
Assert.assertEquals(child.vars.get(1).baseName, "childOfSimpleParentProp");
Assert.assertEquals(child.parent, "SimpleParent");
}
@Test(description = "handle multi level inheritance")
public void multiInheritanceTest() {
final Swagger swagger = parseAndPrepareSwagger("src/test/resources/2_0/allOfTest.yaml");
final DefaultCodegen codegen = new DefaultCodegen();
codegen.supportsInheritance = true;
final Model model = swagger.getDefinitions().get("ChildOfChildOfSimpleParent");
CodegenModel child = codegen.fromModel("ChildOfChildOfSimpleParent", model, swagger.getDefinitions());
Assert.assertEquals(child.vars.size(), 1);
Assert.assertEquals(child.vars.get(0).baseName, "childOfChildOfSimpleParentProp");
Assert.assertEquals(child.parent, "ChildOfSimpleParent");
}
@Test(description = "copy properties in multi level inheritance if supportsInheritance is false")
public void noSupportsInheritanceTest() {
final Swagger swagger = parseAndPrepareSwagger("src/test/resources/2_0/allOfTest.yaml");
final DefaultCodegen codegen = new DefaultCodegen();
final Model model = swagger.getDefinitions().get("ChildOfChildOfSimpleParent");
CodegenModel child = codegen.fromModel("ChildOfChildOfSimpleParent", model, swagger.getDefinitions());
Assert.assertEquals(child.vars.size(), 5);
Assert.assertEquals(child.vars.get(0).baseName, "modelOneProp");
Assert.assertEquals(child.vars.get(1).baseName, "disc");
Assert.assertEquals(child.vars.get(2).baseName, "simpleParentProp");
Assert.assertEquals(child.vars.get(3).baseName, "childOfSimpleParentProp");
Assert.assertEquals(child.vars.get(4).baseName, "childOfChildOfSimpleParentProp");
Assert.assertEquals(child.parent, "ChildOfSimpleParent");
}
@Test(description = "don't copy interfaces properties if supportsMixins is true")
public void supportsMixinsTest() {
final Swagger swagger = parseAndPrepareSwagger("src/test/resources/2_0/allOfTest.yaml");
final DefaultCodegen codegen = new DefaultCodegen();
codegen.supportsInheritance = true;
codegen.supportsMixins = true;
final Model model = swagger.getDefinitions().get("ChildOfChildOfSimpleParent");
CodegenModel child = codegen.fromModel("ChildOfChildOfSimpleParent", model, swagger.getDefinitions());
Assert.assertEquals(child.vars.size(), 1);
Assert.assertEquals(child.vars.get(0).baseName, "childOfChildOfSimpleParentProp");
Assert.assertEquals(child.allVars.size(), 5);
Assert.assertEquals(child.allVars.get(0).baseName, "modelOneProp");
Assert.assertEquals(child.allVars.get(1).baseName, "disc");
Assert.assertEquals(child.allVars.get(2).baseName, "simpleParentProp");
Assert.assertEquals(child.allVars.get(3).baseName, "childOfSimpleParentProp");
Assert.assertEquals(child.allVars.get(4).baseName, "childOfChildOfSimpleParentProp");
Assert.assertEquals(child.parent, "ChildOfSimpleParent");
}
@Test(description = "handle inheritance from composed model")
public void inheritanceOfComposedModelTest() {
final Swagger swagger = parseAndPrepareSwagger("src/test/resources/2_0/allOfTest.yaml");
final DefaultCodegen codegen = new DefaultCodegen();
codegen.supportsInheritance = true;
final Model model = swagger.getDefinitions().get("ChildOfComposedParent");
CodegenModel child = codegen.fromModel("ChildOfComposedParent", model, swagger.getDefinitions());
Assert.assertEquals(child.vars.size(), 1);
Assert.assertEquals(child.vars.get(0).baseName, "childOfComposedParentProp");
Assert.assertEquals(child.parent, "ComposedParent");
}
@Test(description = "handle multi level inheritance from composed model")
public void multiInheritanceOfComposedModelTest() {
final Swagger swagger = parseAndPrepareSwagger("src/test/resources/2_0/allOfTest.yaml");
final DefaultCodegen codegen = new DefaultCodegen();
codegen.supportsInheritance = true;
final Model model = swagger.getDefinitions().get("ChildOfChildOfComposedParent");
CodegenModel child = codegen.fromModel("ChildOfChildOfComposedParent", model, swagger.getDefinitions());
Assert.assertEquals(child.vars.size(), 1);
Assert.assertEquals(child.vars.get(0).baseName, "childOfChildOfComposedParentProp");
Assert.assertEquals(child.parent, "ChildOfComposedParent");
}
@Test(description = "use operation consumes and produces")
public void localConsumesAndProducesTest() {
final Swagger model = parseAndPrepareSwagger("src/test/resources/2_0/globalConsumesAndProduces.json");