diff --git a/core/src/main/java/org/openapitools/openapidiff/core/compare/SchemaDiff.java b/core/src/main/java/org/openapitools/openapidiff/core/compare/SchemaDiff.java index 295cd9c6..fadae7a1 100644 --- a/core/src/main/java/org/openapitools/openapidiff/core/compare/SchemaDiff.java +++ b/core/src/main/java/org/openapitools/openapidiff/core/compare/SchemaDiff.java @@ -240,6 +240,9 @@ protected static Schema addSchema(Schema schema, Schema fromSche if (fromSchema.getMinItems() != null) { schema.setMinItems(fromSchema.getMinItems()); } + if (fromSchema.getItems() != null) { + schema.setItems(fromSchema.getItems()); + } if (fromSchema.getMaxProperties() != null) { schema.setMaxProperties(fromSchema.getMaxProperties()); } diff --git a/core/src/main/java/org/openapitools/openapidiff/core/compare/schemadiffresult/ArraySchemaDiffResult.java b/core/src/main/java/org/openapitools/openapidiff/core/compare/schemadiffresult/ArraySchemaDiffResult.java index eafe632c..f5157829 100644 --- a/core/src/main/java/org/openapitools/openapidiff/core/compare/schemadiffresult/ArraySchemaDiffResult.java +++ b/core/src/main/java/org/openapitools/openapidiff/core/compare/schemadiffresult/ArraySchemaDiffResult.java @@ -1,7 +1,6 @@ package org.openapitools.openapidiff.core.compare.schemadiffresult; import io.swagger.v3.oas.models.Components; -import io.swagger.v3.oas.models.media.ArraySchema; import io.swagger.v3.oas.models.media.Schema; import org.openapitools.openapidiff.core.compare.OpenApiDiff; import org.openapitools.openapidiff.core.model.ChangedSchema; @@ -22,9 +21,6 @@ public , X> DeferredChanged diff( T left, T right, DiffContext context) { - ArraySchema leftArraySchema = (ArraySchema) left; - ArraySchema rightArraySchema = (ArraySchema) right; - DeferredChanged superSchemaDiff = super.diff(refSet, leftComponents, rightComponents, left, right, context) .flatMap( @@ -34,8 +30,8 @@ public , X> DeferredChanged diff( .getSchemaDiff() .diff( refSet, - leftArraySchema.getItems(), - rightArraySchema.getItems(), + left.getItems(), + right.getItems(), context.copyWithRequired(true)); itemsDiff.ifPresent(changedSchema::setItems); return itemsDiff; diff --git a/core/src/test/java/org/openapitools/openapidiff/core/Issue887Test.java b/core/src/test/java/org/openapitools/openapidiff/core/Issue887Test.java new file mode 100644 index 00000000..f1406b8b --- /dev/null +++ b/core/src/test/java/org/openapitools/openapidiff/core/Issue887Test.java @@ -0,0 +1,29 @@ +package org.openapitools.openapidiff.core; + +import static org.assertj.core.api.Assertions.assertThatCode; +import static org.openapitools.openapidiff.core.TestUtils.assertOpenApiAreEquals; + +import org.junit.jupiter.api.Test; + +public class Issue887Test { + + private final String ALLOF_ARRAY = "issue-887-1.yaml"; + private final String DIRECT_ARRAY = "issue-887-2.yaml"; + + @Test + public void testAllOfArrayToDirectArrayDoesNotThrow() { + assertThatCode(() -> OpenApiCompare.fromLocations(ALLOF_ARRAY, DIRECT_ARRAY)) + .doesNotThrowAnyException(); + } + + @Test + public void testDirectArrayToAllOfArrayDoesNotThrow() { + assertThatCode(() -> OpenApiCompare.fromLocations(DIRECT_ARRAY, ALLOF_ARRAY)) + .doesNotThrowAnyException(); + } + + @Test + public void testAllOfArrayToDirectArrayAreEquals() { + assertOpenApiAreEquals(ALLOF_ARRAY, DIRECT_ARRAY); + } +} diff --git a/core/src/test/resources/issue-887-1.yaml b/core/src/test/resources/issue-887-1.yaml new file mode 100644 index 00000000..30ebc232 --- /dev/null +++ b/core/src/test/resources/issue-887-1.yaml @@ -0,0 +1,32 @@ +openapi: 3.0.3 +info: + title: Test API + version: 1.0.0 + +paths: + /test: + get: + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/TestResponse' + +components: + schemas: + TestResponse: + type: object + properties: + valuations: + allOf: + - $ref: '#/components/schemas/Valuations' + + Valuations: + type: array + items: + type: object + properties: + value: + type: string diff --git a/core/src/test/resources/issue-887-2.yaml b/core/src/test/resources/issue-887-2.yaml new file mode 100644 index 00000000..3237bda6 --- /dev/null +++ b/core/src/test/resources/issue-887-2.yaml @@ -0,0 +1,31 @@ +openapi: 3.0.3 +info: + title: Test API + version: 1.0.0 + +paths: + /test: + get: + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/TestResponse' + +components: + schemas: + TestResponse: + type: object + properties: + valuations: + type: array + items: + $ref: '#/components/schemas/Valuation' + + Valuation: + type: object + properties: + value: + type: string