[kotlin] Fix defaultValue in query parameters (#22002)

This commit is contained in:
daberni 2025-09-25 09:02:15 +02:00 committed by GitHub
parent 67b24330c9
commit 5e8dcc9f07
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 72 additions and 12 deletions

View File

@ -1113,6 +1113,22 @@ public class KotlinClientCodegen extends AbstractKotlinCodegen {
return false;
}
@Override
public void postProcessParameter(CodegenParameter parameter) {
super.postProcessParameter(parameter);
adjustEnumRefDefault(parameter);
}
private void adjustEnumRefDefault(CodegenParameter param) {
if (StringUtils.isEmpty(param.defaultValue) || !(param.isEnum || param.isEnumRef)) {
return;
}
String type = StringUtils.defaultIfEmpty(param.datatypeWithEnum, param.dataType);
param.enumDefaultValue = toEnumVarName(param.defaultValue, type);
param.defaultValue = type + "." + param.enumDefaultValue;
}
@Override
public void postProcess() {
System.out.println("################################################################################");

View File

@ -91,6 +91,24 @@ public class KotlinClientCodegenApiTest {
assertFileContainsLine(lines, "suspend fun deletePet(@Path(\"petId\") petId: kotlin.Long, @Header(\"api_key\") apiKey: kotlin.String? = null)" + expectedUnitResponse);
}
@Test
public void testEnumDefaultForReferencedSchemaParameterJvmOkhttp4() throws IOException {
OpenAPI openAPI = readOpenAPI("3_0/kotlin/enum-default-query.yaml");
KotlinClientCodegen codegen = createCodegen(ClientLibrary.JVM_OKHTTP4);
codegen.additionalProperties().put("enumPropertyNaming", "UPPERCASE");
ClientOptInput input = createClientOptInput(openAPI, codegen);
DefaultGenerator generator = new DefaultGenerator();
enableOnlyApiGeneration(generator);
List<File> files = generator.opts(input).generate();
File statusApi = files.stream().filter(file -> file.getName().equals("StatusApi.kt")).findAny().orElseThrow();
assertFileContains(statusApi.toPath(), "state: PetStatus? = PetStatus.AVAILABLE");
}
private static void assertFileContainsLine(List<String> lines, String line) {
Assert.assertListContains(lines, s -> s.equals(line), line);
}

View File

@ -0,0 +1,26 @@
openapi: 3.0.1
info:
title: Enum default test
version: 1.0.0
paths:
/status:
get:
tags:
- Status
operationId: getStatus
parameters:
- name: state
in: query
schema:
$ref: '#/components/schemas/PetStatus'
responses:
'200':
description: OK
components:
schemas:
PetStatus:
type: string
enum:
- available
- pending
default: available

View File

@ -52,13 +52,13 @@ try {
| **pathDefault** | **kotlin.String**| path default | |
| **pathNullable** | **kotlin.String**| path_nullable | |
| **queryDefault** | **kotlin.String**| query default | [optional] [default to &quot;available&quot;] |
| **queryDefaultEnum** | **kotlin.String**| query default enum | [optional] [default to B] [enum: A, B, C] |
| **queryDefaultEnum** | **kotlin.String**| query default enum | [optional] [default to QueryDefaultEnum.B] [enum: A, B, C] |
| **queryDefaultInt** | **java.math.BigDecimal**| query default int | [optional] [default to 3] |
| **headerDefault** | **kotlin.String**| header default | [optional] [default to &quot;available&quot;] |
| **headerDefaultEnum** | **kotlin.String**| header default enum | [optional] [default to B] [enum: A, B, C] |
| **headerDefaultEnum** | **kotlin.String**| header default enum | [optional] [default to HeaderDefaultEnum.B] [enum: A, B, C] |
| **headerDefaultInt** | **java.math.BigDecimal**| header default int | [optional] [default to 3] |
| **cookieDefault** | **kotlin.String**| cookie default | [optional] [default to &quot;available&quot;] |
| **cookieDefaultEnum** | **kotlin.String**| cookie default enum | [optional] [default to B] [enum: A, B, C] |
| **cookieDefaultEnum** | **kotlin.String**| cookie default enum | [optional] [default to CookieDefaultEnum.B] [enum: A, B, C] |
| **cookieDefaultInt** | **java.math.BigDecimal**| cookie default int | [optional] [default to 3] |
| **queryNullable** | **kotlin.String**| query nullable | [optional] |
| **headerNullable** | **kotlin.String**| header nullable | [optional] |

View File

@ -105,13 +105,13 @@ class DefaultApi(basePath: kotlin.String = defaultBasePath, client: Call.Factory
* @param pathDefault path default
* @param pathNullable path_nullable
* @param queryDefault query default (optional, default to "available")
* @param queryDefaultEnum query default enum (optional, default to B)
* @param queryDefaultEnum query default enum (optional, default to QueryDefaultEnum.B)
* @param queryDefaultInt query default int (optional, default to 3)
* @param headerDefault header default (optional, default to "available")
* @param headerDefaultEnum header default enum (optional, default to B)
* @param headerDefaultEnum header default enum (optional, default to HeaderDefaultEnum.B)
* @param headerDefaultInt header default int (optional, default to 3)
* @param cookieDefault cookie default (optional, default to "available")
* @param cookieDefaultEnum cookie default enum (optional, default to B)
* @param cookieDefaultEnum cookie default enum (optional, default to CookieDefaultEnum.B)
* @param cookieDefaultInt cookie default int (optional, default to 3)
* @param queryNullable query nullable (optional)
* @param headerNullable header nullable (optional)
@ -150,13 +150,13 @@ class DefaultApi(basePath: kotlin.String = defaultBasePath, client: Call.Factory
* @param pathDefault path default
* @param pathNullable path_nullable
* @param queryDefault query default (optional, default to "available")
* @param queryDefaultEnum query default enum (optional, default to B)
* @param queryDefaultEnum query default enum (optional, default to QueryDefaultEnum.B)
* @param queryDefaultInt query default int (optional, default to 3)
* @param headerDefault header default (optional, default to "available")
* @param headerDefaultEnum header default enum (optional, default to B)
* @param headerDefaultEnum header default enum (optional, default to HeaderDefaultEnum.B)
* @param headerDefaultInt header default int (optional, default to 3)
* @param cookieDefault cookie default (optional, default to "available")
* @param cookieDefaultEnum cookie default enum (optional, default to B)
* @param cookieDefaultEnum cookie default enum (optional, default to CookieDefaultEnum.B)
* @param cookieDefaultInt cookie default int (optional, default to 3)
* @param queryNullable query nullable (optional)
* @param headerNullable header nullable (optional)
@ -181,13 +181,13 @@ class DefaultApi(basePath: kotlin.String = defaultBasePath, client: Call.Factory
* @param pathDefault path default
* @param pathNullable path_nullable
* @param queryDefault query default (optional, default to "available")
* @param queryDefaultEnum query default enum (optional, default to B)
* @param queryDefaultEnum query default enum (optional, default to QueryDefaultEnum.B)
* @param queryDefaultInt query default int (optional, default to 3)
* @param headerDefault header default (optional, default to "available")
* @param headerDefaultEnum header default enum (optional, default to B)
* @param headerDefaultEnum header default enum (optional, default to HeaderDefaultEnum.B)
* @param headerDefaultInt header default int (optional, default to 3)
* @param cookieDefault cookie default (optional, default to "available")
* @param cookieDefaultEnum cookie default enum (optional, default to B)
* @param cookieDefaultEnum cookie default enum (optional, default to CookieDefaultEnum.B)
* @param cookieDefaultInt cookie default int (optional, default to 3)
* @param queryNullable query nullable (optional)
* @param headerNullable header nullable (optional)