Fix inconsistent parameter names when ensuring uniqueness. (#640)

This commit is contained in:
Rytis Karpuška 2018-07-25 22:46:56 +03:00 committed by Jérémie Bresson
parent 60c81eae0a
commit 44d419c1a1
2 changed files with 30 additions and 11 deletions

View File

@ -2390,6 +2390,13 @@ public class DefaultCodegen implements CodegenConfig {
CodegenParameter p = fromParameter(param, imports);
// ensure unique params
if (ensureUniqueParams) {
if (!isParameterNameUnique(p, allParams)) {
p.paramName = generateNextName(p.paramName);
}
}
allParams.add(p);
if (param instanceof QueryParameter || "query".equalsIgnoreCase(param.getIn())) {
@ -2418,17 +2425,6 @@ public class DefaultCodegen implements CodegenConfig {
}
}
// ensure unique parameter name
for (CodegenParameter cp : allParams) {
if (ensureUniqueParams) {
if (isParameterNameUnique(cp, allParams)) {
continue;
} else {
cp.paramName = generateNextName(cp.paramName);
}
}
}
// create optional, required parameters
for (CodegenParameter cp : allParams) {
if (cp.required) { //required parameters

View File

@ -26,6 +26,8 @@ import io.swagger.v3.oas.models.media.Content;
import io.swagger.v3.oas.models.media.MediaType;
import io.swagger.v3.oas.models.media.ObjectSchema;
import io.swagger.v3.oas.models.media.Schema;
import io.swagger.v3.oas.models.media.StringSchema;
import io.swagger.v3.oas.models.parameters.QueryParameter;
import io.swagger.v3.oas.models.parameters.RequestBody;
import io.swagger.v3.oas.models.responses.ApiResponse;
import io.swagger.v3.oas.models.responses.ApiResponses;
@ -42,6 +44,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
public class DefaultCodegenTest {
@ -234,6 +237,26 @@ public class DefaultCodegenTest {
Assert.assertEquals(co.produces.size(), 1);
Assert.assertEquals(co.produces.get(0).get("mediaType"), "application/json");
}
@Test
public void testConsistentParameterNameAfterUniquenessRename() throws Exception {
Operation operation = new Operation()
.operationId("opId")
.addParametersItem(new QueryParameter().name("myparam").schema(new StringSchema()))
.addParametersItem(new QueryParameter().name("myparam").schema(new StringSchema()))
.responses(new ApiResponses().addApiResponse("200", new ApiResponse().description("OK")));
DefaultCodegen codegen = new DefaultCodegen();
CodegenOperation co = codegen.fromOperation("p/", "get", operation, Collections.emptyMap());
Assert.assertEquals(co.path, "p/");
Assert.assertEquals(co.allParams.size(), 2);
List<String> allParamsNames = co.allParams.stream().map(p -> p.paramName).collect(Collectors.toList());
Assert.assertTrue(allParamsNames.contains("myparam"));
Assert.assertTrue(allParamsNames.contains("myparam2"));
List<String> queryParamsNames = co.queryParams.stream().map(p -> p.paramName).collect(Collectors.toList());
Assert.assertTrue(queryParamsNames.contains("myparam"));
Assert.assertTrue(queryParamsNames.contains("myparam2"));
}
@Test
public void testGetSchemaTypeWithComposedSchemaWithOneOf() {