[k6] bugfixes to improve the output script (#5614)

* [k6] Skip appDescription escaping

* [k6] Fix variable identifier in output

* [k6] Fix bug with reserved words handling
This commit is contained in:
Mostafa Moradian 2020-03-23 18:17:39 +01:00 committed by GitHub
parent 4de97a47e3
commit b3b3941d09
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 65 additions and 10 deletions

View File

@ -377,14 +377,14 @@ public class K6ClientCodegen extends DefaultCodegen implements CodegenConfig {
for (io.swagger.v3.oas.models.parameters.Parameter parameter : operation.getParameters()) {
switch (parameter.getIn()) {
case "header":
httpParams.add(new Parameter(parameter.getName(), getTemplateString(parameter.getName())));
extraParameters.add(new Parameter(parameter.getName(), parameter.getName().toUpperCase(Locale.ROOT)));
httpParams.add(new Parameter(parameter.getName(), getTemplateString(toVarName(parameter.getName()))));
extraParameters.add(new Parameter(toVarName(parameter.getName()), parameter.getName().toUpperCase(Locale.ROOT)));
break;
case "path":
case "query":
if (parameter.getIn().equals("query"))
queryParams.add(new Parameter(parameter.getName(), getVariable(parameter.getName())));
variables.add(new Parameter(parameter.getName(), parameter.getName().toUpperCase(Locale.ROOT)));
queryParams.add(new Parameter(parameter.getName(), getTemplateVariable(parameter.getName())));
variables.add(new Parameter(toVarName(parameter.getName()), parameter.getName().toUpperCase(Locale.ROOT)));
break;
default:
break;
@ -446,12 +446,67 @@ public class K6ClientCodegen extends DefaultCodegen implements CodegenConfig {
return reference.toString();
}
private String getVariable(String input) {
private String getTemplateVariable(String input) {
return "${" + input + "}";
}
public String getModelPropertyNaming() {
return this.modelPropertyNaming;
}
private String getNameUsingModelPropertyNaming(String name) {
switch (CodegenConstants.MODEL_PROPERTY_NAMING_TYPE.valueOf(getModelPropertyNaming())) {
case original:
return name;
case camelCase:
return camelize(name, true);
case PascalCase:
return camelize(name);
case snake_case:
return underscore(name);
default:
throw new IllegalArgumentException("Invalid model property naming '" +
name + "'. Must be 'original', 'camelCase', " +
"'PascalCase' or 'snake_case'");
}
}
@Override
public String toVarName(String name) {
// sanitize name
name = sanitizeName(name); // FIXME parameter should not be assigned. Also declare it as "final"
if ("_".equals(name)) {
name = "_u";
}
// if it's all uppper case, do nothing
if (name.matches("^[A-Z_]*$")) {
return name;
}
// camelize (lower first character) the variable name
// pet_id => petId
name = getNameUsingModelPropertyNaming(name);
// for reserved word or word starting with number, append _
if (isReservedWord(name) || name.matches("^\\d.*")) {
name = escapeReservedWord(name);
}
return name;
}
@Override
public String escapeReservedWord(String name) {
if (this.reservedWordsMappings().containsKey(name)) {
return this.reservedWordsMappings().get(name);
}
return "_" + name;
}
private String getTemplateString(String input) {
return "`" + getVariable(input) + "`";
return "`" + getTemplateVariable(input) + "`";
}
private String getDoubleQuotedString(String input) {

View File

@ -1,6 +1,6 @@
/*
* {{appName}}
* {{appDescription}}
* {{& appDescription}}
*
{{#version}}
* OpenAPI spec version: {{version}}

View File

@ -1,6 +1,6 @@
/*
* OpenAPI Petstore
* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters.
* This is a sample server Petstore server. For this sample, you can use the api key \"special-key\" to test the authorization filters
*
* OpenAPI spec version: 1.0.0
*
@ -19,7 +19,7 @@ const BASE_URL = "http://petstore.swagger.io/v2";
// You might want to edit the value of this variable or remove calls to the sleep function on the script.
const SLEEP_DURATION = 0.1;
// Global variables should be initialized.
let api_key = "TODO_EDIT_THE_API_KEY";
let apiKey = "TODO_EDIT_THE_API_KEY";
export default function() {
group("/pet", () => {
@ -76,7 +76,7 @@ export default function() {
sleep(SLEEP_DURATION);
// Request No. 3
params = {headers: {"api_key": `${api_key}`}};
params = {headers: {"api_key": `${apiKey}`}};
request = http.delete(url, params);
sleep(SLEEP_DURATION);
});