From 75fbcd55243f80bbffee7db911e8d147da7341c4 Mon Sep 17 00:00:00 2001 From: Danilo Fuchs Date: Wed, 7 May 2025 17:41:45 -0300 Subject: [PATCH 1/2] fix: No change if same minItems or maxItems --- .../openapidiff/core/model/schema/ChangedMaxItems.java | 3 +++ .../openapidiff/core/model/schema/ChangedMinItems.java | 3 +++ .../openapitools/openapidiff/core/SchemaDiffTest.java | 5 ++++- .../schemaDiff/schema-min-max-items-diff-1.yaml | 8 +++++++- .../schemaDiff/schema-min-max-items-diff-2.yaml | 10 ++++++++-- 5 files changed, 25 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/org/openapitools/openapidiff/core/model/schema/ChangedMaxItems.java b/core/src/main/java/org/openapitools/openapidiff/core/model/schema/ChangedMaxItems.java index 1af1134b..541386a5 100644 --- a/core/src/main/java/org/openapitools/openapidiff/core/model/schema/ChangedMaxItems.java +++ b/core/src/main/java/org/openapitools/openapidiff/core/model/schema/ChangedMaxItems.java @@ -17,6 +17,9 @@ public ChangedMaxItems(Integer oldValue, Integer newValue, DiffContext context) @Override public DiffResult isChanged() { + if (oldValue == newValue) { + return DiffResult.NO_CHANGES; + } if (oldValue == null && newValue == null) { return DiffResult.NO_CHANGES; } diff --git a/core/src/main/java/org/openapitools/openapidiff/core/model/schema/ChangedMinItems.java b/core/src/main/java/org/openapitools/openapidiff/core/model/schema/ChangedMinItems.java index 7791893c..16e81ef2 100644 --- a/core/src/main/java/org/openapitools/openapidiff/core/model/schema/ChangedMinItems.java +++ b/core/src/main/java/org/openapitools/openapidiff/core/model/schema/ChangedMinItems.java @@ -17,6 +17,9 @@ public ChangedMinItems(Integer oldValue, Integer newValue, DiffContext context) @Override public DiffResult isChanged() { + if (oldValue == newValue) { + return DiffResult.NO_CHANGES; + } if (oldValue == null && newValue == null) { return DiffResult.NO_CHANGES; } diff --git a/core/src/test/java/org/openapitools/openapidiff/core/SchemaDiffTest.java b/core/src/test/java/org/openapitools/openapidiff/core/SchemaDiffTest.java index 8cd477ff..3e5fca13 100644 --- a/core/src/test/java/org/openapitools/openapidiff/core/SchemaDiffTest.java +++ b/core/src/test/java/org/openapitools/openapidiff/core/SchemaDiffTest.java @@ -144,7 +144,7 @@ public void changeMultipleOfHandling() { assertThat(props.get("field4").getMultipleOf().getRight()).isNull(); } - @Test // issues #480 + @Test // issues #480 and #779 public void changeMinMaxItemsHandling() { ChangedOpenApi changedOpenApi = OpenApiCompare.fromLocations( @@ -158,6 +158,9 @@ public void changeMinMaxItemsHandling() { Map props = changedSchema.getChangedProperties(); assertThat(props).isNotEmpty(); + // Check no changes in minItems and maxItems + assertThat(props.get("field0")).isNull(); + // Check increasing of minItems assertThat(props.get("field1").getMinItems().isIncompatible()).isTrue(); assertThat(props.get("field1").getMinItems().getOldValue()).isEqualTo(1); diff --git a/core/src/test/resources/schemaDiff/schema-min-max-items-diff-1.yaml b/core/src/test/resources/schemaDiff/schema-min-max-items-diff-1.yaml index 23d84148..fae9491f 100644 --- a/core/src/test/resources/schemaDiff/schema-min-max-items-diff-1.yaml +++ b/core/src/test/resources/schemaDiff/schema-min-max-items-diff-1.yaml @@ -16,6 +16,12 @@ components: TestDTO: type: object properties: + field0: + type: array + items: + type: string + minItems: 1 + maxItems: 10 field1: type: array items: @@ -33,7 +39,7 @@ components: items: type: string minItems: 1 - maxItems: 90 + maxItems: 90 field4: type: array items: diff --git a/core/src/test/resources/schemaDiff/schema-min-max-items-diff-2.yaml b/core/src/test/resources/schemaDiff/schema-min-max-items-diff-2.yaml index 0d8e6199..788a9da0 100644 --- a/core/src/test/resources/schemaDiff/schema-min-max-items-diff-2.yaml +++ b/core/src/test/resources/schemaDiff/schema-min-max-items-diff-2.yaml @@ -16,6 +16,12 @@ components: TestDTO: type: object properties: + field0: + type: array + items: + type: string + minItems: 1 + maxItems: 10 field1: type: array items: @@ -27,13 +33,13 @@ components: items: type: string minItems: 10 - maxItems: 100 + maxItems: 100 field3: type: array items: type: string minItems: 1 - maxItems: 100 + maxItems: 100 field4: type: array items: From 53fa19255e63069ce574ab49e66f350669c70bcc Mon Sep 17 00:00:00 2001 From: Danilo Fuchs Date: Wed, 7 May 2025 17:50:29 -0300 Subject: [PATCH 2/2] feat: Test adding or removing property --- .../core/model/schema/ChangedMaxItems.java | 3 --- .../core/model/schema/ChangedMinItems.java | 3 --- .../openapidiff/core/SchemaDiffTest.java | 20 +++++++++++++++++++ .../schema-min-max-items-diff-1.yaml | 10 ++++++++++ .../schema-min-max-items-diff-2.yaml | 10 ++++++++++ 5 files changed, 40 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/org/openapitools/openapidiff/core/model/schema/ChangedMaxItems.java b/core/src/main/java/org/openapitools/openapidiff/core/model/schema/ChangedMaxItems.java index 541386a5..1ef3a498 100644 --- a/core/src/main/java/org/openapitools/openapidiff/core/model/schema/ChangedMaxItems.java +++ b/core/src/main/java/org/openapitools/openapidiff/core/model/schema/ChangedMaxItems.java @@ -20,9 +20,6 @@ public DiffResult isChanged() { if (oldValue == newValue) { return DiffResult.NO_CHANGES; } - if (oldValue == null && newValue == null) { - return DiffResult.NO_CHANGES; - } if (oldValue == null || newValue == null) { return DiffResult.COMPATIBLE; } diff --git a/core/src/main/java/org/openapitools/openapidiff/core/model/schema/ChangedMinItems.java b/core/src/main/java/org/openapitools/openapidiff/core/model/schema/ChangedMinItems.java index 16e81ef2..3a3d4071 100644 --- a/core/src/main/java/org/openapitools/openapidiff/core/model/schema/ChangedMinItems.java +++ b/core/src/main/java/org/openapitools/openapidiff/core/model/schema/ChangedMinItems.java @@ -20,9 +20,6 @@ public DiffResult isChanged() { if (oldValue == newValue) { return DiffResult.NO_CHANGES; } - if (oldValue == null && newValue == null) { - return DiffResult.NO_CHANGES; - } if (oldValue == null || newValue == null) { return DiffResult.COMPATIBLE; } diff --git a/core/src/test/java/org/openapitools/openapidiff/core/SchemaDiffTest.java b/core/src/test/java/org/openapitools/openapidiff/core/SchemaDiffTest.java index 3e5fca13..1f41406a 100644 --- a/core/src/test/java/org/openapitools/openapidiff/core/SchemaDiffTest.java +++ b/core/src/test/java/org/openapitools/openapidiff/core/SchemaDiffTest.java @@ -180,6 +180,26 @@ public void changeMinMaxItemsHandling() { assertThat(props.get("field4").getMaxItems().isIncompatible()).isTrue(); assertThat(props.get("field4").getMaxItems().getOldValue()).isEqualTo(100); assertThat(props.get("field4").getMaxItems().getNewValue()).isEqualTo(90); + + // Check removal of minItems + assertThat(props.get("field5").getMinItems().isCompatible()).isTrue(); + assertThat(props.get("field5").getMinItems().getOldValue()).isEqualTo(1); + assertThat(props.get("field5").getMinItems().getNewValue()).isNull(); + + // Check removal of maxItems + assertThat(props.get("field5").getMaxItems().isCompatible()).isTrue(); + assertThat(props.get("field5").getMaxItems().getOldValue()).isEqualTo(100); + assertThat(props.get("field5").getMaxItems().getNewValue()).isNull(); + + // Check addition of minItems + assertThat(props.get("field6").getMinItems().isCompatible()).isTrue(); + assertThat(props.get("field6").getMinItems().getOldValue()).isNull(); + assertThat(props.get("field6").getMinItems().getNewValue()).isEqualTo(1); + + // Check addition of maxItems + assertThat(props.get("field6").getMaxItems().isCompatible()).isTrue(); + assertThat(props.get("field6").getMaxItems().getOldValue()).isNull(); + assertThat(props.get("field6").getMaxItems().getNewValue()).isEqualTo(100); } @Test // issue #482 diff --git a/core/src/test/resources/schemaDiff/schema-min-max-items-diff-1.yaml b/core/src/test/resources/schemaDiff/schema-min-max-items-diff-1.yaml index fae9491f..a7426987 100644 --- a/core/src/test/resources/schemaDiff/schema-min-max-items-diff-1.yaml +++ b/core/src/test/resources/schemaDiff/schema-min-max-items-diff-1.yaml @@ -46,3 +46,13 @@ components: type: string minItems: 1 maxItems: 100 + field5: + type: array + items: + type: string + minItems: 1 + maxItems: 100 + field6: + type: array + items: + type: string diff --git a/core/src/test/resources/schemaDiff/schema-min-max-items-diff-2.yaml b/core/src/test/resources/schemaDiff/schema-min-max-items-diff-2.yaml index 788a9da0..5e58f573 100644 --- a/core/src/test/resources/schemaDiff/schema-min-max-items-diff-2.yaml +++ b/core/src/test/resources/schemaDiff/schema-min-max-items-diff-2.yaml @@ -46,3 +46,13 @@ components: type: string minItems: 1 maxItems: 90 + field5: + type: array + items: + type: string + field6: + type: array + items: + type: string + minItems: 1 + maxItems: 100