forked from loafle/openapi-generator-original
Added fix for wrongly encoded backticks when generating kotlin client with reserved words as part of the parameters. Wrote a test verifying that the method signatures is without html encoding for backticks (#11310)
This commit is contained in:
committed by
GitHub
parent
6430aaf3b1
commit
692a4db964
@@ -129,7 +129,7 @@ import {{packageName}}.infrastructure.toMultiValue
|
||||
{{#isDeprecated}}
|
||||
@Deprecated(message = "This operation is deprecated.")
|
||||
{{/isDeprecated}}
|
||||
{{^doNotUseRxAndCoroutines}}{{#useCoroutines}}suspend {{/useCoroutines}}{{/doNotUseRxAndCoroutines}}fun {{operationId}}({{#allParams}}{{paramName}}: {{#isEnum}}{{#isContainer}}kotlin.collections.List<{{enumName}}_{{operationId}}>{{/isContainer}}{{^isContainer}}{{enumName}}_{{operationId}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}?{{/required}}{{^-last}}, {{/-last}}{{/allParams}}) : {{#returnType}}{{{returnType}}}{{#nullableReturnType}}?{{/nullableReturnType}}{{/returnType}}{{^returnType}}Unit{{/returnType}}{{^doNotUseRxAndCoroutines}}{{#useCoroutines}} = withContext(Dispatchers.IO){{/useCoroutines}}{{/doNotUseRxAndCoroutines}} {
|
||||
{{^doNotUseRxAndCoroutines}}{{#useCoroutines}}suspend {{/useCoroutines}}{{/doNotUseRxAndCoroutines}}fun {{operationId}}({{#allParams}}{{{paramName}}}: {{#isEnum}}{{#isContainer}}kotlin.collections.List<{{enumName}}_{{operationId}}>{{/isContainer}}{{^isContainer}}{{enumName}}_{{operationId}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}?{{/required}}{{^-last}}, {{/-last}}{{/allParams}}) : {{#returnType}}{{{returnType}}}{{#nullableReturnType}}?{{/nullableReturnType}}{{/returnType}}{{^returnType}}Unit{{/returnType}}{{^doNotUseRxAndCoroutines}}{{#useCoroutines}} = withContext(Dispatchers.IO){{/useCoroutines}}{{/doNotUseRxAndCoroutines}} {
|
||||
{{#isDeprecated}}
|
||||
@Suppress("DEPRECATION")
|
||||
{{/isDeprecated}}
|
||||
@@ -163,7 +163,7 @@ import {{packageName}}.infrastructure.toMultiValue
|
||||
{{#isDeprecated}}
|
||||
@Deprecated(message = "This operation is deprecated.")
|
||||
{{/isDeprecated}}
|
||||
{{^doNotUseRxAndCoroutines}}{{#useCoroutines}}suspend {{/useCoroutines}}{{/doNotUseRxAndCoroutines}}fun {{operationId}}WithHttpInfo({{#allParams}}{{paramName}}: {{#isEnum}}{{#isContainer}}kotlin.collections.List<{{enumName}}_{{operationId}}>{{/isContainer}}{{^isContainer}}{{enumName}}_{{operationId}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}?{{/required}}{{^-last}}, {{/-last}}{{/allParams}}) : ApiResponse<{{#returnType}}{{{returnType}}}?{{/returnType}}{{^returnType}}Unit?{{/returnType}}>{{^doNotUseRxAndCoroutines}}{{#useCoroutines}} = withContext(Dispatchers.IO){{/useCoroutines}}{{/doNotUseRxAndCoroutines}} {
|
||||
{{^doNotUseRxAndCoroutines}}{{#useCoroutines}}suspend {{/useCoroutines}}{{/doNotUseRxAndCoroutines}}fun {{operationId}}WithHttpInfo({{#allParams}}{{{paramName}}}: {{#isEnum}}{{#isContainer}}kotlin.collections.List<{{enumName}}_{{operationId}}>{{/isContainer}}{{^isContainer}}{{enumName}}_{{operationId}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}?{{/required}}{{^-last}}, {{/-last}}{{/allParams}}) : ApiResponse<{{#returnType}}{{{returnType}}}?{{/returnType}}{{^returnType}}Unit?{{/returnType}}>{{^doNotUseRxAndCoroutines}}{{#useCoroutines}} = withContext(Dispatchers.IO){{/useCoroutines}}{{/doNotUseRxAndCoroutines}} {
|
||||
{{#isDeprecated}}
|
||||
@Suppress("DEPRECATION")
|
||||
{{/isDeprecated}}
|
||||
@@ -183,7 +183,7 @@ import {{packageName}}.infrastructure.toMultiValue
|
||||
{{#isDeprecated}}
|
||||
@Deprecated(message = "This operation is deprecated.")
|
||||
{{/isDeprecated}}
|
||||
fun {{operationId}}RequestConfig({{#allParams}}{{paramName}}: {{#isEnum}}{{#isContainer}}kotlin.collections.List<{{enumName}}_{{operationId}}>{{/isContainer}}{{^isContainer}}{{enumName}}_{{operationId}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}?{{/required}}{{^-last}}, {{/-last}}{{/allParams}}) : RequestConfig<{{#hasBodyParam}}{{#bodyParams}}{{{dataType}}}{{/bodyParams}}{{/hasBodyParam}}{{^hasBodyParam}}{{^hasFormParams}}Unit{{/hasFormParams}}{{#hasFormParams}}Map<String, Any?>{{/hasFormParams}}{{/hasBodyParam}}> {
|
||||
fun {{operationId}}RequestConfig({{#allParams}}{{{paramName}}}: {{#isEnum}}{{#isContainer}}kotlin.collections.List<{{enumName}}_{{operationId}}>{{/isContainer}}{{^isContainer}}{{enumName}}_{{operationId}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}?{{/required}}{{^-last}}, {{/-last}}{{/allParams}}) : RequestConfig<{{#hasBodyParam}}{{#bodyParams}}{{{dataType}}}{{/bodyParams}}{{/hasBodyParam}}{{^hasBodyParam}}{{^hasFormParams}}Unit{{/hasFormParams}}{{#hasFormParams}}Map<String, Any?>{{/hasFormParams}}{{/hasBodyParam}}> {
|
||||
val localVariableBody = {{#hasBodyParam}}{{#bodyParams}}{{{paramName}}}{{/bodyParams}}{{/hasBodyParam}}{{^hasBodyParam}}{{^hasFormParams}}null{{/hasFormParams}}{{#hasFormParams}}mapOf({{#formParams}}"{{{baseName}}}" to {{{paramName}}}{{^-last}}, {{/-last}}{{/formParams}}){{/hasFormParams}}{{/hasBodyParam}}
|
||||
val localVariableQuery: MultiValueMap = {{^hasQueryParams}}mutableMapOf()
|
||||
{{/hasQueryParams}}{{#hasQueryParams}}mutableMapOf<kotlin.String, kotlin.collections.List<kotlin.String>>()
|
||||
|
||||
@@ -10,8 +10,13 @@ import org.openapitools.codegen.utils.StringUtils;
|
||||
import org.testng.annotations.DataProvider;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import java.io.File;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.HashSet;
|
||||
|
||||
import static org.openapitools.codegen.TestUtils.assertFileContains;
|
||||
import static org.openapitools.codegen.TestUtils.assertFileNotContains;
|
||||
import static org.testng.Assert.assertEquals;
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
@@ -51,7 +56,8 @@ public class KotlinReservedWordsTest {
|
||||
{"while"},
|
||||
{"open"},
|
||||
{"external"},
|
||||
{"internal"}
|
||||
{"internal"},
|
||||
{"value"}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -128,4 +134,32 @@ public class KotlinReservedWordsTest {
|
||||
assertEquals(property.baseName, reservedWord);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void reservedWordsInGeneratedCode() throws Exception {
|
||||
String baseApiPackage = "/org/openapitools/client/apis/";
|
||||
File output = Files.createTempDirectory("test").toFile().getCanonicalFile(); //may be move to /build
|
||||
OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/bugs/issue_11304_kotlin_backticks_reserved_words.yaml");
|
||||
|
||||
KotlinClientCodegen codegen = new KotlinClientCodegen();
|
||||
codegen.setOutputDir(output.getAbsolutePath());
|
||||
|
||||
ClientOptInput input = new ClientOptInput();
|
||||
input.openAPI(openAPI);
|
||||
input.config(codegen);
|
||||
|
||||
DefaultGenerator generator = new DefaultGenerator();
|
||||
generator.opts(input).generate();
|
||||
|
||||
File resultSourcePath = new File(output, "src/main/kotlin");
|
||||
|
||||
assertFileContains(Paths.get(resultSourcePath.getAbsolutePath() + baseApiPackage + "DefaultApi.kt"),
|
||||
"fun test(`value`: kotlin.String) : Unit {",
|
||||
"fun testWithHttpInfo(`value`: kotlin.String) : ApiResponse<Unit?> {",
|
||||
"fun testRequestConfig(`value`: kotlin.String) : RequestConfig<Unit> {"
|
||||
);
|
||||
|
||||
assertFileNotContains(Paths.get(resultSourcePath.getAbsolutePath() + baseApiPackage + "DefaultApi.kt"),
|
||||
"`"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -108,6 +108,10 @@ paths:
|
||||
in: header
|
||||
schema:
|
||||
type: string
|
||||
- name: value
|
||||
in: header
|
||||
schema:
|
||||
type: string
|
||||
- name: var
|
||||
in: header
|
||||
schema:
|
||||
@@ -192,6 +196,8 @@ components:
|
||||
type: string
|
||||
val:
|
||||
type: string
|
||||
value:
|
||||
type: string
|
||||
var:
|
||||
type: string
|
||||
when:
|
||||
@@ -261,6 +267,8 @@ components:
|
||||
$ref: '#/components/schemas/typeof'
|
||||
val:
|
||||
$ref: '#/components/schemas/val'
|
||||
value:
|
||||
$ref: '#/components/schemas/value'
|
||||
var:
|
||||
$ref: '#/components/schemas/var'
|
||||
when:
|
||||
@@ -473,6 +481,14 @@ components:
|
||||
type: integer
|
||||
format: int64
|
||||
|
||||
value:
|
||||
title: Testing reserved word 'value'
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: integer
|
||||
format: int64
|
||||
|
||||
var:
|
||||
title: Testing reserved word 'var'
|
||||
type: object
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
openapi: 3.0.3
|
||||
info:
|
||||
title: Kotlin Issue
|
||||
version: "1.0"
|
||||
|
||||
servers:
|
||||
- url: "http://localhost"
|
||||
|
||||
paths:
|
||||
/test/{value}:
|
||||
post:
|
||||
summary: test
|
||||
operationId: test
|
||||
parameters:
|
||||
- name: value
|
||||
in: path
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
example: something
|
||||
responses:
|
||||
'200':
|
||||
description: OK
|
||||
Reference in New Issue
Block a user