From 392988cd778fbc7d100cd5bb400e07db4e025b57 Mon Sep 17 00:00:00 2001 From: Daniel Almqvist <6771667+danielalmqvist@users.noreply.github.com> Date: Tue, 26 Nov 2024 16:33:31 +0100 Subject: [PATCH] Trim the input of operationId filter in OpenAPINormalizer (#20186) --- .../codegen/OpenAPINormalizer.java | 5 ++++- .../codegen/OpenAPINormalizerTest.java | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/OpenAPINormalizer.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/OpenAPINormalizer.java index 788e74c42ec1..44fa54695702 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/OpenAPINormalizer.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/OpenAPINormalizer.java @@ -232,7 +232,10 @@ public void processRules(Map inputRules) { LOGGER.error("FILTER rule must be in the form of `operationId:name1|name2|name3`: {}", inputRules.get(FILTER)); } else { if ("operationId".equals(filterStrs[0])) { - operationIdFilters = new HashSet<>(Arrays.asList(filterStrs[1].split("[|]"))); + operationIdFilters = Arrays.stream(filterStrs[1].split("[|]")) + .filter(Objects::nonNull) + .map(String::trim) + .collect(Collectors.toCollection(HashSet::new)); } else { LOGGER.error("FILTER rule must be in the form of `operationId:name1|name2|name3`: {}", inputRules.get(FILTER)); } diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/OpenAPINormalizerTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/OpenAPINormalizerTest.java index c7713234d74a..21f36c1ee6a9 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/OpenAPINormalizerTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/OpenAPINormalizerTest.java @@ -486,6 +486,24 @@ public void testFilter() { assertEquals(openAPI.getPaths().get("/person/display/{personId}").getPut().getExtensions().get("x-internal"), true); } + @Test + public void testFilterWithTrim() { + OpenAPI openAPI = TestUtils.parseSpec("src/test/resources/3_0/enableKeepOnlyFirstTagInOperation_test.yaml"); + + assertEquals(openAPI.getPaths().get("/person/display/{personId}").getGet().getExtensions(), null); + assertEquals(openAPI.getPaths().get("/person/display/{personId}").getDelete().getExtensions().get("x-internal"), true); + assertEquals(openAPI.getPaths().get("/person/display/{personId}").getPut().getExtensions(), null); + + Map options = new HashMap<>(); + options.put("FILTER", "operationId:\n\t\t\t\tdelete|\n\t\tlist"); + OpenAPINormalizer openAPINormalizer = new OpenAPINormalizer(openAPI, options); + openAPINormalizer.normalize(); + + assertEquals(openAPI.getPaths().get("/person/display/{personId}").getGet().getExtensions().get("x-internal"), false); + assertEquals(openAPI.getPaths().get("/person/display/{personId}").getDelete().getExtensions().get("x-internal"), false); + assertEquals(openAPI.getPaths().get("/person/display/{personId}").getPut().getExtensions().get("x-internal"), true); + } + @Test public void testComposedSchemaDoesNotThrow() { OpenAPI openAPI = TestUtils.parseSpec("src/test/resources/3_1/composed-schema.yaml");