From 836d426d21f46daa85495b950ead1fd05e11a227 Mon Sep 17 00:00:00 2001 From: Andreas Haessler Date: Mon, 28 Oct 2024 03:19:08 +0100 Subject: [PATCH] [Java] Fix generation of POJOs with sets of enums (fixes #19957) (#19960) --- .../src/main/resources/Java/pojo.mustache | 2 +- .../ApacheHttpClientCodegenTest.java | 24 +++++++++++++++++++ .../3_0/unique-items-string-enum.yaml | 20 ++++++++++++++++ 3 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 modules/openapi-generator/src/test/resources/3_0/unique-items-string-enum.yaml diff --git a/modules/openapi-generator/src/main/resources/Java/pojo.mustache b/modules/openapi-generator/src/main/resources/Java/pojo.mustache index 0de3f814b8a..09482dd66e6 100644 --- a/modules/openapi-generator/src/main/resources/Java/pojo.mustache +++ b/modules/openapi-generator/src/main/resources/Java/pojo.mustache @@ -395,7 +395,7 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens {{#uniqueItems}} if ({{getter}}() != null) { int i = 0; - for ({{{items.dataType}}} _item : {{getter}}()) { + for ({{{items.datatypeWithEnum}}} _item : {{getter}}()) { try { joiner.add(String.format("%s{{baseName}}%s%s=%s", prefix, suffix, "".equals(suffix) ? "" : String.format("%s%d%s", containerPrefix, i, containerSuffix), diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/apachehttpclient/ApacheHttpClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/apachehttpclient/ApacheHttpClientCodegenTest.java index 2ecf67b896a..909e073e7da 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/apachehttpclient/ApacheHttpClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/apachehttpclient/ApacheHttpClientCodegenTest.java @@ -90,4 +90,28 @@ public class ApacheHttpClientCodegenTest { "localVarQueryParams.addAll(apiClient.parameterToPairs(\"multi\", \"values\", queryObject.getValues()))" ); } + + @Test + void testApacheHttpClientQueryParamHandlingUniqueItemsStringEnum() throws IOException { + // Arrange + var output = Files.createTempDirectory("test").toFile(); + output.deleteOnExit(); + + var configurator = new CodegenConfigurator() + .setGeneratorName("java") + .setLibrary(JavaClientCodegen.APACHE) + .setInputSpec("src/test/resources/3_0/unique-items-string-enum.yaml") + .setOutputDir(output.getAbsolutePath().replace("\\", "/")); + + final ClientOptInput clientOptInput = configurator.toClientOptInput(); + DefaultGenerator generator = new DefaultGenerator(); + + // Act + var files = generator.opts(clientOptInput).generate(); + + // Assert + TestUtils.assertFileContains(Paths.get(output + "/src/main/java/org/openapitools/client/model/GetUsersRequestV1.java"), + "for (RolesEnum _item : getRoles()) {" + ); + } } diff --git a/modules/openapi-generator/src/test/resources/3_0/unique-items-string-enum.yaml b/modules/openapi-generator/src/test/resources/3_0/unique-items-string-enum.yaml new file mode 100644 index 00000000000..e8572229f81 --- /dev/null +++ b/modules/openapi-generator/src/test/resources/3_0/unique-items-string-enum.yaml @@ -0,0 +1,20 @@ +openapi: 3.0.1 +info: + title: Sample API to test generation of schemas with uniqueItems arrays of enums + description: API description in Markdown. + version: 1.0.0 +servers: [] +paths: {} +components: + schemas: + GetUsersRequestV1: + type: object + properties: + roles: + uniqueItems: true + type: array + items: + type: string + enum: + - ROLE1 + - ROLE2