Skip to content

Commit 42d3dbd

Browse files
authored
Fix bugs to ensure unique parameter names (#8762)
* fix unique parameter naming * add tests
1 parent e7f50f6 commit 42d3dbd

File tree

3 files changed

+79
-3
lines changed

3 files changed

+79
-3
lines changed

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3778,7 +3778,7 @@ public CodegenOperation fromOperation(String path,
37783778

37793779
// ensure unique params
37803780
if (ensureUniqueParams) {
3781-
if (!isParameterNameUnique(p, allParams)) {
3781+
while (!isParameterNameUnique(p, allParams)) {
37823782
p.paramName = generateNextName(p.paramName);
37833783
}
37843784
}
@@ -3804,7 +3804,7 @@ public CodegenOperation fromOperation(String path,
38043804
if (!prependFormOrBodyParameters) {
38053805
for (CodegenParameter cp : formParams) {
38063806
if (ensureUniqueParams) {
3807-
if (!isParameterNameUnique(cp, allParams)) {
3807+
while (!isParameterNameUnique(cp, allParams)) {
38083808
cp.paramName = generateNextName(cp.paramName);
38093809
}
38103810
}
@@ -3813,7 +3813,7 @@ public CodegenOperation fromOperation(String path,
38133813

38143814
for (CodegenParameter cp : bodyParams) {
38153815
if (ensureUniqueParams) {
3816-
if (!isParameterNameUnique(cp, allParams)) {
3816+
while (!isParameterNameUnique(cp, allParams)) {
38173817
cp.paramName = generateNextName(cp.paramName);
38183818
}
38193819
}

modules/openapi-generator/src/test/java/org/openapitools/codegen/go/GoClientCodegenTest.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.openapitools.codegen.CodegenParameter;
2525
import org.openapitools.codegen.TestUtils;
2626
import org.openapitools.codegen.languages.GoDeprecatedClientCodegen;
27+
import org.openapitools.codegen.languages.GoClientCodegen;
2728
import org.testng.Assert;
2829
import org.testng.annotations.Test;
2930

@@ -71,6 +72,27 @@ public void bodyParameterTest() {
7172
Assert.assertFalse(bp.isPrimitiveType);
7273
}
7374

75+
@Test(description = "test to ensrue the paramter names are unique")
76+
public void ensureParameterNameUniqueTest() {
77+
final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/conflictingParameter.yaml");
78+
final GoClientCodegen codegen = new GoClientCodegen();
79+
codegen.setOpenAPI(openAPI);
80+
final String path = "/pet/{id}";
81+
final Operation p = openAPI.getPaths().get(path).getPost();
82+
final CodegenOperation op = codegen.fromOperation(path, "post", p, null);
83+
Assert.assertEquals(op.allParams.size(), 9);
84+
CodegenParameter cp = op.allParams.get(0);
85+
Assert.assertEquals(cp.paramName, "id");
86+
CodegenParameter cp2 = op.allParams.get(1);
87+
Assert.assertEquals(cp2.paramName, "id2");
88+
CodegenParameter cp3 = op.allParams.get(2);
89+
Assert.assertEquals(cp3.paramName, "id3");
90+
CodegenParameter cp4 = op.allParams.get(3);
91+
Assert.assertEquals(cp4.paramName, "id4");
92+
CodegenParameter cp5 = op.allParams.get(4);
93+
Assert.assertEquals(cp5.paramName, "id5");
94+
}
95+
7496
@Test
7597
public void testFilenames() throws Exception {
7698
final GoDeprecatedClientCodegen codegen = new GoDeprecatedClientCodegen();
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
openapi: 3.0.0
2+
info:
3+
version: 1.0.0
4+
title: OpenAPI Petstore
5+
paths:
6+
/pet/{id}:
7+
post:
8+
operationId: create
9+
parameters:
10+
- in: path
11+
name: id
12+
required: true
13+
schema:
14+
type: integer
15+
format: int32
16+
- in: header
17+
name: id
18+
schema:
19+
type: integer
20+
format: int32
21+
- in: cookie
22+
name: id
23+
schema:
24+
type: integer
25+
format: int32
26+
- in: query
27+
name: id
28+
schema:
29+
type: integer
30+
format: int32
31+
requestBody:
32+
content:
33+
multipart/form-data:
34+
schema:
35+
type: object
36+
properties:
37+
id:
38+
type: integer
39+
format: int32
40+
pathid:
41+
type: integer
42+
format: int32
43+
headerId2:
44+
type: integer
45+
format: int32
46+
cookieId2:
47+
type: integer
48+
format: int32
49+
queryId2:
50+
type: integer
51+
format: int32
52+
responses:
53+
'400':
54+
description: Invalid pet value

0 commit comments

Comments
 (0)