Skip to content

Commit 2ab5365

Browse files
authored
Fix kotlin codegen for enum with int items (#22324)
1 parent 2326eef commit 2ab5365

File tree

3 files changed

+54
-1
lines changed

3 files changed

+54
-1
lines changed

modules/openapi-generator/src/main/resources/kotlin-client/data_class.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ import {{packageName}}.infrastructure.ITransformForStorage
145145
{{#multiplatform}}
146146
@Serializable
147147
{{/multiplatform}}
148-
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}enum class {{{nameInPascalCase}}}({{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val value: {{^isContainer}}{{dataType}}{{/isContainer}}{{#isContainer}}kotlin.String{{/isContainer}}) {
148+
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}enum class {{{nameInPascalCase}}}({{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val value: {{^isContainer}}{{dataType}}{{/isContainer}}{{#isContainer}}{{#mostInnerItems}}{{dataType}}{{/mostInnerItems}}{{/isContainer}}) {
149149
{{#allowableValues}}
150150
{{#enumVars}}
151151
{{^multiplatform}}

modules/openapi-generator/src/test/java/org/openapitools/codegen/kotlin/KotlinClientCodegenModelTest.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import java.util.Map;
4444

4545
import static org.openapitools.codegen.CodegenConstants.*;
46+
import static org.openapitools.codegen.TestUtils.assertFileContains;
4647

4748
@SuppressWarnings("static-method")
4849
public class KotlinClientCodegenModelTest {
@@ -617,6 +618,32 @@ public void polymorphicJacksonSerialization() throws IOException {
617618
TestUtils.assertFileNotContains(birdKt, "val discriminator");
618619
}
619620

621+
@Test
622+
public void testIntArrayToEnum() throws IOException {
623+
File output = Files.createTempDirectory("test").toFile();
624+
output.deleteOnExit();
625+
626+
final CodegenConfigurator configurator = new CodegenConfigurator()
627+
.setGeneratorName("kotlin")
628+
.setLibrary("jvm-ktor")
629+
.setAdditionalProperties(new HashMap<>() {{
630+
put(CodegenConstants.SERIALIZATION_LIBRARY, "jackson");
631+
put(CodegenConstants.MODEL_PACKAGE, "model");
632+
put(ENUM_PROPERTY_NAMING, "UPPERCASE");
633+
}})
634+
.setInputSpec("src/test/resources/3_0/kotlin/issue15204-int-array-enum.yaml")
635+
.setOutputDir(output.getAbsolutePath().replace("\\", "/"));
636+
637+
final ClientOptInput clientOptInput = configurator.toClientOptInput();
638+
DefaultGenerator generator = new DefaultGenerator();
639+
640+
generator.opts(clientOptInput).generate();
641+
642+
final Path modelKt = Paths.get(output + "/src/main/kotlin/model/ModelWithIntArrayEnum.kt");
643+
644+
TestUtils.assertFileContains(modelKt, "enum class DaysOfWeek(val value: kotlin.Int)");
645+
}
646+
620647
private static class ModelNameTest {
621648
private final String expectedName;
622649
private final String expectedClassName;
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
openapi: 3.0.0
2+
info:
3+
title: 'Issue 15204 Int Array Enum'
4+
version: latest
5+
paths:
6+
'/':
7+
get:
8+
operationId: operation
9+
responses:
10+
'200':
11+
description: Success
12+
content:
13+
application/json:
14+
schema:
15+
$ref: '#/components/schemas/ModelWithIntArrayEnum'
16+
components:
17+
schemas:
18+
ModelWithIntArrayEnum:
19+
required:
20+
- daysOfWeek
21+
properties:
22+
daysOfWeek:
23+
type: array
24+
items:
25+
type: integer
26+
enum: [0, 1, 2, 3, 4, 5, 6]

0 commit comments

Comments
 (0)