Skip to content

Commit 7ef63e9

Browse files
committed
[kotlin] Fix defaultValue in query parameters
1 parent 20be2de commit 7ef63e9

File tree

5 files changed

+72
-12
lines changed

5 files changed

+72
-12
lines changed

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1114,6 +1114,22 @@ private static boolean isMultipartType(List<Map<String, String>> consumes) {
11141114
return false;
11151115
}
11161116

1117+
@Override
1118+
public void postProcessParameter(CodegenParameter parameter) {
1119+
super.postProcessParameter(parameter);
1120+
adjustEnumRefDefault(parameter);
1121+
}
1122+
1123+
private void adjustEnumRefDefault(CodegenParameter param) {
1124+
if (StringUtils.isEmpty(param.defaultValue) || !(param.isEnum || param.isEnumRef)) {
1125+
return;
1126+
}
1127+
1128+
String type = StringUtils.defaultIfEmpty(param.datatypeWithEnum, param.dataType);
1129+
param.enumDefaultValue = toEnumVarName(param.defaultValue, type);
1130+
param.defaultValue = type + "." + param.enumDefaultValue;
1131+
}
1132+
11171133
@Override
11181134
public void postProcess() {
11191135
System.out.println("################################################################################");

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,24 @@ public void testUseResponseAsReturnType(Object useResponseAsReturnType, String e
9191
assertFileContainsLine(lines, "suspend fun deletePet(@Path(\"petId\") petId: kotlin.Long, @Header(\"api_key\") apiKey: kotlin.String? = null)" + expectedUnitResponse);
9292
}
9393

94+
@Test
95+
public void testEnumDefaultForReferencedSchemaParameterJvmOkhttp4() throws IOException {
96+
OpenAPI openAPI = readOpenAPI("3_0/kotlin/enum-default-query.yaml");
97+
98+
KotlinClientCodegen codegen = createCodegen(ClientLibrary.JVM_OKHTTP4);
99+
codegen.additionalProperties().put("enumPropertyNaming", "UPPERCASE");
100+
101+
ClientOptInput input = createClientOptInput(openAPI, codegen);
102+
103+
DefaultGenerator generator = new DefaultGenerator();
104+
enableOnlyApiGeneration(generator);
105+
106+
List<File> files = generator.opts(input).generate();
107+
File statusApi = files.stream().filter(file -> file.getName().equals("StatusApi.kt")).findAny().orElseThrow();
108+
109+
assertFileContains(statusApi.toPath(), "state: PetStatus? = PetStatus.AVAILABLE");
110+
}
111+
94112
private static void assertFileContainsLine(List<String> lines, String line) {
95113
Assert.assertListContains(lines, s -> s.equals(line), line);
96114
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
openapi: 3.0.1
2+
info:
3+
title: Enum default test
4+
version: 1.0.0
5+
paths:
6+
/status:
7+
get:
8+
tags:
9+
- Status
10+
operationId: getStatus
11+
parameters:
12+
- name: state
13+
in: query
14+
schema:
15+
$ref: '#/components/schemas/PetStatus'
16+
responses:
17+
'200':
18+
description: OK
19+
components:
20+
schemas:
21+
PetStatus:
22+
type: string
23+
enum:
24+
- available
25+
- pending
26+
default: available

samples/client/others/kotlin-jvm-okhttp-parameter-tests/docs/DefaultApi.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,13 @@ try {
5252
| **pathDefault** | **kotlin.String**| path default | |
5353
| **pathNullable** | **kotlin.String**| path_nullable | |
5454
| **queryDefault** | **kotlin.String**| query default | [optional] [default to &quot;available&quot;] |
55-
| **queryDefaultEnum** | **kotlin.String**| query default enum | [optional] [default to B] [enum: A, B, C] |
55+
| **queryDefaultEnum** | **kotlin.String**| query default enum | [optional] [default to QueryDefaultEnum.B] [enum: A, B, C] |
5656
| **queryDefaultInt** | **java.math.BigDecimal**| query default int | [optional] [default to 3] |
5757
| **headerDefault** | **kotlin.String**| header default | [optional] [default to &quot;available&quot;] |
58-
| **headerDefaultEnum** | **kotlin.String**| header default enum | [optional] [default to B] [enum: A, B, C] |
58+
| **headerDefaultEnum** | **kotlin.String**| header default enum | [optional] [default to HeaderDefaultEnum.B] [enum: A, B, C] |
5959
| **headerDefaultInt** | **java.math.BigDecimal**| header default int | [optional] [default to 3] |
6060
| **cookieDefault** | **kotlin.String**| cookie default | [optional] [default to &quot;available&quot;] |
61-
| **cookieDefaultEnum** | **kotlin.String**| cookie default enum | [optional] [default to B] [enum: A, B, C] |
61+
| **cookieDefaultEnum** | **kotlin.String**| cookie default enum | [optional] [default to CookieDefaultEnum.B] [enum: A, B, C] |
6262
| **cookieDefaultInt** | **java.math.BigDecimal**| cookie default int | [optional] [default to 3] |
6363
| **queryNullable** | **kotlin.String**| query nullable | [optional] |
6464
| **headerNullable** | **kotlin.String**| header nullable | [optional] |

samples/client/others/kotlin-jvm-okhttp-parameter-tests/src/main/kotlin/org/openapitools/client/apis/DefaultApi.kt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -105,13 +105,13 @@ class DefaultApi(basePath: kotlin.String = defaultBasePath, client: Call.Factory
105105
* @param pathDefault path default
106106
* @param pathNullable path_nullable
107107
* @param queryDefault query default (optional, default to "available")
108-
* @param queryDefaultEnum query default enum (optional, default to B)
108+
* @param queryDefaultEnum query default enum (optional, default to QueryDefaultEnum.B)
109109
* @param queryDefaultInt query default int (optional, default to 3)
110110
* @param headerDefault header default (optional, default to "available")
111-
* @param headerDefaultEnum header default enum (optional, default to B)
111+
* @param headerDefaultEnum header default enum (optional, default to HeaderDefaultEnum.B)
112112
* @param headerDefaultInt header default int (optional, default to 3)
113113
* @param cookieDefault cookie default (optional, default to "available")
114-
* @param cookieDefaultEnum cookie default enum (optional, default to B)
114+
* @param cookieDefaultEnum cookie default enum (optional, default to CookieDefaultEnum.B)
115115
* @param cookieDefaultInt cookie default int (optional, default to 3)
116116
* @param queryNullable query nullable (optional)
117117
* @param headerNullable header nullable (optional)
@@ -150,13 +150,13 @@ class DefaultApi(basePath: kotlin.String = defaultBasePath, client: Call.Factory
150150
* @param pathDefault path default
151151
* @param pathNullable path_nullable
152152
* @param queryDefault query default (optional, default to "available")
153-
* @param queryDefaultEnum query default enum (optional, default to B)
153+
* @param queryDefaultEnum query default enum (optional, default to QueryDefaultEnum.B)
154154
* @param queryDefaultInt query default int (optional, default to 3)
155155
* @param headerDefault header default (optional, default to "available")
156-
* @param headerDefaultEnum header default enum (optional, default to B)
156+
* @param headerDefaultEnum header default enum (optional, default to HeaderDefaultEnum.B)
157157
* @param headerDefaultInt header default int (optional, default to 3)
158158
* @param cookieDefault cookie default (optional, default to "available")
159-
* @param cookieDefaultEnum cookie default enum (optional, default to B)
159+
* @param cookieDefaultEnum cookie default enum (optional, default to CookieDefaultEnum.B)
160160
* @param cookieDefaultInt cookie default int (optional, default to 3)
161161
* @param queryNullable query nullable (optional)
162162
* @param headerNullable header nullable (optional)
@@ -181,13 +181,13 @@ class DefaultApi(basePath: kotlin.String = defaultBasePath, client: Call.Factory
181181
* @param pathDefault path default
182182
* @param pathNullable path_nullable
183183
* @param queryDefault query default (optional, default to "available")
184-
* @param queryDefaultEnum query default enum (optional, default to B)
184+
* @param queryDefaultEnum query default enum (optional, default to QueryDefaultEnum.B)
185185
* @param queryDefaultInt query default int (optional, default to 3)
186186
* @param headerDefault header default (optional, default to "available")
187-
* @param headerDefaultEnum header default enum (optional, default to B)
187+
* @param headerDefaultEnum header default enum (optional, default to HeaderDefaultEnum.B)
188188
* @param headerDefaultInt header default int (optional, default to 3)
189189
* @param cookieDefault cookie default (optional, default to "available")
190-
* @param cookieDefaultEnum cookie default enum (optional, default to B)
190+
* @param cookieDefaultEnum cookie default enum (optional, default to CookieDefaultEnum.B)
191191
* @param cookieDefaultInt cookie default int (optional, default to 3)
192192
* @param queryNullable query nullable (optional)
193193
* @param headerNullable header nullable (optional)

0 commit comments

Comments
 (0)