diff --git a/core/src/main/java/org/openapitools/openapidiff/core/model/ChangedSchema.java b/core/src/main/java/org/openapitools/openapidiff/core/model/ChangedSchema.java index c6289f17d..22e5a8f08 100644 --- a/core/src/main/java/org/openapitools/openapidiff/core/model/ChangedSchema.java +++ b/core/src/main/java/org/openapitools/openapidiff/core/model/ChangedSchema.java @@ -137,8 +137,13 @@ private DiffResult calculateCoreChanged() { && !discriminatorPropertyChanged) { return DiffResult.NO_CHANGES; } + boolean missingRequiredProperties = + oldSchema != null + && oldSchema.getRequired() != null + && missingProperties.keySet().stream() + .anyMatch(missingProperty -> oldSchema.getRequired().contains(missingProperty)); boolean compatibleForResponse = - missingProperties.isEmpty() && (oldSchema == null || newSchema != null); + !missingRequiredProperties && (oldSchema == null || newSchema != null); if ((context.isRequest() && compatibleForRequest() || context.isResponse() && compatibleForResponse) && !changedType diff --git a/core/src/test/java/org/openapitools/openapidiff/core/AddPropDiffTest.java b/core/src/test/java/org/openapitools/openapidiff/core/AddPropDiffTest.java index b71d8f039..6d668c115 100644 --- a/core/src/test/java/org/openapitools/openapidiff/core/AddPropDiffTest.java +++ b/core/src/test/java/org/openapitools/openapidiff/core/AddPropDiffTest.java @@ -1,7 +1,7 @@ package org.openapitools.openapidiff.core; import static org.openapitools.openapidiff.core.TestUtils.assertOpenApiAreEquals; -import static org.openapitools.openapidiff.core.TestUtils.assertOpenApiBackwardIncompatible; +import static org.openapitools.openapidiff.core.TestUtils.assertOpenApiBackwardCompatible; import org.junit.jupiter.api.Test; @@ -16,6 +16,6 @@ public void testDiffSame() { @Test public void testDiffDifferent() { - assertOpenApiBackwardIncompatible(OPENAPI_DOC1, OPENAPI_DOC2); + assertOpenApiBackwardCompatible(OPENAPI_DOC1, OPENAPI_DOC2, true); } } diff --git a/core/src/test/resources/recursive_model_1.yaml b/core/src/test/resources/recursive_model_1.yaml index 6a05ab0ad..24f545186 100644 --- a/core/src/test/resources/recursive_model_1.yaml +++ b/core/src/test/resources/recursive_model_1.yaml @@ -19,6 +19,7 @@ components: schemas: B: type: object + required: ["message2"] properties: message: type: string @@ -27,4 +28,4 @@ components: details: type: array items: - $ref: '#/components/schemas/B' \ No newline at end of file + $ref: '#/components/schemas/B'