From 47590098c630a2d229c2595b81e27d1abad1da00 Mon Sep 17 00:00:00 2001 From: Aliaksandr Pinchuk Date: Mon, 13 May 2024 22:02:59 +0400 Subject: [PATCH 1/3] Add support for distinguishing equivalent paths by parameter format in overloaded parameters --- .../openapidiff/core/compare/PathsDiff.java | 18 ++++++++++++++++-- .../test/resources/parameters_overloading.yaml | 15 +++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/openapitools/openapidiff/core/compare/PathsDiff.java b/core/src/main/java/org/openapitools/openapidiff/core/compare/PathsDiff.java index 49cbff9c4..6e419d59b 100644 --- a/core/src/main/java/org/openapitools/openapidiff/core/compare/PathsDiff.java +++ b/core/src/main/java/org/openapitools/openapidiff/core/compare/PathsDiff.java @@ -125,6 +125,8 @@ private static boolean methodsAndParametersIntersect(PathItem a, PathItem b) { } /** + * Checks is provided parameter pairs are equal by type and format + * * @param left parameters from the first compared method * @param right parameters from the second compared method * @return true in case each parameter pair is of the same type; false @@ -134,9 +136,21 @@ private static boolean parametersIntersect(List left, List int parametersSize = left.size(); long intersectedParameters = IntStream.range(0, left.size()) - .filter( - i -> left.get(i).getSchema().getType().equals(right.get(i).getSchema().getType())) + .filter(i -> parametersTypeEquals(left.get(i), right.get(i))) .count(); return parametersSize == intersectedParameters; } + + /** + * Checks is provided parameter pair equal by type and format + * + * @param left parameter from the first compared method + * @param right parameter from the second compared method + * @return true in case parameter pair is of the same type; false + * otherwise + */ + private static boolean parametersTypeEquals(Parameter left, Parameter right) { + return Objects.equals(left.getSchema().getType(), right.getSchema().getType()) + && Objects.equals(left.getSchema().getFormat(), right.getSchema().getFormat()); + } } diff --git a/core/src/test/resources/parameters_overloading.yaml b/core/src/test/resources/parameters_overloading.yaml index bd3bee96c..5ed874923 100644 --- a/core/src/test/resources/parameters_overloading.yaml +++ b/core/src/test/resources/parameters_overloading.yaml @@ -3,6 +3,21 @@ info: title: Projects API version: 1.0.0 paths: + /projects/{key}: + get: + parameters: + - in: path + name: key + required: true + schema: + type: string + responses: + '200': + description: 'Success' + content: + application/json: + schema: + $ref: '#/components/schemas/SampleResponse' /projects/{id}: get: parameters: From 70178173c2d2a4ab922c6708f65e46e5c3af6c31 Mon Sep 17 00:00:00 2001 From: Aliaksandr Pinchuk Date: Mon, 4 Nov 2024 16:43:36 +0100 Subject: [PATCH 2/3] Fix typos in PathsDiff.java --- .../org/openapitools/openapidiff/core/compare/PathsDiff.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/openapitools/openapidiff/core/compare/PathsDiff.java b/core/src/main/java/org/openapitools/openapidiff/core/compare/PathsDiff.java index 6e419d59b..8b4f459b8 100644 --- a/core/src/main/java/org/openapitools/openapidiff/core/compare/PathsDiff.java +++ b/core/src/main/java/org/openapitools/openapidiff/core/compare/PathsDiff.java @@ -125,7 +125,7 @@ private static boolean methodsAndParametersIntersect(PathItem a, PathItem b) { } /** - * Checks is provided parameter pairs are equal by type and format + * Checks if provided parameter pairs are equal by type and format * * @param left parameters from the first compared method * @param right parameters from the second compared method @@ -142,7 +142,7 @@ private static boolean parametersIntersect(List left, List } /** - * Checks is provided parameter pair equal by type and format + * Checks if provided parameter pair is equal by type and format * * @param left parameter from the first compared method * @param right parameter from the second compared method From dde4f5c6f5e6e81765707e29470c5139ba373129 Mon Sep 17 00:00:00 2001 From: Aliaksandr Pinchuk Date: Wed, 13 Nov 2024 15:48:33 +0100 Subject: [PATCH 3/3] Add test case for complex path parameter with dot while handling overloaded parameters --- .../resources/parameters_overloading.yaml | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/core/src/test/resources/parameters_overloading.yaml b/core/src/test/resources/parameters_overloading.yaml index 5ed874923..061444451 100644 --- a/core/src/test/resources/parameters_overloading.yaml +++ b/core/src/test/resources/parameters_overloading.yaml @@ -50,6 +50,26 @@ paths: application/json: schema: $ref: '#/components/schemas/SampleResponse' + /projects/{id}.{idPostfix}: + get: + parameters: + - in: path + name: id + required: true + schema: + type: string + - in: path + name: idPostfix + required: true + schema: + type: string + responses: + '200': + description: 'Success' + content: + application/json: + schema: + $ref: '#/components/schemas/SampleResponse' components: schemas: SampleResponse: