diff --git a/core/esmf-aspect-model-document-generators/src/main/java/org/eclipse/esmf/aspectmodel/generator/jsonschema/AspectModelJsonSchemaVisitor.java b/core/esmf-aspect-model-document-generators/src/main/java/org/eclipse/esmf/aspectmodel/generator/jsonschema/AspectModelJsonSchemaVisitor.java index d2cfd433e..957de07f7 100644 --- a/core/esmf-aspect-model-document-generators/src/main/java/org/eclipse/esmf/aspectmodel/generator/jsonschema/AspectModelJsonSchemaVisitor.java +++ b/core/esmf-aspect-model-document-generators/src/main/java/org/eclipse/esmf/aspectmodel/generator/jsonschema/AspectModelJsonSchemaVisitor.java @@ -267,12 +267,12 @@ public JsonNode visitProperty( final Property property, final ObjectNode context final Characteristic characteristic = determineCharacteristic( property ); final String referenceNodeName = getSchemaNameForModelElement( characteristic, property ); if ( processedProperties.contains( property ) ) { - return propertyNode.put( "$ref", "#/components/schemas/" + referenceNodeName ); + return generateRefOrWrappedRef( propertyNode, referenceNodeName ); } processedProperties.add( property ); final JsonNode schemaNode = characteristic.accept( this, context ); setNodeInRootSchema( schemaNode, referenceNodeName ); - return propertyNode.put( "$ref", "#/components/schemas/" + referenceNodeName ); + return generateRefOrWrappedRef( propertyNode, referenceNodeName ); } @Override @@ -652,4 +652,17 @@ private void addSammExtensionAttribute( final ObjectNode node, final ModelElemen node.put( AspectModelJsonSchemaGenerator.SAMM_EXTENSION, describedElement.urn().toString() ); } } + + private ObjectNode generateRefOrWrappedRef( final ObjectNode propertyNode, final String referenceNodeName ) { + if ( !propertyNode.isEmpty() ) { + ArrayNode allOfArray = FACTORY.arrayNode(); + ObjectNode refNode = FACTORY.objectNode(); + refNode.put( "$ref", "#/components/schemas/" + referenceNodeName ); + allOfArray.add( refNode ); + propertyNode.set( "allOf", allOfArray ); + return propertyNode; + } else { + return FACTORY.objectNode().put( "$ref", "#/components/schemas/" + referenceNodeName ); + } + } } diff --git a/core/esmf-aspect-model-document-generators/src/main/java/org/eclipse/esmf/aspectmodel/generator/openapi/AspectModelOpenApiGenerator.java b/core/esmf-aspect-model-document-generators/src/main/java/org/eclipse/esmf/aspectmodel/generator/openapi/AspectModelOpenApiGenerator.java index 781d92362..fd4221085 100644 --- a/core/esmf-aspect-model-document-generators/src/main/java/org/eclipse/esmf/aspectmodel/generator/openapi/AspectModelOpenApiGenerator.java +++ b/core/esmf-aspect-model-document-generators/src/main/java/org/eclipse/esmf/aspectmodel/generator/openapi/AspectModelOpenApiGenerator.java @@ -86,6 +86,7 @@ public class AspectModelOpenApiGenerator extends JsonGenerator getter( final String propName ) { diff --git a/core/esmf-aspect-model-document-generators/src/main/java/org/eclipse/esmf/aspectmodel/generator/openapi/AspectModelPagingGenerator.java b/core/esmf-aspect-model-document-generators/src/main/java/org/eclipse/esmf/aspectmodel/generator/openapi/AspectModelPagingGenerator.java index a671f9712..cd47c95b2 100644 --- a/core/esmf-aspect-model-document-generators/src/main/java/org/eclipse/esmf/aspectmodel/generator/openapi/AspectModelPagingGenerator.java +++ b/core/esmf-aspect-model-document-generators/src/main/java/org/eclipse/esmf/aspectmodel/generator/openapi/AspectModelPagingGenerator.java @@ -133,8 +133,16 @@ private void setSchemaInformation( final Aspect aspect, final PagingOption pagin final ObjectNode node = (ObjectNode) getPathRootNode( pagingOption ).get( "response" ); schemaNode.set( AspectModelOpenApiGenerator.FIELD_PAGING_SCHEMA, node ); - final ObjectNode itemNode = (ObjectNode) node.get( "properties" ).get( "items" ); - itemNode.put( "$ref", "#/components/schemas/" + aspect.getName() ); + final Property property = aspect.getProperties().get( 0 ); + final String propertyName = property.getName(); + + final ObjectNode propertiesNode = (ObjectNode) node.get( "properties" ); + + final ObjectNode arrayNode = FACTORY.objectNode(); + arrayNode.put( "type", "array" ); + arrayNode.set( "items", FACTORY.objectNode().put( "$ref", "#/components/schemas/" + aspect.getName() ) ); + + propertiesNode.set( propertyName, arrayNode ); } private void validatePaging( final PagingOption definedPagingOption, final Set possiblePagingOptions ) { diff --git a/core/esmf-aspect-model-document-generators/src/main/resources/openapi/OffsetBasedPaging.json b/core/esmf-aspect-model-document-generators/src/main/resources/openapi/OffsetBasedPaging.json index 8b711dc55..35721f37a 100644 --- a/core/esmf-aspect-model-document-generators/src/main/resources/openapi/OffsetBasedPaging.json +++ b/core/esmf-aspect-model-document-generators/src/main/resources/openapi/OffsetBasedPaging.json @@ -31,9 +31,6 @@ "response": { "type": "object", "properties": { - "items": { - "type": "array" - }, "totalItems": { "type": "number" }, diff --git a/core/esmf-aspect-model-document-generators/src/main/resources/openapi/TimeBasedPaging.json b/core/esmf-aspect-model-document-generators/src/main/resources/openapi/TimeBasedPaging.json index 47b3ed52d..5a8c37df2 100644 --- a/core/esmf-aspect-model-document-generators/src/main/resources/openapi/TimeBasedPaging.json +++ b/core/esmf-aspect-model-document-generators/src/main/resources/openapi/TimeBasedPaging.json @@ -33,9 +33,6 @@ "response": { "type": "object", "properties": { - "items": { - "type": "array" - }, "totalItems": { "type": "number" }, diff --git a/core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/jsonschema/AspectModelJsonSchemaGeneratorTest.java b/core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/jsonschema/AspectModelJsonSchemaGeneratorTest.java index dcd9d9df9..edd0318a5 100644 --- a/core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/jsonschema/AspectModelJsonSchemaGeneratorTest.java +++ b/core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/jsonschema/AspectModelJsonSchemaGeneratorTest.java @@ -163,7 +163,7 @@ void testTypeMapping() { final String booleanName = SammNs.SAMMC.Boolean().getLocalName(); - String characteristicReference = context. read( "$['properties']['anyUriProperty']['$ref']" ); + String characteristicReference = context. read( "$['properties']['anyUriProperty']['allOf'][0]['$ref']" ); assertThat( characteristicReference ).isEqualTo( "#/components/schemas/AnyUriPropertyCharacteristic" ); String characteristicName = characteristicReference.substring( characteristicReference.lastIndexOf( "/" ) + 1 ); assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['description']" ) ) @@ -171,7 +171,7 @@ void testTypeMapping() { assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['type']" ) ).isEqualTo( "string" ); assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['format']" ) ).isEqualTo( "uri" ); - characteristicReference = context. read( "$['properties']['base64BinaryProperty']['$ref']" ); + characteristicReference = context. read( "$['properties']['base64BinaryProperty']['allOf'][0]['$ref']" ); assertThat( characteristicReference ).isEqualTo( "#/components/schemas/Base64BinaryPropertyCharacteristic" ); characteristicName = characteristicReference.substring( characteristicReference.lastIndexOf( "/" ) + 1 ); assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['description']" ) ) @@ -180,12 +180,12 @@ void testTypeMapping() { assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['contentEncoding']" ) ).isEqualTo( "base64" ); - assertThat( context. read( "$['properties']['booleanProperty']['$ref']" ) ) + assertThat( context. read( "$['properties']['booleanProperty']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/" + booleanName ); assertThat( context. read( "$['components']['schemas']['" + booleanName + "']['type']" ) ) .isEqualTo( "boolean" ); - characteristicReference = context. read( "$['properties']['byteProperty']['$ref']" ); + characteristicReference = context. read( "$['properties']['byteProperty']['allOf'][0]['$ref']" ); assertThat( characteristicReference ).isEqualTo( "#/components/schemas/BytePropertyCharacteristic" ); characteristicName = characteristicReference.substring( characteristicReference.lastIndexOf( "/" ) + 1 ); assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['description']" ) ) @@ -193,7 +193,7 @@ void testTypeMapping() { assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['type']" ) ).isEqualTo( "number" ); final String unitReference = SammNs.SAMMC.UnitReference().getLocalName(); - assertThat( context. read( "$['properties']['curieProperty']['$ref']" ) ) + assertThat( context. read( "$['properties']['curieProperty']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/" + unitReference ); assertThat( context. read( "$['components']['schemas']['" + unitReference + "']['type']" ) ) .isEqualTo( "string" ); @@ -201,14 +201,14 @@ void testTypeMapping() { "$['components']['schemas']['" + unitReference + "']['" + AspectModelJsonSchemaGenerator.SAMM_EXTENSION + "']" ) ) .isEqualTo( SammNs.SAMMC.UnitReference().getURI() ); - characteristicReference = context. read( "$['properties']['dateProperty']['$ref']" ); + characteristicReference = context. read( "$['properties']['dateProperty']['allOf'][0]['$ref']" ); assertThat( characteristicReference ).isEqualTo( "#/components/schemas/DatePropertyCharacteristic" ); characteristicName = characteristicReference.substring( characteristicReference.lastIndexOf( "/" ) + 1 ); assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['type']" ) ).isEqualTo( "string" ); assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['format']" ) ).isEqualTo( "date" ); final String timestamp = SammNs.SAMMC.Timestamp().getLocalName(); - assertThat( context. read( "$['properties']['dateTimeProperty']['$ref']" ) ) + assertThat( context. read( "$['properties']['dateTimeProperty']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/" + timestamp ); assertThat( context. read( "$['components']['schemas']['" + timestamp + "']['type']" ) ) .isEqualTo( "string" ); @@ -216,77 +216,77 @@ void testTypeMapping() { "$['components']['schemas']['" + timestamp + "']['" + AspectModelJsonSchemaGenerator.SAMM_EXTENSION + "']" ) ) .isEqualTo( SammNs.SAMMC.Timestamp().getURI() ); - characteristicReference = context. read( "$['properties']['dateTimeStampProperty']['$ref']" ); + characteristicReference = context. read( "$['properties']['dateTimeStampProperty']['allOf'][0]['$ref']" ); assertThat( characteristicReference ).isEqualTo( "#/components/schemas/DateTimeStampPropertyCharacteristic" ); characteristicName = characteristicReference.substring( characteristicReference.lastIndexOf( "/" ) + 1 ); assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['type']" ) ).isEqualTo( "string" ); assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['format']" ) ).isEqualTo( "date-time" ); - characteristicReference = context. read( "$['properties']['dayTimeDuration']['$ref']" ); + characteristicReference = context. read( "$['properties']['dayTimeDuration']['allOf'][0]['$ref']" ); assertThat( characteristicReference ).isEqualTo( "#/components/schemas/DayTimeDurationCharacteristic" ); characteristicName = characteristicReference.substring( characteristicReference.lastIndexOf( "/" ) + 1 ); assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['type']" ) ).isEqualTo( "string" ); - characteristicReference = context. read( "$['properties']['decimalProperty']['$ref']" ); + characteristicReference = context. read( "$['properties']['decimalProperty']['allOf'][0]['$ref']" ); assertThat( characteristicReference ).isEqualTo( "#/components/schemas/DecimalPropertyCharacteristic" ); characteristicName = characteristicReference.substring( characteristicReference.lastIndexOf( "/" ) + 1 ); assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['type']" ) ).isEqualTo( "number" ); - characteristicReference = context. read( "$['properties']['doubleProperty']['$ref']" ); + characteristicReference = context. read( "$['properties']['doubleProperty']['allOf'][0]['$ref']" ); assertThat( characteristicReference ).isEqualTo( "#/components/schemas/DoublePropertyCharacteristic" ); characteristicName = characteristicReference.substring( characteristicReference.lastIndexOf( "/" ) + 1 ); assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['type']" ) ).isEqualTo( "number" ); - characteristicReference = context. read( "$['properties']['durationProperty']['$ref']" ); + characteristicReference = context. read( "$['properties']['durationProperty']['allOf'][0]['$ref']" ); assertThat( characteristicReference ).isEqualTo( "#/components/schemas/DurationPropertyCharacteristic" ); characteristicName = characteristicReference.substring( characteristicReference.lastIndexOf( "/" ) + 1 ); assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['type']" ) ).isEqualTo( "string" ); assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['format']" ) ).isEqualTo( "duration" ); - characteristicReference = context. read( "$['properties']['floatProperty']['$ref']" ); + characteristicReference = context. read( "$['properties']['floatProperty']['allOf'][0]['$ref']" ); assertThat( characteristicReference ).isEqualTo( "#/components/schemas/FloatPropertyCharacteristic" ); characteristicName = characteristicReference.substring( characteristicReference.lastIndexOf( "/" ) + 1 ); assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['type']" ) ).isEqualTo( "number" ); - characteristicReference = context. read( "$['properties']['gMonthDayProperty']['$ref']" ); + characteristicReference = context. read( "$['properties']['gMonthDayProperty']['allOf'][0]['$ref']" ); assertThat( characteristicReference ).isEqualTo( "#/components/schemas/GMonthDayPropertyCharacteristic" ); characteristicName = characteristicReference.substring( characteristicReference.lastIndexOf( "/" ) + 1 ); assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['type']" ) ).isEqualTo( "string" ); - characteristicReference = context. read( "$['properties']['gMonthProperty']['$ref']" ); + characteristicReference = context. read( "$['properties']['gMonthProperty']['allOf'][0]['$ref']" ); assertThat( characteristicReference ).isEqualTo( "#/components/schemas/GMonthPropertyCharacteristic" ); characteristicName = characteristicReference.substring( characteristicReference.lastIndexOf( "/" ) + 1 ); assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['type']" ) ).isEqualTo( "string" ); - characteristicReference = context. read( "$['properties']['gYearMonthProperty']['$ref']" ); + characteristicReference = context. read( "$['properties']['gYearMonthProperty']['allOf'][0]['$ref']" ); assertThat( characteristicReference ).isEqualTo( "#/components/schemas/GYearMonthPropertyCharacteristic" ); characteristicName = characteristicReference.substring( characteristicReference.lastIndexOf( "/" ) + 1 ); assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['type']" ) ).isEqualTo( "string" ); - characteristicReference = context. read( "$['properties']['gYearProperty']['$ref']" ); + characteristicReference = context. read( "$['properties']['gYearProperty']['allOf'][0]['$ref']" ); assertThat( characteristicReference ).isEqualTo( "#/components/schemas/GYearPropertyCharacteristic" ); characteristicName = characteristicReference.substring( characteristicReference.lastIndexOf( "/" ) + 1 ); assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['type']" ) ).isEqualTo( "string" ); - characteristicReference = context. read( "$['properties']['hexBinaryProperty']['$ref']" ); + characteristicReference = context. read( "$['properties']['hexBinaryProperty']['allOf'][0]['$ref']" ); assertThat( characteristicReference ).isEqualTo( "#/components/schemas/HexBinaryPropertyCharacteristic" ); characteristicName = characteristicReference.substring( characteristicReference.lastIndexOf( "/" ) + 1 ); assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['type']" ) ).isEqualTo( "string" ); assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['pattern']" ) ).isEqualTo( "([0-9a-fA-F])([0-9a-fA-F])*" ); - characteristicReference = context. read( "$['properties']['intProperty']['$ref']" ); + characteristicReference = context. read( "$['properties']['intProperty']['allOf'][0]['$ref']" ); assertThat( characteristicReference ).isEqualTo( "#/components/schemas/IntPropertyCharacteristic" ); characteristicName = characteristicReference.substring( characteristicReference.lastIndexOf( "/" ) + 1 ); assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['type']" ) ).isEqualTo( "number" ); - characteristicReference = context. read( "$['properties']['integerProperty']['$ref']" ); + characteristicReference = context. read( "$['properties']['integerProperty']['allOf'][0]['$ref']" ); assertThat( characteristicReference ).isEqualTo( "#/components/schemas/IntegerPropertyCharacteristic" ); characteristicName = characteristicReference.substring( characteristicReference.lastIndexOf( "/" ) + 1 ); assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['type']" ) ).isEqualTo( "number" ); final String multiLanguageText = SammNs.SAMMC.MultiLanguageText().getLocalName(); - assertThat( context. read( "$['properties']['langStringProperty']['$ref']" ) ) + assertThat( context. read( "$['properties']['langStringProperty']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/" + multiLanguageText ); assertThat( context. read( "$['components']['schemas']" + "['" + multiLanguageText + "']['type']" ) ).isEqualTo( "object" ); @@ -294,71 +294,71 @@ void testTypeMapping() { "$['components']['schemas']['" + multiLanguageText + "']['" + AspectModelJsonSchemaGenerator.SAMM_EXTENSION + "']" ) ) .isEqualTo( SammNs.SAMMC.MultiLanguageText().getURI() ); - characteristicReference = context. read( "$['properties']['longProperty']['$ref']" ); + characteristicReference = context. read( "$['properties']['longProperty']['allOf'][0]['$ref']" ); assertThat( characteristicReference ).isEqualTo( "#/components/schemas/LongPropertyCharacteristic" ); characteristicName = characteristicReference.substring( characteristicReference.lastIndexOf( "/" ) + 1 ); assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['type']" ) ).isEqualTo( "number" ); - characteristicReference = context. read( "$['properties']['negativeIntegerProperty']['$ref']" ); + characteristicReference = context. read( "$['properties']['negativeIntegerProperty']['allOf'][0]['$ref']" ); assertThat( characteristicReference ).isEqualTo( "#/components/schemas/NegativeIntegerPropertyCharacteristic" ); characteristicName = characteristicReference.substring( characteristicReference.lastIndexOf( "/" ) + 1 ); assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['type']" ) ).isEqualTo( "number" ); - characteristicReference = context. read( "$['properties']['nonNegativeIntegerProperty']['$ref']" ); + characteristicReference = context. read( "$['properties']['nonNegativeIntegerProperty']['allOf'][0]['$ref']" ); assertThat( characteristicReference ).isEqualTo( "#/components/schemas/NonNegativeIntegerPropertyCharacteristic" ); characteristicName = characteristicReference.substring( characteristicReference.lastIndexOf( "/" ) + 1 ); assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['type']" ) ).isEqualTo( "number" ); - characteristicReference = context. read( "$['properties']['nonPositiveInteger']['$ref']" ); + characteristicReference = context. read( "$['properties']['nonPositiveInteger']['allOf'][0]['$ref']" ); assertThat( characteristicReference ).isEqualTo( "#/components/schemas/NonPositiveIntegerCharacteristic" ); characteristicName = characteristicReference.substring( characteristicReference.lastIndexOf( "/" ) + 1 ); assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['type']" ) ).isEqualTo( "number" ); - characteristicReference = context. read( "$['properties']['positiveIntegerProperty']['$ref']" ); + characteristicReference = context. read( "$['properties']['positiveIntegerProperty']['allOf'][0]['$ref']" ); assertThat( characteristicReference ).isEqualTo( "#/components/schemas/PositiveIntegerPropertyCharacteristic" ); characteristicName = characteristicReference.substring( characteristicReference.lastIndexOf( "/" ) + 1 ); assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['type']" ) ).isEqualTo( "number" ); - characteristicReference = context. read( "$['properties']['shortProperty']['$ref']" ); + characteristicReference = context. read( "$['properties']['shortProperty']['allOf'][0]['$ref']" ); assertThat( characteristicReference ).isEqualTo( "#/components/schemas/ShortPropertyCharacteristic" ); characteristicName = characteristicReference.substring( characteristicReference.lastIndexOf( "/" ) + 1 ); assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['type']" ) ).isEqualTo( "number" ); final String text = SammNs.SAMMC.Text().getLocalName(); - assertThat( context. read( "$['properties']['stringProperty']['$ref']" ) ) + assertThat( context. read( "$['properties']['stringProperty']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/" + text ); assertThat( context. read( "$['components']['schemas']['" + text + "']['type']" ) ).isEqualTo( "string" ); assertThat( context. read( "$['components']['schemas']['" + text + "']['" + AspectModelJsonSchemaGenerator.SAMM_EXTENSION + "']" ) ) .isEqualTo( SammNs.SAMMC.Text().getURI() ); - characteristicReference = context. read( "$['properties']['timeProperty']['$ref']" ); + characteristicReference = context. read( "$['properties']['timeProperty']['allOf'][0]['$ref']" ); assertThat( characteristicReference ).isEqualTo( "#/components/schemas/TimePropertyCharacteristic" ); characteristicName = characteristicReference.substring( characteristicReference.lastIndexOf( "/" ) + 1 ); assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['type']" ) ).isEqualTo( "string" ); assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['format']" ) ).isEqualTo( "time" ); - characteristicReference = context. read( "$['properties']['unsignedByteProperty']['$ref']" ); + characteristicReference = context. read( "$['properties']['unsignedByteProperty']['allOf'][0]['$ref']" ); assertThat( characteristicReference ).isEqualTo( "#/components/schemas/UnsignedBytePropertyCharacteristic" ); characteristicName = characteristicReference.substring( characteristicReference.lastIndexOf( "/" ) + 1 ); assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['type']" ) ).isEqualTo( "number" ); - characteristicReference = context. read( "$['properties']['unsignedIntProperty']['$ref']" ); + characteristicReference = context. read( "$['properties']['unsignedIntProperty']['allOf'][0]['$ref']" ); assertThat( characteristicReference ).isEqualTo( "#/components/schemas/UnsignedIntPropertyCharacteristic" ); characteristicName = characteristicReference.substring( characteristicReference.lastIndexOf( "/" ) + 1 ); assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['type']" ) ).isEqualTo( "number" ); - characteristicReference = context. read( "$['properties']['unsignedLongProperty']['$ref']" ); + characteristicReference = context. read( "$['properties']['unsignedLongProperty']['allOf'][0]['$ref']" ); assertThat( characteristicReference ).isEqualTo( "#/components/schemas/UnsignedLongPropertyCharacteristic" ); characteristicName = characteristicReference.substring( characteristicReference.lastIndexOf( "/" ) + 1 ); assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['type']" ) ).isEqualTo( "number" ); - characteristicReference = context. read( "$['properties']['unsignedShortProperty']['$ref']" ); + characteristicReference = context. read( "$['properties']['unsignedShortProperty']['allOf'][0]['$ref']" ); assertThat( characteristicReference ).isEqualTo( "#/components/schemas/UnsignedShortPropertyCharacteristic" ); characteristicName = characteristicReference.substring( characteristicReference.lastIndexOf( "/" ) + 1 ); assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['type']" ) ).isEqualTo( "number" ); - characteristicReference = context. read( "$['properties']['yearMonthDurationProperty']['$ref']" ); + characteristicReference = context. read( "$['properties']['yearMonthDurationProperty']['allOf'][0]['$ref']" ); assertThat( characteristicReference ).isEqualTo( "#/components/schemas/YearMonthDurationPropertyCharacteristic" ); characteristicName = characteristicReference.substring( characteristicReference.lastIndexOf( "/" ) + 1 ); assertThat( context. read( "$['components']['schemas']['" + characteristicName + "']['type']" ) ).isEqualTo( "string" ); @@ -375,7 +375,7 @@ void testOptionalPropertyMapping() { assertThat( context. read( "$['components']['schemas']['" + text + "']['" + AspectModelJsonSchemaGenerator.SAMM_EXTENSION + "']" ) ) .isEqualTo( SammNs.SAMMC.Text().getURI() ); - assertThat( context. read( "$['properties']['testProperty']['$ref']" ) ) + assertThat( context. read( "$['properties']['testProperty']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/" + text ); assertThat( context.> read( "$['required']" ) ).isNull(); } @@ -386,7 +386,7 @@ void testAspectWithRecursivePropertyWithOptional() { final JsonNode schema = buildJsonSchema( aspect ); showJson( schema ); final DocumentContext context = JsonPath.using( config ).parse( schema.toString() ); - assertThat( context. read( "$['components']['schemas']['TestEntity']['properties']['testProperty']['$ref']" ) ) + assertThat( context. read( "$['components']['schemas']['TestEntity']['properties']['testProperty']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/TestItemCharacteristic" ); assertThat( context. read( @@ -442,12 +442,12 @@ void testEntityMapping() { assertThat( context. read( "$['type']" ) ).isEqualTo( "object" ); assertThat( context. read( "$['properties']['testProperty']['description']" ) ) .isEqualTo( "This is a test property." ); - assertThat( context. read( "$['properties']['testProperty']['$ref']" ) ) + assertThat( context. read( "$['properties']['testProperty']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/EntityCharacteristic" ); assertThat( context. read( "$['components']['schemas']['TestEntity']['description']" ) ) .isEqualTo( "This is a test entity" ); assertThat( context. read( "$['components']['schemas']['TestEntity']['type']" ) ).isEqualTo( "object" ); - assertThat( context. read( "$['components']['schemas']['TestEntity']['properties']['entityProperty']['$ref']" ) ) + assertThat( context. read( "$['components']['schemas']['TestEntity']['properties']['entityProperty']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/" + text ); assertThat( context. read( "$['components']['schemas']['" + text + "']['" + AspectModelJsonSchemaGenerator.SAMM_EXTENSION + "']" ) ) @@ -462,7 +462,7 @@ void testLengthConstraintForStringMapping() { final Aspect aspect = TestResources.load( TestAspect.ASPECT_WITH_LENGTH_CONSTRAINT ).aspect(); final JsonNode schema = buildJsonSchema( aspect ); final DocumentContext context = JsonPath.parse( schema.toString() ); - assertThat( context. read( "$['properties']['testProperty']['$ref']" ) ) + assertThat( context. read( "$['properties']['testProperty']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/TestLengthConstraint" ); assertThat( context. read( "$['components']['schemas']['TestLengthConstraint']['description']" ) ) .isEqualTo( "This is a test length constraint." ); @@ -503,7 +503,7 @@ void testLengthConstraintForListMapping() { final JsonNode schema = buildJsonSchema( aspect ); final DocumentContext context = JsonPath.parse( schema.toString() ); assertThat( context. read( - "$['properties']['testPropertyCollectionLengthConstraint']['$ref']" ) ) + "$['properties']['testPropertyCollectionLengthConstraint']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/TestLengthConstraintWithCollection" ); assertThat( context. read( "$['components']['schemas']['TestLengthConstraintWithCollection']['description']" ) ) .isEqualTo( "Test Length Constraint with collection" ); @@ -534,7 +534,7 @@ void testRangeConstraintMapping() { final JsonNode schema = buildJsonSchema( aspect ); final DocumentContext context = JsonPath.parse( schema.toString() ); - assertThat( context. read( "$['properties']['testProperty']['$ref']" ) ) + assertThat( context. read( "$['properties']['testProperty']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/TestRangeConstraint" ); assertThat( context. read( "$['components']['schemas']['TestRangeConstraint']['description']" ) ) .isEqualTo( "This is a test range constraint." ); @@ -554,7 +554,7 @@ void testRangeConstraintOnConstrainedNumericType() { final JsonNode schema = buildJsonSchema( aspect ); final DocumentContext context = JsonPath.parse( schema.toString() ); - assertThat( context. read( "$['properties']['testProperty']['$ref']" ) ) + assertThat( context. read( "$['properties']['testProperty']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/TestRangeConstraint" ); assertThat( context. read( "$['components']['schemas']['TestRangeConstraint']['description']" ) ) .isEqualTo( "This is a test range constraint." ); @@ -574,7 +574,7 @@ void testRangeConstraintWithBoundsMapping() { final JsonNode schema = buildJsonSchema( aspect ); final DocumentContext context = JsonPath.parse( schema.toString() ); - assertThat( context. read( "$['properties']['floatProp']['$ref']" ) ) + assertThat( context. read( "$['properties']['floatProp']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/FloatRange" ); assertThat( context. read( "$['components']['schemas']['FloatRange']['description']" ) ) .isEqualTo( "This is a floating range constraint" ); @@ -589,7 +589,7 @@ context. read( "$['components']['schemas']['FloatRange']['" + AspectMode assertThat( context. read( "$['components']['schemas']['FloatRange']['exclusiveMaximum']" ) ).isTrue(); assertThat( context. read( "$['components']['schemas']['FloatRange']['exclusiveMinimum']" ) ).isTrue(); - assertThat( context. read( "$['properties']['doubleProp']['$ref']" ) ) + assertThat( context. read( "$['properties']['doubleProp']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/DoubleRange" ); assertThat( context. read( "$['components']['schemas']['DoubleRange']['description']" ) ) .isEqualTo( "This is a double range constraint" ); @@ -604,7 +604,7 @@ context. read( "$['components']['schemas']['DoubleRange']['" + AspectMod assertThat( context. read( "$['components']['schemas']['DoubleRange']['exclusiveMaximum']" ) ).isTrue(); assertThat( context. read( "$['components']['schemas']['DoubleRange']['exclusiveMinimum']" ) ).isTrue(); - assertThat( context. read( "$['properties']['decimalProp']['$ref']" ) ) + assertThat( context. read( "$['properties']['decimalProp']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/DecimalRange" ); assertThat( context. read( "$['components']['schemas']['DecimalRange']['description']" ) ) .isEqualTo( "This is a decimal range constraint" ); @@ -619,7 +619,7 @@ context. read( "$['components']['schemas']['DecimalRange']['" + AspectMo assertThat( context. read( "$['components']['schemas']['DecimalRange']['exclusiveMaximum']" ) ).isTrue(); assertThat( context. read( "$['components']['schemas']['DecimalRange']['exclusiveMinimum']" ) ).isTrue(); - assertThat( context. read( "$['properties']['integerProp']['$ref']" ) ) + assertThat( context. read( "$['properties']['integerProp']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/IntegerRange" ); assertThat( context. read( "$['components']['schemas']['IntegerRange']['description']" ) ) .isEqualTo( "This is a integer range constraint" ); @@ -632,7 +632,7 @@ context. read( "$['components']['schemas']['IntegerRange']['" + AspectMo assertThat( context. read( "$['components']['schemas']['IntegerRange']['exclusiveMaximum']" ) ).isTrue(); assertThat( context. read( "$['components']['schemas']['IntegerRange']['exclusiveMinimum']" ) ).isTrue(); - assertThat( context. read( "$['properties']['intProp']['$ref']" ) ) + assertThat( context. read( "$['properties']['intProp']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/IntRange" ); assertThat( context. read( "$['components']['schemas']['IntRange']['" + AspectModelJsonSchemaGenerator.SAMM_EXTENSION + "']" ) ) @@ -652,7 +652,7 @@ void testCollectionMapping() { assertThat( context. read( "$['properties']['testProperty']['description']" ) ) .isEqualTo( "This is a test property." ); - assertThat( context. read( "$['properties']['testProperty']['$ref']" ) ) + assertThat( context. read( "$['properties']['testProperty']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/TestList" ); assertThat( context. read( "$['components']['schemas']['TestList']['description']" ) ) @@ -669,7 +669,8 @@ void testSetMapping() { final DocumentContext context = JsonPath.parse( schema.toString() ); assertThat( context. read( "$['properties']['testProperty']['description']" ) ).isEqualTo( "This is a test property." ); - assertThat( context. read( "$['properties']['testProperty']['$ref']" ) ).isEqualTo( "#/components/schemas/TestSet" ); + assertThat( context. read( "$['properties']['testProperty']['allOf'][0]['$ref']" ) ).isEqualTo( + "#/components/schemas/TestSet" ); assertThat( context. read( "$['components']['schemas']['TestSet']['type']" ) ).isEqualTo( "array" ); assertThat( context. read( "$['components']['schemas']['TestSet']['" + AspectModelJsonSchemaGenerator.SAMM_EXTENSION + "']" ) ) @@ -688,7 +689,7 @@ void testSortedSetSetMapping() { assertThat( context. read( "$['properties']['testProperty']['description']" ) ) .isEqualTo( "This is a test property." ); - assertThat( context. read( "$['properties']['testProperty']['$ref']" ) ) + assertThat( context. read( "$['properties']['testProperty']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/TestSortedSet" ); assertThat( context. read( "$['components']['schemas']['TestSortedSet']['type']" ) ).isEqualTo( "array" ); assertThat( @@ -709,7 +710,7 @@ void testLangStringMapping() { final String multiLanguageText = SammNs.SAMMC.MultiLanguageText().getLocalName(); final DocumentContext context = JsonPath.parse( schema.toString() ); - assertThat( context. read( "$['properties']['prop']['$ref']" ) ) + assertThat( context. read( "$['properties']['prop']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/" + multiLanguageText ); assertThat( context. read( "$['components']['schemas']['" + multiLanguageText + "']['type']" ) ) .isEqualTo( "object" ); @@ -741,7 +742,7 @@ void testEitherMapping() { showJson( schema ); final DocumentContext context = JsonPath.parse( schema.toString() ); - assertThat( context. read( "$['properties']['testProperty']['$ref']" ) ) + assertThat( context. read( "$['properties']['testProperty']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/TestEither" ); assertThat( context. read( "$['components']['schemas']['TestEither']['description']" ) ) .isEqualTo( "This is a test Either." ); @@ -774,7 +775,7 @@ void testEnumScalarMapping() { final DocumentContext context = JsonPath.parse( schema.toString() ); assertThat( context. read( "$['properties']['testProperty']['description']" ) ) .isEqualTo( "This is a test property." ); - assertThat( context. read( "$['properties']['testProperty']['$ref']" ) ) + assertThat( context. read( "$['properties']['testProperty']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/TestEnumeration" ); assertThat( context. read( "$['components']['schemas']['TestEnumeration']['description']" ) ) .isEqualTo( "This is a test for enumeration." ); @@ -793,7 +794,7 @@ void testEnumComplexMapping() { final JsonNode schema = buildJsonSchema( aspect ); final DocumentContext context = JsonPath.parse( schema.toString() ); - assertThat( context. read( "$['properties']['result']['$ref']" ) ) + assertThat( context. read( "$['properties']['result']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/EvaluationResults" ); assertThat( context. read( "$['components']['schemas']['EvaluationResults']['description']" ) ) @@ -824,7 +825,7 @@ void testEnumComplexWithNotInPayloadMapping() { final JsonNode schema = buildJsonSchema( aspect ); final DocumentContext context = JsonPath.using( config ).parse( schema.toString() ); - assertThat( context. read( "$['properties']['result']['$ref']" ) ) + assertThat( context. read( "$['properties']['result']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/EvaluationResults" ); assertThat( context. read( @@ -851,7 +852,7 @@ void testEnumWithLangStringMapping() { final DocumentContext context = JsonPath.using( config ).parse( schema.toString() ); assertThat( context. read( "$['properties']['testProperty']['description']" ) ) .isEqualTo( "This is a test property." ); - assertThat( context. read( "$['properties']['testProperty']['$ref']" ) ) + assertThat( context. read( "$['properties']['testProperty']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/TestEnumeration" ); assertThat( context. read( "$['components']['schemas']['TestEnumeration']['description']" ) ) @@ -874,7 +875,7 @@ void testRegularExpressionConstraintMapping() { final DocumentContext context = JsonPath.using( config ).parse( schema.toString() ); assertThat( context. read( "$['properties']['testProperty']['description']" ) ) .isEqualTo( "This is a test property." ); - assertThat( context. read( "$['properties']['testProperty']['$ref']" ) ) + assertThat( context. read( "$['properties']['testProperty']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/TestRegularExpressionConstraint" ); assertThat( context. read( @@ -896,7 +897,7 @@ void testComplexEntityCollectionEnum() { final DocumentContext context = JsonPath.parse( schema.toString() ); showJson( schema ); assertThat( context. read( "$['type']" ) ).isEqualTo( "object" ); - assertThat( context. read( "$['properties']['myPropertyOne']['$ref']" ) ) + assertThat( context. read( "$['properties']['myPropertyOne']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/MyEnumerationOne" ); assertThat( context. read( "$['components']['schemas']['MyEnumerationOne']['description']" ) ) @@ -934,7 +935,8 @@ void testAspectWithAbstractSingleEntity() { assertThat( context. read( "$['components']['schemas']['ExtendingTestEntity']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/AbstractTestEntity" ); - assertThat( context. read( "$['components']['schemas']['ExtendingTestEntity']['properties']['entityProperty']['$ref']" ) ) + assertThat( context. read( + "$['components']['schemas']['ExtendingTestEntity']['properties']['entityProperty']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/" + text ); assertThat( context. read( "$['components']['schemas']['ExtendingTestEntity']['" + AspectModelJsonSchemaGenerator.SAMM_EXTENSION + "']" ) ) @@ -945,9 +947,10 @@ void testAspectWithAbstractSingleEntity() { assertThat( context. read( "$['components']['schemas']['AbstractTestEntity']['description']" ) ) .isEqualTo( "This is an abstract test entity" ); assertThat( - context. read( "$['components']['schemas']['AbstractTestEntity']['properties']['abstractTestProperty']['$ref']" ) ) + context. read( + "$['components']['schemas']['AbstractTestEntity']['properties']['abstractTestProperty']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/AbstractTestPropertyCharacteristic" ); - assertThat( context. read( "$['properties']['testProperty']['$ref']" ) ) + assertThat( context. read( "$['properties']['testProperty']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/EntityCharacteristic" ); } @@ -967,7 +970,8 @@ void testAspectWithAbstractEntity() { .isEqualTo( TestModel.TEST_NAMESPACE + "ExtendingTestEntity" ); assertThat( context. read( "$['components']['schemas']['ExtendingTestEntity']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/AbstractTestEntity" ); - assertThat( context. read( "$['components']['schemas']['ExtendingTestEntity']['properties']['entityProperty']['$ref']" ) ) + assertThat( context. read( + "$['components']['schemas']['ExtendingTestEntity']['properties']['entityProperty']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/" + text ); assertThat( context. read( "$['components']['schemas']['" + text + "']['" + AspectModelJsonSchemaGenerator.SAMM_EXTENSION + "']" ) ) @@ -975,9 +979,10 @@ void testAspectWithAbstractEntity() { assertThat( context. read( "$['components']['schemas']['AbstractTestEntity']['description']" ) ) .isEqualTo( "This is a abstract test entity" ); assertThat( - context. read( "$['components']['schemas']['AbstractTestEntity']['properties']['abstractTestProperty']['$ref']" ) ) + context. read( + "$['components']['schemas']['AbstractTestEntity']['properties']['abstractTestProperty']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/AbstractTestPropertyCharacteristic" ); - assertThat( context. read( "$['properties']['testProperty']['$ref']" ) ) + assertThat( context. read( "$['properties']['testProperty']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/EntityCharacteristic" ); } @@ -994,7 +999,7 @@ void testAspectWithAbstractProperty() { .isEqualTo( "This is a test entity" ); assertThat( schema.at( "/components/schemas/ExtendingTestEntity/properties/abstractTestProperty/description" ).asText() ) .isEqualTo( "This is an abstract test property" ); - assertThat( schema.at( "/components/schemas/ExtendingTestEntity/properties/abstractTestProperty/$ref" ).asText() ) + assertThat( schema.at( "/components/schemas/ExtendingTestEntity/properties/abstractTestProperty/allOf/0/$ref" ).asText() ) .isEqualTo( "#/components/schemas/" + text ); } @@ -1012,13 +1017,15 @@ void testAspectWithCollectionWithAbstractEntity() { assertThat( context. read( "$['components']['schemas']['AbstractTestEntity']['" + AspectModelJsonSchemaGenerator.SAMM_EXTENSION + "']" ) ) .isEqualTo( TestModel.TEST_NAMESPACE + "AbstractTestEntity" ); - assertThat( context. read( "$['components']['schemas']['ExtendingTestEntity']['properties']['entityProperty']['$ref']" ) ) + assertThat( context. read( + "$['components']['schemas']['ExtendingTestEntity']['properties']['entityProperty']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/Text" ); assertThat( context. read( "$['components']['schemas']['AbstractTestEntity']['properties']['abstractTestProperty']['description']" ) ) .isEqualTo( "This is an abstract test property" ); assertThat( - context. read( "$['components']['schemas']['AbstractTestEntity']['properties']['abstractTestProperty']['$ref']" ) ) + context. read( + "$['components']['schemas']['AbstractTestEntity']['properties']['abstractTestProperty']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/AbstractTestPropertyCharacteristic" ); assertThat( context. read( "$['components']['schemas']['EntityCollectionCharacteristic']['description']" ) ) .isEqualTo( "This is an entity collection characteristic" ); @@ -1027,7 +1034,7 @@ context. read( "$['components']['schemas']['AbstractTestEntity']['proper .isEqualTo( TestModel.TEST_NAMESPACE + "EntityCollectionCharacteristic" ); assertThat( context. read( "$['components']['schemas']['EntityCollectionCharacteristic']['items']['$ref']" ) ) .isEqualTo( "#/components/schemas/AbstractTestEntity" ); - assertThat( context. read( "$['properties']['testProperty']['$ref']" ) ) + assertThat( context. read( "$['properties']['testProperty']['allOf'][0]['$ref']" ) ) .isEqualTo( "#/components/schemas/EntityCollectionCharacteristic" ); } } diff --git a/core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/openapi/AspectModelOpenApiGeneratorTest.java b/core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/openapi/AspectModelOpenApiGeneratorTest.java index d7e131265..280eb0d37 100644 --- a/core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/openapi/AspectModelOpenApiGeneratorTest.java +++ b/core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/openapi/AspectModelOpenApiGeneratorTest.java @@ -68,7 +68,7 @@ import org.junit.jupiter.params.provider.EnumSource; import org.slf4j.LoggerFactory; -public class AspectModelOpenApiGeneratorTest { +class AspectModelOpenApiGeneratorTest { private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); private static final String TEST_BASE_URL = "https://test-aspect.example.com"; private static final String TEST_RESOURCE_PATH = "my-test-aspect"; @@ -520,11 +520,11 @@ void testAspectWithOperationWithSeeAttribute() { final SwaggerParseResult result = new OpenAPIParser().readContents( json.toString(), null, null ); final OpenAPI openApi = result.getOpenAPI(); assertThat( - ( (Schema) openApi.getComponents().getSchemas().get( "testOperation" ).getAllOf() - .get( 1 ) ).getProperties() ).doesNotContainKey( + ((Schema) openApi.getComponents().getSchemas().get( "testOperation" ).getAllOf() + .get( 1 )).getProperties() ).doesNotContainKey( "params" ); - assertThat( ( (Schema) openApi.getComponents().getSchemas().get( "testOperationTwo" ).getAllOf() - .get( 1 ) ).getProperties() ).doesNotContainKey( "params" ); + assertThat( ((Schema) openApi.getComponents().getSchemas().get( "testOperationTwo" ).getAllOf() + .get( 1 )).getProperties() ).doesNotContainKey( "params" ); } @Test @@ -662,8 +662,8 @@ void testAspectWithCommentForSeeAttributes() { assertThat( openApi.getSpecVersion() ).isEqualTo( SpecVersion.V31 ); assertThat( openApi.getComponents().getSchemas().get( "AspectWithCollection" ).get$comment() ).isEqualTo( "See: http://example.com/" ); - assertThat( ( (Schema) openApi.getComponents().getSchemas().get( "AspectWithCollection" ).getProperties() - .get( "testProperty" ) ).get$comment() ) + assertThat( ((Schema) openApi.getComponents().getSchemas().get( "AspectWithCollection" ).getProperties() + .get( "testProperty" )).get$comment() ) .isEqualTo( "See: http://example.com/, http://example.com/me" ); assertThat( openApi.getComponents().getSchemas().get( "TestCollection" ).get$comment() ) .isEqualTo( "See: http://example.com/" ); @@ -684,15 +684,18 @@ void testPagingSchemaStructure() { final SwaggerParseResult result = new OpenAPIParser().readContents( json.toString(), null, null ); final OpenAPI openApi = result.getOpenAPI(); - Schema pagingSchema = openApi.getComponents().getSchemas().get( "PagingSchema" ); + final Schema pagingSchema = openApi.getComponents().getSchemas().get( "PagingSchema" ); assertThat( pagingSchema ).isNotNull(); - Schema itemsProperty = (Schema) pagingSchema.getProperties().get( "items" ); - assertThat( itemsProperty.get$ref() ) - .isEqualTo( "#/components/schemas/" + aspect.getName() ); + final String propertyName = aspect.getProperties().get( 0 ).getName(); - assertThat( itemsProperty.getType() ).isNull(); - assertThat( itemsProperty.getItems() ).isNull(); + final Schema property = (Schema) pagingSchema.getProperties().get( propertyName ); + assertThat( property ).isNotNull(); + assertThat( property.getType() ).isEqualTo( "array" ); + + final Schema itemsInner = property.getItems(); + assertThat( itemsInner ).isNotNull(); + assertThat( itemsInner.get$ref() ).isEqualTo( "#/components/schemas/" + aspect.getName() ); assertThat( pagingSchema.getProperties() ).containsKeys( "totalItems", @@ -701,8 +704,41 @@ void testPagingSchemaStructure() { "currentPage" ); - assertThat( openApi.getComponents().getSchemas().get( aspect.getName() ) ) - .isNotNull(); + assertThat( openApi.getComponents().getSchemas().get( aspect.getName() ) ).isNotNull(); + } + + @Test + void testPropertyWithDescriptionInCollection_ShouldBeWrappedInAllOf() { + final Aspect aspect = TestResources.load( TestAspect.ASPECT_WITH_COLLECTION ).aspect(); + + final OpenApiSchemaGenerationConfig config = OpenApiSchemaGenerationConfigBuilder.builder() + .useSemanticVersion( true ) + .baseUrl( TEST_BASE_URL ) + .resourcePath( TEST_RESOURCE_PATH ) + .locale( Locale.ENGLISH ) + .build(); + + final JsonNode json = new AspectModelOpenApiGenerator( aspect, config ).getContent(); + final SwaggerParseResult result = new OpenAPIParser().readContents( json.toString(), null, null ); + final OpenAPI openApi = result.getOpenAPI(); + + final Schema schema = openApi.getComponents().getSchemas().get( aspect.getName() ); + assertThat( schema ).isNotNull(); + + final Schema property = (Schema) schema.getProperties().get( "testProperty" ); + assertThat( property ).isNotNull(); + + assertThat( property.get$ref() ).isNull(); + + assertThat( property.getDescription() ).isEqualTo( "This is a test property." ); + + final List allOfSchemas = property.getAllOf(); + assertThat( allOfSchemas ).isNotNull().hasSize( 1 ); + assertThat( allOfSchemas.get( 0 ).get$ref() ).isEqualTo( "#/components/schemas/TestCollection" ); + + if ( property.getExtensions() != null && property.getExtensions().containsKey( "x-comment" ) ) { + assertThat( property.getExtensions().get( "x-comment" ).toString() ).contains( "http://example.com/" ); + } } private void assertSpecificationIsValid( final JsonNode jsonNode, final String json, final Aspect aspect ) throws IOException {