Skip to content

Commit 2cf29f1

Browse files
#198: Fixing false positive breaking change reported when removing an optional field from a response
1 parent 9949e4c commit 2cf29f1

File tree

3 files changed

+11
-10
lines changed

3 files changed

+11
-10
lines changed

core/src/main/java/org/openapitools/openapidiff/core/model/ChangedSchema.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,7 @@
55
import java.util.*;
66
import java.util.stream.Collectors;
77
import java.util.stream.Stream;
8-
import org.openapitools.openapidiff.core.model.schema.ChangedEnum;
9-
import org.openapitools.openapidiff.core.model.schema.ChangedMaxLength;
10-
import org.openapitools.openapidiff.core.model.schema.ChangedReadOnly;
11-
import org.openapitools.openapidiff.core.model.schema.ChangedRequired;
12-
import org.openapitools.openapidiff.core.model.schema.ChangedWriteOnly;
8+
import org.openapitools.openapidiff.core.model.schema.*;
139

1410
public class ChangedSchema implements ComposedChanged {
1511
protected DiffContext context;
@@ -137,8 +133,13 @@ private DiffResult calculateCoreChanged() {
137133
&& !discriminatorPropertyChanged) {
138134
return DiffResult.NO_CHANGES;
139135
}
136+
boolean missingRequiredProperties =
137+
oldSchema != null
138+
&& oldSchema.getRequired() != null
139+
&& missingProperties.keySet().stream()
140+
.anyMatch(missingProperty -> oldSchema.getRequired().contains(missingProperty));
140141
boolean compatibleForResponse =
141-
missingProperties.isEmpty() && (oldSchema == null || newSchema != null);
142+
!missingRequiredProperties && (oldSchema == null || newSchema != null);
142143
if ((context.isRequest() && compatibleForRequest()
143144
|| context.isResponse() && compatibleForResponse)
144145
&& !changedType

core/src/test/java/org/openapitools/openapidiff/core/AddPropDiffTest.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package org.openapitools.openapidiff.core;
22

3-
import static org.openapitools.openapidiff.core.TestUtils.assertOpenApiAreEquals;
4-
import static org.openapitools.openapidiff.core.TestUtils.assertOpenApiBackwardIncompatible;
3+
import static org.openapitools.openapidiff.core.TestUtils.*;
54

65
import org.junit.jupiter.api.Test;
76

@@ -16,6 +15,6 @@ public void testDiffSame() {
1615

1716
@Test
1817
public void testDiffDifferent() {
19-
assertOpenApiBackwardIncompatible(OPENAPI_DOC1, OPENAPI_DOC2);
18+
assertOpenApiBackwardCompatible(OPENAPI_DOC1, OPENAPI_DOC2, true);
2019
}
2120
}

core/src/test/resources/recursive_model_1.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ components:
1919
schemas:
2020
B:
2121
type: object
22+
required: ["message2"]
2223
properties:
2324
message:
2425
type: string
@@ -27,4 +28,4 @@ components:
2728
details:
2829
type: array
2930
items:
30-
$ref: '#/components/schemas/B'
31+
$ref: '#/components/schemas/B'

0 commit comments

Comments
 (0)