forked from loafle/openapi-generator-original
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:
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user