Skip to content

Commit adbbe4e

Browse files
[bug][kotlin-spring] fix allowableValues quotes in documentation annotations for path parameters
1 parent f6de5b7 commit adbbe4e

3 files changed

Lines changed: 69 additions & 2 deletions

File tree

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{{#isPathParam}}{{#useBeanValidation}}{{>beanValidationPathParams}}{{/useBeanValidation}}{{#swagger2AnnotationLibrary}}@Parameter(description = "{{{description}}}"{{#required}}, required = true{{/required}}{{#allowableValues}}{{#defaultValue}}, schema = Schema(allowableValues = [{{#enumVars}}"{{#lambdaEscapeInNormalString}}{{{value}}}{{/lambdaEscapeInNormalString}}"{{^-last}}, {{/-last}}{{/enumVars}}]{{^isContainer}}, defaultValue = {{^isString}}"{{/isString}}{{#isString}}{{#isEnum}}"{{/isEnum}}{{/isString}}{{{defaultValue}}}{{^isString}}"{{/isString}}{{#isString}}{{#isEnum}}"{{/isEnum}}{{/isString}}{{/isContainer}}){{/defaultValue}}{{/allowableValues}}{{#allowableValues}}{{^defaultValue}}, schema = Schema(allowableValues = [{{#enumVars}}"{{#lambdaEscapeInNormalString}}{{{value}}}{{/lambdaEscapeInNormalString}}"{{^-last}}, {{/-last}}{{/enumVars}}]){{/defaultValue}}{{/allowableValues}}{{^allowableValues}}{{#defaultValue}}{{^isContainer}}, schema = Schema(defaultValue = {{^isString}}"{{/isString}}{{#isString}}{{#isEnum}}"{{/isEnum}}{{/isString}}{{{defaultValue}}}{{^isString}}"{{/isString}}{{#isString}}{{#isEnum}}"{{/isEnum}}{{/isString}}){{/isContainer}}{{/defaultValue}}{{/allowableValues}}){{/swagger2AnnotationLibrary}}{{#swagger1AnnotationLibrary}}@ApiParam(value = "{{{description}}}"{{#required}}, required = true{{/required}}{{#allowableValues}}, allowableValues = "{{#enumVars}}{{#lambda.escapeDoubleQuote}}{{{value}}}{{/lambda.escapeDoubleQuote}}{{^-last}}, {{/-last}}{{/enumVars}}"{{/allowableValues}}{{#defaultValue}}, defaultValue = "{{{.}}}"{{/defaultValue}}){{/swagger1AnnotationLibrary}} @PathVariable("{{baseName}}") {{{paramName}}}: {{>optionalDataType}}{{/isPathParam}}
1+
{{#isPathParam}}{{#useBeanValidation}}{{>beanValidationPathParams}}{{/useBeanValidation}}{{#swagger2AnnotationLibrary}}@Parameter(description = "{{{description}}}"{{#required}}, required = true{{/required}}{{#allowableValues}}{{#defaultValue}}, schema = Schema(allowableValues = [{{#values}}"{{{.}}}"{{^-last}}, {{/-last}}{{/values}}]{{^isContainer}}, defaultValue = {{^isString}}"{{/isString}}{{#isString}}{{#isEnum}}"{{/isEnum}}{{/isString}}{{{defaultValue}}}{{^isString}}"{{/isString}}{{#isString}}{{#isEnum}}"{{/isEnum}}{{/isString}}{{/isContainer}}){{/defaultValue}}{{/allowableValues}}{{#allowableValues}}{{^defaultValue}}, schema = Schema(allowableValues = [{{#values}}"{{{.}}}"{{^-last}}, {{/-last}}{{/values}}]){{/defaultValue}}{{/allowableValues}}{{^allowableValues}}{{#defaultValue}}{{^isContainer}}, schema = Schema(defaultValue = {{^isString}}"{{/isString}}{{#isString}}{{#isEnum}}"{{/isEnum}}{{/isString}}{{{defaultValue}}}{{^isString}}"{{/isString}}{{#isString}}{{#isEnum}}"{{/isEnum}}{{/isString}}){{/isContainer}}{{/defaultValue}}{{/allowableValues}}){{/swagger2AnnotationLibrary}}{{#swagger1AnnotationLibrary}}@ApiParam(value = "{{{description}}}"{{#required}}, required = true{{/required}}{{#allowableValues}}, allowableValues = [{{#values}}"{{{.}}}"{{^-last}}, {{/-last}}{{/values}}]{{/allowableValues}}{{#defaultValue}}, defaultValue = "{{{.}}}"{{/defaultValue}}){{/swagger1AnnotationLibrary}} @PathVariable("{{baseName}}") {{{paramName}}}: {{>optionalDataType}}{{/isPathParam}}

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

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import io.swagger.v3.parser.core.models.ParseOptions;
88
import java.util.HashMap;
99
import java.util.function.Consumer;
10+
import java.util.stream.Stream;
1011
import org.apache.commons.io.FileUtils;
1112
import org.assertj.core.api.Assertions;
1213
import org.jetbrains.annotations.NotNull;
@@ -18,10 +19,13 @@
1819
import org.openapitools.codegen.java.assertions.JavaFileAssert;
1920
import org.openapitools.codegen.kotlin.KotlinTestUtils;
2021
import org.openapitools.codegen.languages.KotlinSpringServerCodegen;
22+
import org.openapitools.codegen.languages.SpringCodegen;
2123
import org.openapitools.codegen.languages.features.CXFServerFeatures;
24+
import org.openapitools.codegen.languages.features.DocumentationProviderFeatures;
2225
import org.openapitools.codegen.languages.features.DocumentationProviderFeatures.AnnotationLibrary;
2326
import org.openapitools.codegen.languages.features.DocumentationProviderFeatures.DocumentationProvider;
2427
import org.testng.Assert;
28+
import org.testng.annotations.DataProvider;
2529
import org.testng.annotations.Test;
2630

2731
import java.io.File;
@@ -1232,6 +1236,57 @@ public void testValidationsInQueryParams_issue21238_Api_Delegate() throws IOExce
12321236
"@NotNull", "@Valid", "@Pattern(regexp=\"^[a-zA-Z0-9]+[a-zA-Z0-9\\\\.\\\\-_]*[a-zA-Z0-9]+$\")");
12331237
}
12341238

1239+
@DataProvider
1240+
public Object[][] issue17997DocumentationProviders() {
1241+
return new Object[][]{
1242+
{DocumentationProviderFeatures.DocumentationProvider.SPRINGDOC.name()},
1243+
{DocumentationProviderFeatures.DocumentationProvider.SPRINGFOX.name()},
1244+
};
1245+
}
1246+
1247+
@Test(dataProvider = "issue17997DocumentationProviders")
1248+
public void testDocumentationAnnotationInPathParams_Issue17997(String documentProvider) throws IOException {
1249+
Map<String, Object> additionalProperties = new HashMap<>();
1250+
additionalProperties.put(DOCUMENTATION_PROVIDER, documentProvider);
1251+
1252+
Map<String, String> generatorPropertyDefaults = new HashMap<>();
1253+
generatorPropertyDefaults.put(CodegenConstants.MODEL_TESTS, "false");
1254+
generatorPropertyDefaults.put(CodegenConstants.MODEL_DOCS, "false");
1255+
generatorPropertyDefaults.put(CodegenConstants.APIS, "true");
1256+
1257+
Map<String, File> files = generateFromContract(
1258+
"src/test/resources/3_0/issue_6762.yaml",
1259+
additionalProperties,
1260+
generatorPropertyDefaults
1261+
);
1262+
1263+
Stream.of(
1264+
"ZebrasApiController.kt",
1265+
"GiraffesApiController.kt"
1266+
).forEach(filename -> {
1267+
File file = files.get(filename);
1268+
assertThat(file).isNotNull();
1269+
assertFileContains(
1270+
file.toPath(),
1271+
"allowableValues = [\"0\", \"1\"], defaultValue = \"0\"",
1272+
"@PathVariable"
1273+
);
1274+
});
1275+
1276+
Stream.of(
1277+
"BearsApiController.kt",
1278+
"CamelsApiController.kt"
1279+
).forEach(filename -> {
1280+
File file = files.get(filename);
1281+
assertThat(file).isNotNull();
1282+
assertFileContains(
1283+
file.toPath(),
1284+
"allowableValues = [\"sleeping\", \"awake\"]", "@PathVariable",
1285+
"@PathVariable"
1286+
);
1287+
});
1288+
}
1289+
12351290
private Map<String, File> generateFromContract(String url) throws IOException {
12361291
return generateFromContract(url, new HashMap<>(), new HashMap<>());
12371292
}

modules/openapi-generator/src/test/resources/3_0/issue_6762.yaml

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ paths:
1313
operationId: getGiraffes
1414
parameters:
1515
- $ref: '#/components/parameters/refStatus'
16+
responses:
17+
"204":
18+
description: Successful response
1619
/zebras/{status}:
1720
get:
1821
operationId: getZebras
@@ -24,11 +27,17 @@ paths:
2427
type: integer
2528
enum: [0,1]
2629
default: 0
30+
responses:
31+
"204":
32+
description: Successful response
2733
/bears/{refCondition}:
2834
get:
2935
operationId: getBears
3036
parameters:
3137
- $ref: '#/components/parameters/refCondition'
38+
responses:
39+
"204":
40+
description: Successful response
3241
/camels/{condition}:
3342
get:
3443
operationId: getCamels
@@ -41,6 +50,9 @@ paths:
4150
enum:
4251
- sleeping
4352
- awake
53+
responses:
54+
"204":
55+
description: Successful response
4456
components:
4557
parameters:
4658
refStatus:
@@ -58,4 +70,4 @@ components:
5870
type: string
5971
enum:
6072
- sleeping
61-
- awake
73+
- awake

0 commit comments

Comments
 (0)