From 896a78f50d15a055731c8c0bd145ff09f63fdb7a Mon Sep 17 00:00:00 2001 From: Aliaksandr Pinchuk Date: Wed, 12 Feb 2025 23:41:02 +0100 Subject: [PATCH 1/5] Change of 'multipleof' is not detected Fixes #483 --- .../schemadiffresult/SchemaDiffResult.java | 2 + .../core/model/ChangedMultipleOf.java | 50 +++++++++++++++++++ .../openapidiff/core/model/ChangedSchema.java | 22 ++++++++ .../openapidiff/core/ChangesResolver.java | 43 +++++++++++++++- .../openapidiff/core/SchemaDiffTest.java | 44 +++++++++++----- .../schemaDiff/schema-multiple-of-diff-1.yaml | 24 +++++++++ .../schemaDiff/schema-multiple-of-diff-2.yaml | 24 +++++++++ 7 files changed, 195 insertions(+), 14 deletions(-) create mode 100644 core/src/main/java/org/openapitools/openapidiff/core/model/ChangedMultipleOf.java create mode 100644 core/src/test/resources/schemaDiff/schema-multiple-of-diff-1.yaml create mode 100644 core/src/test/resources/schemaDiff/schema-multiple-of-diff-2.yaml diff --git a/core/src/main/java/org/openapitools/openapidiff/core/compare/schemadiffresult/SchemaDiffResult.java b/core/src/main/java/org/openapitools/openapidiff/core/compare/schemadiffresult/SchemaDiffResult.java index 1cd63ae8..537a393b 100644 --- a/core/src/main/java/org/openapitools/openapidiff/core/compare/schemadiffresult/SchemaDiffResult.java +++ b/core/src/main/java/org/openapitools/openapidiff/core/compare/schemadiffresult/SchemaDiffResult.java @@ -13,6 +13,7 @@ import org.openapitools.openapidiff.core.model.Changed; import org.openapitools.openapidiff.core.model.ChangedExample; import org.openapitools.openapidiff.core.model.ChangedExamples; +import org.openapitools.openapidiff.core.model.ChangedMultipleOf; import org.openapitools.openapidiff.core.model.ChangedSchema; import org.openapitools.openapidiff.core.model.DiffContext; import org.openapitools.openapidiff.core.model.deferred.DeferredBuilder; @@ -71,6 +72,7 @@ public , X> DeferredChanged diff( left.getExclusiveMaximum(), right.getExclusiveMaximum(), context)) + .setMultipleOf(new ChangedMultipleOf(left.getMultipleOf(), right.getMultipleOf())) .setExamples(new ChangedExamples(left.getExamples(), right.getExamples())) .setExample(new ChangedExample(left.getExample(), right.getExample())); builder diff --git a/core/src/main/java/org/openapitools/openapidiff/core/model/ChangedMultipleOf.java b/core/src/main/java/org/openapitools/openapidiff/core/model/ChangedMultipleOf.java new file mode 100644 index 00000000..c292ef81 --- /dev/null +++ b/core/src/main/java/org/openapitools/openapidiff/core/model/ChangedMultipleOf.java @@ -0,0 +1,50 @@ +package org.openapitools.openapidiff.core.model; + +import java.math.BigDecimal; +import java.util.Objects; + +public class ChangedMultipleOf implements Changed { + + private final BigDecimal left; + private final BigDecimal right; + + public ChangedMultipleOf(BigDecimal leftMultipleOf, BigDecimal rightMultipleOf) { + this.left = leftMultipleOf; + this.right = rightMultipleOf; + } + + @Override + public DiffResult isChanged() { + if (Objects.equals(left, right)) { + return DiffResult.NO_CHANGES; + } + + return DiffResult.INCOMPATIBLE; + } + + public BigDecimal getLeft() { + return left; + } + + public BigDecimal getRight() { + return right; + } + + @Override + public String toString() { + return "ChangedMultipleOf [left=" + left + ", right=" + right + "]"; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + ChangedMultipleOf that = (ChangedMultipleOf) o; + return Objects.equals(left, that.getLeft()) && Objects.equals(right, that.getRight()); + } + + @Override + public int hashCode() { + return Objects.hash(left, right); + } +} 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 aa3de8d1..77a3d759 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 @@ -37,6 +37,7 @@ public class ChangedSchema implements ComposedChanged { protected boolean changedType; protected ChangedMaxLength maxLength; protected ChangedNumericRange numericRange; + protected ChangedMultipleOf multipleOf; protected boolean discriminatorPropertyChanged; protected ChangedSchema items; protected ChangedOneOfSchema oneOfSchema; @@ -119,6 +120,7 @@ public List getChangedElements() { required, maxLength, numericRange, + multipleOf, extensions)) .collect(Collectors.toList()); } @@ -274,6 +276,14 @@ public ChangedMaxLength getMaxLength() { return this.maxLength; } + public ChangedNumericRange getNumericRange() { + return this.numericRange; + } + + public ChangedMultipleOf getMultipleOf() { + return this.multipleOf; + } + public boolean isDiscriminatorPropertyChanged() { return this.discriminatorPropertyChanged; } @@ -416,6 +426,12 @@ public ChangedSchema setNumericRange(final ChangedNumericRange numericRange) { return this; } + public ChangedSchema setMultipleOf(final ChangedMultipleOf multipleOf) { + clearChangedCache(); + this.multipleOf = multipleOf; + return this; + } + public ChangedSchema setDiscriminatorPropertyChanged(final boolean discriminatorPropertyChanged) { clearChangedCache(); this.discriminatorPropertyChanged = discriminatorPropertyChanged; @@ -473,6 +489,7 @@ public boolean equals(Object o) { && Objects.equals(writeOnly, that.writeOnly) && Objects.equals(maxLength, that.maxLength) && Objects.equals(numericRange, that.numericRange) + && Objects.equals(multipleOf, that.multipleOf) && Objects.equals(items, that.items) && Objects.equals(oneOfSchema, that.oneOfSchema) && Objects.equals(addProp, that.addProp) @@ -503,6 +520,7 @@ public int hashCode() { changedType, maxLength, numericRange, + multipleOf, discriminatorPropertyChanged, items, oneOfSchema, @@ -552,6 +570,10 @@ public java.lang.String toString() { + this.isChangedType() + ", maxLength=" + this.getMaxLength() + + ", numericRange=" + + this.getNumericRange() + + ", multipleOf=" + + this.getMultipleOf() + ", discriminatorPropertyChanged=" + this.isDiscriminatorPropertyChanged() + ", items=" diff --git a/core/src/test/java/org/openapitools/openapidiff/core/ChangesResolver.java b/core/src/test/java/org/openapitools/openapidiff/core/ChangesResolver.java index 0050f95a..cb0fe37b 100644 --- a/core/src/test/java/org/openapitools/openapidiff/core/ChangesResolver.java +++ b/core/src/test/java/org/openapitools/openapidiff/core/ChangesResolver.java @@ -17,6 +17,14 @@ public class ChangesResolver { + /** + * Get the ChangedOperation for the given method and path. + * + * @param changedOpenApi the ChangedOpenApi object + * @param method the HTTP method + * @param path the path + * @return the ChangedOperation object + */ @Nullable public static ChangedOperation getChangedOperation( ChangedOpenApi changedOpenApi, HttpMethod method, String path) { @@ -28,6 +36,15 @@ public static ChangedOperation getChangedOperation( .orElse(null); } + /** + * Get the ChangedParameter for the given method, path, and parameter name. + * + * @param changedOpenApi the ChangedOpenApi object + * @param method the HTTP method + * @param path the path + * @param parameterName the parameter name + * @return the ChangedParameter object + */ @Nullable public static ChangedParameter getChangedParameter( ChangedOpenApi changedOpenApi, HttpMethod method, String path, String parameterName) { @@ -47,6 +64,15 @@ public static ChangedParameter getChangedParameter( .orElse(null); } + /** + * Get the ChangedHeaders for the given method, path, and response code. + * + * @param changedOpenApi the ChangedOpenApi object + * @param method the HTTP method + * @param path the path + * @param responseCode the response code + * @return the ChangedHeaders object + */ @Nullable public static ChangedHeaders getChangedResponseHeaders( ChangedOpenApi changedOpenApi, HttpMethod method, String path, String responseCode) { @@ -58,9 +84,24 @@ public static ChangedHeaders getChangedResponseHeaders( .orElse(null); } + /** + * Get the ChangedSchema for the given method, path, and media type. + * + * @param changedOpenApi the ChangedOpenApi object + * @param method the HTTP method + * @param path the path + * @param mediaType the media type + * @return the ChangedSchema object + */ @Nullable public static ChangedSchema getRequestBodyChangedSchema( - ChangedOperation changedOperation, String mediaType) { + ChangedOpenApi changedOpenApi, HttpMethod method, String path, String mediaType) { + ChangedOperation changedOperation = getChangedOperation(changedOpenApi, method, path); + + if (changedOperation == null) { + return null; + } + return Optional.ofNullable(changedOperation) .map(ChangedOperation::getRequestBody) .map(ChangedRequestBody::getContent) 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 9016f2b9..09b4cdf0 100644 --- a/core/src/test/java/org/openapitools/openapidiff/core/SchemaDiffTest.java +++ b/core/src/test/java/org/openapitools/openapidiff/core/SchemaDiffTest.java @@ -1,19 +1,19 @@ package org.openapitools.openapidiff.core; +import static io.swagger.v3.oas.models.PathItem.HttpMethod.POST; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.openapitools.openapidiff.core.ChangesResolver.getChangedOperation; import static org.openapitools.openapidiff.core.ChangesResolver.getRequestBodyChangedSchema; import static org.openapitools.openapidiff.core.TestUtils.assertOpenApiBackwardCompatible; -import io.swagger.v3.oas.models.PathItem.HttpMethod; import java.io.ByteArrayOutputStream; import java.io.OutputStreamWriter; +import java.math.BigDecimal; +import java.util.Map; import org.junit.jupiter.api.Test; import org.openapitools.openapidiff.core.model.ChangedOpenApi; -import org.openapitools.openapidiff.core.model.ChangedOperation; import org.openapitools.openapidiff.core.model.ChangedSchema; import org.openapitools.openapidiff.core.output.ConsoleRender; @@ -49,11 +49,9 @@ public void schemaBecomesDeprecatedTest() { "schemaDiff/schema-deprecated-handling-1.yaml", "schemaDiff/schema-deprecated-handling-2.yaml"); - ChangedOperation operation = - getChangedOperation(changedOpenApi, HttpMethod.POST, "/schema-diff/deprecated/added"); - assertNotNull(operation); - - ChangedSchema requestBodySchema = getRequestBodyChangedSchema(operation, "application/json"); + ChangedSchema requestBodySchema = + getRequestBodyChangedSchema( + changedOpenApi, POST, "/schema-diff/deprecated/added", "application/json"); assertNotNull(requestBodySchema); assertTrue(requestBodySchema.isChangeDeprecated()); } @@ -65,11 +63,9 @@ public void schemaBecomesNotDeprecatedTest() { "schemaDiff/schema-deprecated-handling-1.yaml", "schemaDiff/schema-deprecated-handling-2.yaml"); - ChangedOperation operation = - getChangedOperation(changedOpenApi, HttpMethod.POST, "/schema-diff/deprecated/removed"); - assertNotNull(operation); - - ChangedSchema requestBodySchema = getRequestBodyChangedSchema(operation, "application/json"); + ChangedSchema requestBodySchema = + getRequestBodyChangedSchema( + changedOpenApi, POST, "/schema-diff/deprecated/removed", "application/json"); assertNotNull(requestBodySchema); assertTrue(requestBodySchema.isChangeDeprecated()); } @@ -104,4 +100,26 @@ public void addPropertyInPutApiIsCompatible() { assertThat(changedOpenApi.isDifferent()).isTrue(); assertThat(changedOpenApi.isCompatible()).isTrue(); } + + @Test // issues #483 #463 + public void changeMultipleOfHandling() { + ChangedOpenApi changedOpenApi = + OpenApiCompare.fromLocations( + "schemaDiff/schema-multiple-of-diff-1.yaml", + "schemaDiff/schema-multiple-of-diff-2.yaml"); + ChangedSchema changedSchema = + getRequestBodyChangedSchema( + changedOpenApi, POST, "/schema/numeric/multiple-of", "application/json"); + + assertThat(changedSchema).isNotNull(); + Map props = changedSchema.getChangedProperties(); + assertThat(props).isNotEmpty(); + assertThat(props.get("field1").getMultipleOf().isIncompatible()).isTrue(); + assertThat(props.get("field1").getMultipleOf().getLeft()).isEqualTo(BigDecimal.valueOf(10)); + assertThat(props.get("field1").getMultipleOf().getRight()).isEqualTo(BigDecimal.valueOf(20)); + + assertThat(props.get("field2").getMultipleOf().isIncompatible()).isTrue(); + assertThat(props.get("field2").getMultipleOf().getLeft()).isEqualTo(BigDecimal.valueOf(0.1)); + assertThat(props.get("field2").getMultipleOf().getRight()).isEqualTo(BigDecimal.valueOf(0.2)); + } } diff --git a/core/src/test/resources/schemaDiff/schema-multiple-of-diff-1.yaml b/core/src/test/resources/schemaDiff/schema-multiple-of-diff-1.yaml new file mode 100644 index 00000000..d990e137 --- /dev/null +++ b/core/src/test/resources/schemaDiff/schema-multiple-of-diff-1.yaml @@ -0,0 +1,24 @@ +openapi: 3.1.0 +info: + description: Schema diff + title: schema diff + version: 1.0.0 +paths: + /schema/numeric/multiple-of: + post: + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TestDTO' +components: + schemas: + TestDTO: + type: object + properties: + field1: + type: integer + multipleOf: 10 + field2: + type: integer + multipleOf: 0.1 \ No newline at end of file diff --git a/core/src/test/resources/schemaDiff/schema-multiple-of-diff-2.yaml b/core/src/test/resources/schemaDiff/schema-multiple-of-diff-2.yaml new file mode 100644 index 00000000..12e1db6d --- /dev/null +++ b/core/src/test/resources/schemaDiff/schema-multiple-of-diff-2.yaml @@ -0,0 +1,24 @@ +openapi: 3.1.0 +info: + description: Schema diff + title: schema diff + version: 1.0.0 +paths: + /schema/numeric/multiple-of: + post: + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TestDTO' +components: + schemas: + TestDTO: + type: object + properties: + field1: + type: integer + multipleOf: 20 + field2: + type: integer + multipleOf: 0.2 \ No newline at end of file From 1bde21391dd844d9097c677d9da8dbf100e368af Mon Sep 17 00:00:00 2001 From: Aliaksandr Pinchuk Date: Wed, 12 Feb 2025 23:49:55 +0100 Subject: [PATCH 2/5] adjust test case --- .../org/openapitools/openapidiff/core/SchemaDiffTest.java | 4 ++-- .../test/resources/schemaDiff/schema-multiple-of-diff-1.yaml | 2 +- .../test/resources/schemaDiff/schema-multiple-of-diff-2.yaml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) 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 09b4cdf0..d178b872 100644 --- a/core/src/test/java/org/openapitools/openapidiff/core/SchemaDiffTest.java +++ b/core/src/test/java/org/openapitools/openapidiff/core/SchemaDiffTest.java @@ -119,7 +119,7 @@ public void changeMultipleOfHandling() { assertThat(props.get("field1").getMultipleOf().getRight()).isEqualTo(BigDecimal.valueOf(20)); assertThat(props.get("field2").getMultipleOf().isIncompatible()).isTrue(); - assertThat(props.get("field2").getMultipleOf().getLeft()).isEqualTo(BigDecimal.valueOf(0.1)); - assertThat(props.get("field2").getMultipleOf().getRight()).isEqualTo(BigDecimal.valueOf(0.2)); + assertThat(props.get("field2").getMultipleOf().getLeft()).isEqualTo(BigDecimal.valueOf(0.01)); + assertThat(props.get("field2").getMultipleOf().getRight()).isEqualTo(BigDecimal.valueOf(0.1)); } } diff --git a/core/src/test/resources/schemaDiff/schema-multiple-of-diff-1.yaml b/core/src/test/resources/schemaDiff/schema-multiple-of-diff-1.yaml index d990e137..9bafab40 100644 --- a/core/src/test/resources/schemaDiff/schema-multiple-of-diff-1.yaml +++ b/core/src/test/resources/schemaDiff/schema-multiple-of-diff-1.yaml @@ -21,4 +21,4 @@ components: multipleOf: 10 field2: type: integer - multipleOf: 0.1 \ No newline at end of file + multipleOf: 0.01 \ No newline at end of file diff --git a/core/src/test/resources/schemaDiff/schema-multiple-of-diff-2.yaml b/core/src/test/resources/schemaDiff/schema-multiple-of-diff-2.yaml index 12e1db6d..fd026b7a 100644 --- a/core/src/test/resources/schemaDiff/schema-multiple-of-diff-2.yaml +++ b/core/src/test/resources/schemaDiff/schema-multiple-of-diff-2.yaml @@ -21,4 +21,4 @@ components: multipleOf: 20 field2: type: integer - multipleOf: 0.2 \ No newline at end of file + multipleOf: 0.1 \ No newline at end of file From ee262468cdacb7f8c748be0ea287890689e627c3 Mon Sep 17 00:00:00 2001 From: Aliaksandr Pinchuk Date: Thu, 13 Feb 2025 00:03:59 +0100 Subject: [PATCH 3/5] add more test cases for multipleOf diff --- .../openapidiff/core/SchemaDiffTest.java | 12 ++++++++++++ .../schemaDiff/schema-multiple-of-diff-1.yaml | 7 ++++++- .../schemaDiff/schema-multiple-of-diff-2.yaml | 7 ++++++- 3 files changed, 24 insertions(+), 2 deletions(-) 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 d178b872..580ed304 100644 --- a/core/src/test/java/org/openapitools/openapidiff/core/SchemaDiffTest.java +++ b/core/src/test/java/org/openapitools/openapidiff/core/SchemaDiffTest.java @@ -114,6 +114,8 @@ public void changeMultipleOfHandling() { assertThat(changedSchema).isNotNull(); Map props = changedSchema.getChangedProperties(); assertThat(props).isNotEmpty(); + + // Check changes in multipleOf assertThat(props.get("field1").getMultipleOf().isIncompatible()).isTrue(); assertThat(props.get("field1").getMultipleOf().getLeft()).isEqualTo(BigDecimal.valueOf(10)); assertThat(props.get("field1").getMultipleOf().getRight()).isEqualTo(BigDecimal.valueOf(20)); @@ -121,5 +123,15 @@ public void changeMultipleOfHandling() { assertThat(props.get("field2").getMultipleOf().isIncompatible()).isTrue(); assertThat(props.get("field2").getMultipleOf().getLeft()).isEqualTo(BigDecimal.valueOf(0.01)); assertThat(props.get("field2").getMultipleOf().getRight()).isEqualTo(BigDecimal.valueOf(0.1)); + + // Check addition of multipleOf + assertThat(props.get("field3").getMultipleOf().isIncompatible()).isTrue(); + assertThat(props.get("field3").getMultipleOf().getLeft()).isNull(); + assertThat(props.get("field3").getMultipleOf().getRight()).isEqualTo(BigDecimal.valueOf(10)); + + // Check deletion of multipleOf + assertThat(props.get("field4").getMultipleOf().isIncompatible()).isTrue(); + assertThat(props.get("field4").getMultipleOf().getLeft()).isEqualTo(BigDecimal.valueOf(10)); + assertThat(props.get("field4").getMultipleOf().getRight()).isNull(); } } diff --git a/core/src/test/resources/schemaDiff/schema-multiple-of-diff-1.yaml b/core/src/test/resources/schemaDiff/schema-multiple-of-diff-1.yaml index 9bafab40..49d3f3b1 100644 --- a/core/src/test/resources/schemaDiff/schema-multiple-of-diff-1.yaml +++ b/core/src/test/resources/schemaDiff/schema-multiple-of-diff-1.yaml @@ -21,4 +21,9 @@ components: multipleOf: 10 field2: type: integer - multipleOf: 0.01 \ No newline at end of file + multipleOf: 0.01 + field3: + type: integer + field4: + type: integer + multipleOf: 10 \ No newline at end of file diff --git a/core/src/test/resources/schemaDiff/schema-multiple-of-diff-2.yaml b/core/src/test/resources/schemaDiff/schema-multiple-of-diff-2.yaml index fd026b7a..58311d08 100644 --- a/core/src/test/resources/schemaDiff/schema-multiple-of-diff-2.yaml +++ b/core/src/test/resources/schemaDiff/schema-multiple-of-diff-2.yaml @@ -21,4 +21,9 @@ components: multipleOf: 20 field2: type: integer - multipleOf: 0.1 \ No newline at end of file + multipleOf: 0.1 + field3: + type: integer + multipleOf: 10 + field4: + type: integer \ No newline at end of file From 18f75a79912c9f280899d97da85d502a8668ed2a Mon Sep 17 00:00:00 2001 From: Aliaksandr Pinchuk Date: Thu, 13 Feb 2025 11:27:14 +0100 Subject: [PATCH 4/5] define compatibility rules for ChangedMultipleOf --- .../compare/schemadiffresult/SchemaDiffResult.java | 1 - .../openapidiff/core/model/ChangedSchema.java | 1 + .../core/model/{ => schema}/ChangedMultipleOf.java | 11 +++++++++-- .../openapitools/openapidiff/core/SchemaDiffTest.java | 2 +- 4 files changed, 11 insertions(+), 4 deletions(-) rename core/src/main/java/org/openapitools/openapidiff/core/model/{ => schema}/ChangedMultipleOf.java (76%) diff --git a/core/src/main/java/org/openapitools/openapidiff/core/compare/schemadiffresult/SchemaDiffResult.java b/core/src/main/java/org/openapitools/openapidiff/core/compare/schemadiffresult/SchemaDiffResult.java index 537a393b..f3b1d44c 100644 --- a/core/src/main/java/org/openapitools/openapidiff/core/compare/schemadiffresult/SchemaDiffResult.java +++ b/core/src/main/java/org/openapitools/openapidiff/core/compare/schemadiffresult/SchemaDiffResult.java @@ -13,7 +13,6 @@ import org.openapitools.openapidiff.core.model.Changed; import org.openapitools.openapidiff.core.model.ChangedExample; import org.openapitools.openapidiff.core.model.ChangedExamples; -import org.openapitools.openapidiff.core.model.ChangedMultipleOf; import org.openapitools.openapidiff.core.model.ChangedSchema; import org.openapitools.openapidiff.core.model.DiffContext; import org.openapitools.openapidiff.core.model.deferred.DeferredBuilder; 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 77a3d759..d11575ad 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 @@ -10,6 +10,7 @@ import java.util.stream.Stream; import org.openapitools.openapidiff.core.model.schema.ChangedEnum; import org.openapitools.openapidiff.core.model.schema.ChangedMaxLength; +import org.openapitools.openapidiff.core.model.schema.ChangedMultipleOf; import org.openapitools.openapidiff.core.model.schema.ChangedNumericRange; import org.openapitools.openapidiff.core.model.schema.ChangedReadOnly; import org.openapitools.openapidiff.core.model.schema.ChangedRequired; diff --git a/core/src/main/java/org/openapitools/openapidiff/core/model/ChangedMultipleOf.java b/core/src/main/java/org/openapitools/openapidiff/core/model/schema/ChangedMultipleOf.java similarity index 76% rename from core/src/main/java/org/openapitools/openapidiff/core/model/ChangedMultipleOf.java rename to core/src/main/java/org/openapitools/openapidiff/core/model/schema/ChangedMultipleOf.java index c292ef81..64d4b9ee 100644 --- a/core/src/main/java/org/openapitools/openapidiff/core/model/ChangedMultipleOf.java +++ b/core/src/main/java/org/openapitools/openapidiff/core/model/schema/ChangedMultipleOf.java @@ -1,7 +1,9 @@ -package org.openapitools.openapidiff.core.model; +package org.openapitools.openapidiff.core.model.schema; import java.math.BigDecimal; import java.util.Objects; +import org.openapitools.openapidiff.core.model.Changed; +import org.openapitools.openapidiff.core.model.DiffResult; public class ChangedMultipleOf implements Changed { @@ -14,11 +16,16 @@ public ChangedMultipleOf(BigDecimal leftMultipleOf, BigDecimal rightMultipleOf) } @Override - public DiffResult isChanged() { + public DiffResult isChanged() { // no changes if (Objects.equals(left, right)) { return DiffResult.NO_CHANGES; } + // multipleof removed -> compatible + if (right == null) { + return DiffResult.COMPATIBLE; + } + return DiffResult.INCOMPATIBLE; } 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 580ed304..0b4eab6c 100644 --- a/core/src/test/java/org/openapitools/openapidiff/core/SchemaDiffTest.java +++ b/core/src/test/java/org/openapitools/openapidiff/core/SchemaDiffTest.java @@ -130,7 +130,7 @@ public void changeMultipleOfHandling() { assertThat(props.get("field3").getMultipleOf().getRight()).isEqualTo(BigDecimal.valueOf(10)); // Check deletion of multipleOf - assertThat(props.get("field4").getMultipleOf().isIncompatible()).isTrue(); + assertThat(props.get("field4").getMultipleOf().isCompatible()).isTrue(); assertThat(props.get("field4").getMultipleOf().getLeft()).isEqualTo(BigDecimal.valueOf(10)); assertThat(props.get("field4").getMultipleOf().getRight()).isNull(); } From 22fd9aefa42b5b41b8efdddd6ba8642cb3991a1a Mon Sep 17 00:00:00 2001 From: Aliaksandr Pinchuk Date: Thu, 13 Feb 2025 11:39:33 +0100 Subject: [PATCH 5/5] remove redundant coment --- .../openapidiff/core/model/schema/ChangedMultipleOf.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/org/openapitools/openapidiff/core/model/schema/ChangedMultipleOf.java b/core/src/main/java/org/openapitools/openapidiff/core/model/schema/ChangedMultipleOf.java index 64d4b9ee..adaf1571 100644 --- a/core/src/main/java/org/openapitools/openapidiff/core/model/schema/ChangedMultipleOf.java +++ b/core/src/main/java/org/openapitools/openapidiff/core/model/schema/ChangedMultipleOf.java @@ -16,7 +16,7 @@ public ChangedMultipleOf(BigDecimal leftMultipleOf, BigDecimal rightMultipleOf) } @Override - public DiffResult isChanged() { // no changes + public DiffResult isChanged() { if (Objects.equals(left, right)) { return DiffResult.NO_CHANGES; }