@Test(description = "it should deserialize the composition test") public void testCompositionTest() throws IOException { final String json = ResourceUtils.loadClassResource(getClass(), "specFiles/compositionTest-3.0.json"); final Object deserialized = m.readValue(json, OpenAPI.class); assertTrue(deserialized instanceof OpenAPI); OpenAPI openAPI = (OpenAPI) deserialized; Schema lizardSchema = openAPI.getComponents().getSchemas().get("Lizard"); assertTrue(lizardSchema instanceof ComposedSchema); assertEquals(((ComposedSchema) lizardSchema).getAllOf().size(), 2); Schema petSchema = openAPI.getComponents().getSchemas().get("Pet"); assertEquals(petSchema.getDiscriminator().getPropertyName(), "pet_type"); assertEquals(petSchema.getDiscriminator().getMapping().get("cachorro"), "#/components/schemas/Dog"); }
@Test public void testComposedChildBean() throws Exception { final Schema subModel = context.resolve(new AnnotatedType(Sub2Bean.class)); assertNotNull(subModel); // make sure child points at parent assertTrue(subModel instanceof ComposedSchema); ComposedSchema cm = (ComposedSchema) subModel; assertEquals(cm.getAllOf().get(0).get$ref(), "#/components/schemas/BaseBean2"); // make sure parent properties are filtered out of subclass assertSub1PropertiesValid(cm.getProperties()); final Schema baseModel = context.getDefinedModels().get("BaseBean2"); assertNotNull(baseModel); assertBase2PropertiesValid(baseModel.getProperties()); }
@Test public void testInheritedChildBean() throws Exception { final Schema subModel = context.resolve(new AnnotatedType(Sub1Bean.class)); assertNotNull(subModel); // make sure child points at parent assertTrue(subModel instanceof ComposedSchema); ComposedSchema cm = (ComposedSchema) subModel; assertEquals(cm.getAllOf().get(0).get$ref(), "#/components/schemas/BaseBean"); // make sure parent properties are filtered out of subclass assertSub1PropertiesValid(cm.getProperties()); final Schema baseModel = context.getDefinedModels().get("BaseBean"); assertNotNull(baseModel); assertBasePropertiesValid(baseModel.getProperties()); }
Assert.assertNotNull(properties.get("childName")); Assert.assertTrue(model instanceof ComposedSchema); Assert.assertTrue(((ComposedSchema)model).getAllOf().size() == 1);
@Test public void testMultipleInheritedBean() throws Exception { final Schema baseModel = context.resolve(new AnnotatedType(MultipleBaseBean.class)); assertNotNull(baseModel); assertBasePropertiesValid(baseModel.getProperties()); final Schema sub1Model = context.getDefinedModels().get("MultipleSub1Bean"); assertNotNull(sub1Model); // make sure child points at parent assertTrue(sub1Model instanceof ComposedSchema); ComposedSchema cm1 = (ComposedSchema) sub1Model; assertEquals(cm1.getAllOf().get(0).get$ref(), "#/components/schemas/MultipleBaseBean"); // make sure parent properties are filtered out of subclass assertSub1PropertiesValid(cm1.getProperties()); final Schema sub2Model = context.getDefinedModels().get("MultipleSub2Bean"); assertNotNull(sub2Model); assertTrue(sub2Model instanceof ComposedSchema); ComposedSchema cm2 = (ComposedSchema) sub2Model; assertEquals(cm2.getAllOf().get(0).get$ref(), "#/components/schemas/MultipleBaseBean"); // make sure parent properties are filtered out of subclass assertSub2PropertiesValid(cm2.getProperties()); }
@Test public void testInheritedBean() throws Exception { final Schema baseModel = context.resolve(new AnnotatedType(BaseBean.class)); assertNotNull(baseModel); assertBasePropertiesValid(baseModel.getProperties()); assertEquals(baseModel.getDiscriminator().getPropertyName(), "type"); assertEquals(baseModel.getDiscriminator().getMapping().get("Sub1BeanMapped"), "#/components/schemas/Sub1Bean"); final Schema subModel = context.getDefinedModels().get("Sub1Bean"); assertNotNull(subModel); // make sure child points at parent assertTrue(subModel instanceof ComposedSchema); ComposedSchema cm = (ComposedSchema) subModel; assertEquals(cm.getAllOf().get(0).get$ref(), "#/components/schemas/BaseBean"); // make sure parent properties are filtered out of subclass assertSub1PropertiesValid(cm.getProperties()); }
@Test public void testMultipleInheritedChildBean() throws Exception { final Schema subModel = context.resolve(new AnnotatedType(MultipleSub1Bean.class)); assertNotNull(subModel); // make sure child points at parent assertTrue(subModel instanceof ComposedSchema); ComposedSchema cm = (ComposedSchema) subModel; assertEquals(cm.getAllOf().get(0).get$ref(), "#/components/schemas/MultipleBaseBean"); // make sure parent properties are filtered out of subclass assertSub1PropertiesValid(cm.getProperties()); final Schema baseModel = context.getDefinedModels().get("MultipleBaseBean"); assertNotNull(baseModel); assertBasePropertiesValid(baseModel.getProperties()); final Schema sub1Model = context.getDefinedModels().get("MultipleSub1Bean"); assertNotNull(sub1Model); // make sure child points at parent assertTrue(sub1Model instanceof ComposedSchema); ComposedSchema cm1 = (ComposedSchema) sub1Model; assertEquals(cm1.getAllOf().get(0).get$ref(), "#/components/schemas/MultipleBaseBean"); // make sure parent properties are filtered out of subclass assertSub1PropertiesValid(cm1.getProperties()); final Schema sub2Model = context.getDefinedModels().get("MultipleSub2Bean"); assertNotNull(sub2Model); assertTrue(sub2Model instanceof ComposedSchema); ComposedSchema cm2 = (ComposedSchema) sub2Model; assertEquals(cm2.getAllOf().get(0).get$ref(), "#/components/schemas/MultipleBaseBean"); // make sure parent properties are filtered out of subclass assertSub2PropertiesValid(cm2.getProperties()); }
@Test public void testHierarchy() throws Exception { final Schema baseModel = context.resolve(new AnnotatedType(BaseBean3.class)); assertNotNull(baseModel); assertBasePropertiesValid(baseModel.getProperties()); assertEquals(baseModel.getDiscriminator().getPropertyName(), "type"); assertEquals(baseModel.getDiscriminator().getMapping().get("ChildBean3Mapped"), "#/components/schemas/ChildBean3"); final Schema subModel = context.getDefinedModels().get("ChildBean3"); assertNotNull(subModel); // make sure child points at parent assertTrue(subModel instanceof ComposedSchema); ComposedSchema cm = (ComposedSchema) subModel; assertEquals(cm.getAllOf().get(0).get$ref(), "#/components/schemas/BaseBean3"); // make sure parent properties are filtered out of subclass assertSub1PropertiesValid(cm.getProperties()); // assert grandchild final Schema subSubModel = context.getDefinedModels().get("GrandChildBean3"); assertNotNull(subSubModel); // make sure child points at parent assertTrue(subSubModel instanceof ComposedSchema); cm = (ComposedSchema) subSubModel; assertEquals(cm.getAllOf().get(0).get$ref(), "#/components/schemas/ChildBean3"); // make sure parent properties are filtered out of subclass assertSub2PropertiesValid(cm.getProperties()); }
protected String getParentName(ComposedSchema composedSchema, Map<String, Schema> allSchemas) { if (composedSchema.getAllOf() != null && !composedSchema.getAllOf().isEmpty()) { for (Schema schema : composedSchema.getAllOf()) { String ref = schema.get$ref(); if (!StringUtils.isBlank(ref)) { return ModelUtils.getSimpleRef(ref); } } } return null; }
protected Schema detectParent(ComposedSchema composedSchema, Map<String, Schema> allSchemas) { if (composedSchema.getAllOf() != null && !composedSchema.getAllOf().isEmpty()) { Schema schema = composedSchema.getAllOf().get(0); String ref = schema.get$ref(); if (StringUtils.isBlank(ref)) { return null; } ref = getSimpleRef(ref); return allSchemas.get(ref); } return null; }
protected String getParentName(ComposedSchema composedSchema) { if (composedSchema.getAllOf() != null && !composedSchema.getAllOf().isEmpty()) { Schema schema = composedSchema.getAllOf().get(0); String ref = schema.get$ref(); if (StringUtils.isBlank(ref)) { return null; } return OpenAPIUtil.getSimpleRef(ref); } return null; }
protected String getParentName(ComposedSchema composedSchema) { if (composedSchema.getAllOf() != null && !composedSchema.getAllOf().isEmpty()) { Schema schema = composedSchema.getAllOf().get(0); String ref = schema.get$ref(); if (StringUtils.isBlank(ref)) { return null; } return getSimpleRef(ref); } return null; }
protected Schema detectParent(ComposedSchema composedSchema, Map<String, Schema> allSchemas) { if (composedSchema.getAllOf() != null && !composedSchema.getAllOf().isEmpty()) { Schema schema = composedSchema.getAllOf().get(0); String ref = schema.get$ref(); if (StringUtils.isBlank(ref)) { return null; } ref = OpenAPIUtil.getSimpleRef(ref); return allSchemas.get(ref); } return null; }
private List<Schema> getInterfaces(ComposedSchema composed) { if(composed.getAllOf() != null && composed.getAllOf().size() > 1) { return composed.getAllOf().subList(1, composed.getAllOf().size()); } else if(composed.getAnyOf() != null && !composed.getAnyOf().isEmpty()) { return composed.getAnyOf(); } else if(composed.getOneOf() != null && !composed.getOneOf().isEmpty()) { return composed.getOneOf(); } else { return null; } }
private List<Schema> getInterfaces(ComposedSchema composed) { if(composed.getAllOf() != null && composed.getAllOf().size() > 1) { return composed.getAllOf().subList(1, composed.getAllOf().size()); } else if(composed.getAnyOf() != null && !composed.getAnyOf().isEmpty()) { return composed.getAnyOf(); } else if(composed.getOneOf() != null && !composed.getOneOf().isEmpty()) { return composed.getOneOf(); } else { return null; } }
private List<Schema> getInterfaces(ComposedSchema composed) { List<Schema> interfaces; if (composed.getAllOf() != null && !composed.getAllOf().isEmpty()) { return composed.getAllOf(); } else if (composed.getAnyOf() != null && !composed.getAnyOf().isEmpty()) { return composed.getAnyOf(); } else if (composed.getOneOf() != null && !composed.getOneOf().isEmpty()) { return composed.getOneOf(); } else { return null; } }
private void extractComposedSchema(ComposedSchema cSchema, OpenAPI openAPI) throws BallerinaOpenApiException { this.properties = new LinkedHashSet<>(); this.isComposed = true; List<Schema> allOf = cSchema.getAllOf(); List<BallerinaSchema> childSchemas = new ArrayList<>(); for (Schema schema: allOf) { childSchemas.add(new BallerinaSchema().buildContext(schema, openAPI)); } childSchemas.forEach(schema -> { if (schema.getProperties() != null) { this.properties.addAll(schema.getProperties()); } }); }