forked from loafle/openapi-generator-original
This commit is contained in:
parent
52610e026e
commit
eb92eeb32e
@ -134,7 +134,7 @@ import com.fasterxml.jackson.databind.ObjectMapper
|
|||||||
|
|
||||||
val localVariableConfig = RequestConfig<kotlin.Any?>(
|
val localVariableConfig = RequestConfig<kotlin.Any?>(
|
||||||
RequestMethod.{{httpMethod}},
|
RequestMethod.{{httpMethod}},
|
||||||
"{{path}}"{{#pathParams}}.replace("{" + "{{baseName}}" + "}", "${{{paramName}}}"){{/pathParams}},
|
"{{{path}}}"{{#pathParams}}.replace("{" + "{{baseName}}" + "}", "${{{paramName}}}"){{/pathParams}},
|
||||||
query = localVariableQuery,
|
query = localVariableQuery,
|
||||||
headers = localVariableHeaders,
|
headers = localVariableHeaders,
|
||||||
requiresAuthentication = {{#hasAuthMethods}}true{{/hasAuthMethods}}{{^hasAuthMethods}}false{{/hasAuthMethods}},
|
requiresAuthentication = {{#hasAuthMethods}}true{{/hasAuthMethods}}{{^hasAuthMethods}}false{{/hasAuthMethods}},
|
||||||
|
@ -232,7 +232,7 @@ import {{packageName}}.infrastructure.toMultiValue
|
|||||||
|
|
||||||
return RequestConfig(
|
return RequestConfig(
|
||||||
method = RequestMethod.{{httpMethod}},
|
method = RequestMethod.{{httpMethod}},
|
||||||
path = "{{path}}"{{#pathParams}}.replace("{"+"{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"+"}", encodeURIComponent({{#isContainer}}{{paramName}}.joinToString(","){{/isContainer}}{{^isContainer}}{{{paramName}}}{{#isEnum}}{{^required}}?{{/required}}.value{{/isEnum}}.toString(){{/isContainer}})){{/pathParams}},
|
path = "{{{path}}}"{{#pathParams}}.replace("{"+"{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"+"}", encodeURIComponent({{#isContainer}}{{paramName}}.joinToString(","){{/isContainer}}{{^isContainer}}{{{paramName}}}{{#isEnum}}{{^required}}?{{/required}}.value{{/isEnum}}.toString(){{/isContainer}})){{/pathParams}},
|
||||||
query = localVariableQuery,
|
query = localVariableQuery,
|
||||||
headers = localVariableHeaders,
|
headers = localVariableHeaders,
|
||||||
requiresAuthentication = {{#hasAuthMethods}}true{{/hasAuthMethods}}{{^hasAuthMethods}}false{{/hasAuthMethods}},
|
requiresAuthentication = {{#hasAuthMethods}}true{{/hasAuthMethods}}{{^hasAuthMethods}}false{{/hasAuthMethods}},
|
||||||
|
@ -133,7 +133,7 @@ import {{packageName}}.infrastructure.*
|
|||||||
|
|
||||||
return RequestConfig(
|
return RequestConfig(
|
||||||
method = RequestMethod.{{httpMethod}},
|
method = RequestMethod.{{httpMethod}},
|
||||||
path = "{{path}}",
|
path = "{{{path}}}",
|
||||||
params = params,
|
params = params,
|
||||||
query = localVariableQuery,
|
query = localVariableQuery,
|
||||||
headers = localVariableHeaders,
|
headers = localVariableHeaders,
|
||||||
|
@ -135,7 +135,7 @@ import {{packageName}}.infrastructure.*
|
|||||||
|
|
||||||
return RequestConfig(
|
return RequestConfig(
|
||||||
method = RequestMethod.{{httpMethod}},
|
method = RequestMethod.{{httpMethod}},
|
||||||
path = "{{path}}",
|
path = "{{{path}}}",
|
||||||
params = params,
|
params = params,
|
||||||
query = localVariableQuery,
|
query = localVariableQuery,
|
||||||
headers = localVariableHeaders,
|
headers = localVariableHeaders,
|
||||||
|
@ -136,7 +136,7 @@ import {{packageName}}.infrastructure.*
|
|||||||
{{/isDeprecated}}
|
{{/isDeprecated}}
|
||||||
fun {{operationId}}WithHttpInfo({{#allParams}}{{{paramName}}}: {{#isEnum}}{{#isContainer}}kotlin.collections.List<{{enumName}}{{operationIdCamelCase}}>{{/isContainer}}{{^isContainer}}{{enumName}}{{operationIdCamelCase}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}?{{/required}}{{^-last}}, {{/-last}}{{/allParams}}) : Future<ApiResponse<{{#returnType}}{{{returnType}}}?{{/returnType}}{{^returnType}}Unit?{{/returnType}}>> {
|
fun {{operationId}}WithHttpInfo({{#allParams}}{{{paramName}}}: {{#isEnum}}{{#isContainer}}kotlin.collections.List<{{enumName}}{{operationIdCamelCase}}>{{/isContainer}}{{^isContainer}}{{enumName}}{{operationIdCamelCase}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}?{{/required}}{{^-last}}, {{/-last}}{{/allParams}}) : Future<ApiResponse<{{#returnType}}{{{returnType}}}?{{/returnType}}{{^returnType}}Unit?{{/returnType}}>> {
|
||||||
val vertxClient = WebClient.create(vertx)
|
val vertxClient = WebClient.create(vertx)
|
||||||
val request = vertxClient.requestAbs(HttpMethod.{{httpMethod}}, UriTemplate.of("$basePath{{path}}"{{#pathParams}}.replace("{"+"{{baseName}}"+"}", encodeURIComponent({{#isContainer}}{{paramName}}.joinToString(","){{/isContainer}}{{^isContainer}}{{{paramName}}}{{#isEnum}}{{^required}}?{{/required}}.value{{/isEnum}}.toString(){{/isContainer}})){{/pathParams}}))
|
val request = vertxClient.requestAbs(HttpMethod.{{httpMethod}}, UriTemplate.of("$basePath{{{path}}}"{{#pathParams}}.replace("{"+"{{baseName}}"+"}", encodeURIComponent({{#isContainer}}{{paramName}}.joinToString(","){{/isContainer}}{{^isContainer}}{{{paramName}}}{{#isEnum}}{{^required}}?{{/required}}.value{{/isEnum}}.toString(){{/isContainer}})){{/pathParams}}))
|
||||||
|
|
||||||
{{#hasFormParams}}request.putHeader("Content-Type", {{^consumes}}"multipart/form-data"{{/consumes}}{{#consumes.0}}"{{{mediaType}}}"{{/consumes.0}}){{/hasFormParams}}
|
{{#hasFormParams}}request.putHeader("Content-Type", {{^consumes}}"multipart/form-data"{{/consumes}}{{#consumes.0}}"{{{mediaType}}}"{{/consumes.0}}){{/hasFormParams}}
|
||||||
{{#headerParams}}{{{paramName}}}{{^required}}?{{/required}}.apply { request.putHeader("{{baseName}}", {{#isContainer}}this.joinToString(separator = collectionDelimiter("{{collectionFormat}}")){{/isContainer}}{{^isContainer}}this.toString(){{/isContainer}})}{{/headerParams}}
|
{{#headerParams}}{{{paramName}}}{{^required}}?{{/required}}.apply { request.putHeader("{{baseName}}", {{#isContainer}}this.joinToString(separator = collectionDelimiter("{{collectionFormat}}")){{/isContainer}}{{^isContainer}}this.toString(){{/isContainer}})}{{/headerParams}}
|
||||||
|
@ -105,7 +105,7 @@ import kotlinx.serialization.encoding.*
|
|||||||
|
|
||||||
val localVariableConfig = RequestConfig<kotlin.Any?>(
|
val localVariableConfig = RequestConfig<kotlin.Any?>(
|
||||||
RequestMethod.{{httpMethod}},
|
RequestMethod.{{httpMethod}},
|
||||||
"{{path}}"{{#pathParams}}.replace("{" + "{{baseName}}" + "}", {{#isContainer}}{{paramName}}.joinToString(","){{/isContainer}}{{^isContainer}}{{^isEnum}}"${{{paramName}}}"{{/isEnum}}{{#isEnum}}"${ {{paramName}}.value }"{{/isEnum}}{{/isContainer}}){{/pathParams}},
|
"{{{path}}}"{{#pathParams}}.replace("{" + "{{baseName}}" + "}", {{#isContainer}}{{paramName}}.joinToString(","){{/isContainer}}{{^isContainer}}{{^isEnum}}"${{{paramName}}}"{{/isEnum}}{{#isEnum}}"${ {{paramName}}.value }"{{/isEnum}}{{/isContainer}}){{/pathParams}},
|
||||||
query = localVariableQuery,
|
query = localVariableQuery,
|
||||||
headers = localVariableHeaders,
|
headers = localVariableHeaders,
|
||||||
requiresAuthentication = {{#hasAuthMethods}}true{{/hasAuthMethods}}{{^hasAuthMethods}}false{{/hasAuthMethods}},
|
requiresAuthentication = {{#hasAuthMethods}}true{{/hasAuthMethods}}{{^hasAuthMethods}}false{{/hasAuthMethods}},
|
||||||
|
@ -0,0 +1,104 @@
|
|||||||
|
package org.openapitools.codegen.kotlin;
|
||||||
|
|
||||||
|
import io.swagger.parser.OpenAPIParser;
|
||||||
|
import io.swagger.v3.oas.models.OpenAPI;
|
||||||
|
import io.swagger.v3.parser.core.models.ParseOptions;
|
||||||
|
import lombok.Getter;
|
||||||
|
import org.jetbrains.kotlin.com.intellij.openapi.util.text.Strings;
|
||||||
|
import org.openapitools.codegen.ClientOptInput;
|
||||||
|
import org.openapitools.codegen.CodegenConstants;
|
||||||
|
import org.openapitools.codegen.DefaultGenerator;
|
||||||
|
import org.openapitools.codegen.languages.KotlinClientCodegen;
|
||||||
|
import org.openapitools.codegen.languages.features.CXFServerFeatures;
|
||||||
|
import org.testng.annotations.DataProvider;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
|
||||||
|
import static org.openapitools.codegen.TestUtils.assertFileContains;
|
||||||
|
|
||||||
|
public class KotlinClientCodegenApiTest {
|
||||||
|
|
||||||
|
@DataProvider(name = "pathResponses")
|
||||||
|
public Object[][] pathResponses() {
|
||||||
|
return new Object[][]{
|
||||||
|
{ClientLibrary.JVM_KTOR},
|
||||||
|
{ClientLibrary.JVM_OKHTTP4},
|
||||||
|
{ClientLibrary.JVM_SPRING_WEBCLIENT},
|
||||||
|
{ClientLibrary.JVM_SPRING_RESTCLIENT},
|
||||||
|
{ClientLibrary.JVM_RETROFIT2},
|
||||||
|
{ClientLibrary.MULTIPLATFORM},
|
||||||
|
{ClientLibrary.JVM_VOLLEY},
|
||||||
|
{ClientLibrary.JVM_VERTX}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(dataProvider = "pathResponses")
|
||||||
|
void testPathVariableIsNotEscaped_19930(ClientLibrary library) throws IOException {
|
||||||
|
|
||||||
|
OpenAPI openAPI = new OpenAPIParser()
|
||||||
|
.readLocation("src/test/resources/3_0/kotlin/issue19930-path-escaping.json", null, new ParseOptions()).getOpenAPI();
|
||||||
|
|
||||||
|
KotlinClientCodegen codegen = createCodegen(library);
|
||||||
|
|
||||||
|
String outputPath = codegen.getOutputDir().replace('\\', '/');
|
||||||
|
ClientOptInput input = new ClientOptInput();
|
||||||
|
input.openAPI(openAPI);
|
||||||
|
input.config(codegen);
|
||||||
|
|
||||||
|
DefaultGenerator generator = new DefaultGenerator();
|
||||||
|
|
||||||
|
generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "false");
|
||||||
|
generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false");
|
||||||
|
generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false");
|
||||||
|
generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true");
|
||||||
|
generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false");
|
||||||
|
|
||||||
|
generator.opts(input).generate();
|
||||||
|
|
||||||
|
System.out.println(outputPath);
|
||||||
|
|
||||||
|
assertFileContains(Paths.get(outputPath + "/src/" + library.getSourceRoot() + "/org/openapitools/client/apis/ArticleApi.kt"), "article('{Id}')");
|
||||||
|
}
|
||||||
|
|
||||||
|
private KotlinClientCodegen createCodegen(ClientLibrary library) throws IOException {
|
||||||
|
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
|
||||||
|
output.deleteOnExit();
|
||||||
|
KotlinClientCodegen codegen = new KotlinClientCodegen();
|
||||||
|
codegen.setLibrary(library.getLibraryName());
|
||||||
|
codegen.setOutputDir(output.getAbsolutePath());
|
||||||
|
codegen.setSerializationLibrary(library.getSerializationLibrary());
|
||||||
|
codegen.additionalProperties().put(CXFServerFeatures.LOAD_TEST_DATA_FROM_FILE, "true");
|
||||||
|
codegen.additionalProperties().put(KotlinClientCodegen.USE_SPRING_BOOT3, "true");
|
||||||
|
codegen.additionalProperties().put(KotlinClientCodegen.DATE_LIBRARY, "kotlinx-datetime");
|
||||||
|
return codegen;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private enum ClientLibrary {
|
||||||
|
JVM_KTOR("main/kotlin"),
|
||||||
|
JVM_OKHTTP4("main/kotlin"),
|
||||||
|
JVM_SPRING_WEBCLIENT("main/kotlin"),
|
||||||
|
JVM_SPRING_RESTCLIENT("main/kotlin"),
|
||||||
|
JVM_RETROFIT2("main/kotlin"),
|
||||||
|
MULTIPLATFORM("commonMain/kotlin"),
|
||||||
|
JVM_VOLLEY("gson", "main/java"),
|
||||||
|
JVM_VERTX("main/kotlin");
|
||||||
|
private final String serializationLibrary;
|
||||||
|
private final String libraryName;
|
||||||
|
private final String sourceRoot;
|
||||||
|
|
||||||
|
ClientLibrary(String serializationLibrary, String sourceRoot) {
|
||||||
|
this.serializationLibrary = serializationLibrary;
|
||||||
|
this.sourceRoot = sourceRoot;
|
||||||
|
this.libraryName = Strings.toLowerCase(this.name()).replace("_", "-");
|
||||||
|
}
|
||||||
|
|
||||||
|
ClientLibrary(String sourceRoot) {
|
||||||
|
this("jackson", sourceRoot);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"openapi": "3.0.1",
|
||||||
|
"info": {
|
||||||
|
"title": "",
|
||||||
|
"description": "",
|
||||||
|
"version": "1.0.0"
|
||||||
|
},
|
||||||
|
"servers": [
|
||||||
|
{
|
||||||
|
"url": "https://localhost:8080"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"paths": {
|
||||||
|
"/article('{Id}')": {
|
||||||
|
"get": {
|
||||||
|
"tags": [
|
||||||
|
"Article"
|
||||||
|
],
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"name": "Id",
|
||||||
|
"in": "path",
|
||||||
|
"description": "key: Id of Article",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "Retrieved entity",
|
||||||
|
"content": {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user