forked from loafle/openapi-generator-original
better handling of NPE in k6 client generator (#13236)
This commit is contained in:
parent
344d6b19b2
commit
2feaf0510b
@ -187,10 +187,10 @@ public class K6ClientCodegen extends DefaultCodegen implements CodegenConfig {
|
|||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
Set<String> exampleValues = ((Map<String, Example>) rawValue).values().stream()
|
Set<String> exampleValues = ((Map<String, Example>) rawValue).values().stream()
|
||||||
.map(x -> quoteExample(
|
.map(x -> quoteExample(
|
||||||
StringEscapeUtils.escapeEcmaScript(
|
StringEscapeUtils.escapeEcmaScript(
|
||||||
String.valueOf(x.getValue()))))
|
String.valueOf(x.getValue()))))
|
||||||
.collect(Collectors.toCollection(TreeSet::new));
|
.collect(Collectors.toCollection(TreeSet::new));
|
||||||
|
|
||||||
if (!exampleValues.isEmpty()) {
|
if (!exampleValues.isEmpty()) {
|
||||||
|
|
||||||
@ -203,7 +203,7 @@ public class K6ClientCodegen extends DefaultCodegen implements CodegenConfig {
|
|||||||
writer.write(noExampleParamValue);
|
writer.write(noExampleParamValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
// handle as (single) 'example'
|
// handle as (single) 'example'
|
||||||
} else {
|
} else {
|
||||||
writer.write(String.join("",
|
writer.write(String.join("",
|
||||||
quoteExample(
|
quoteExample(
|
||||||
@ -214,7 +214,7 @@ public class K6ClientCodegen extends DefaultCodegen implements CodegenConfig {
|
|||||||
" // extracted from 'example' field defined at the parameter level of OpenAPI spec"));
|
" // extracted from 'example' field defined at the parameter level of OpenAPI spec"));
|
||||||
}
|
}
|
||||||
|
|
||||||
// param needs to be initialized for subsequent data extraction - see `X_OPERATION_DATAEXTRACT` K6 vendor extension
|
// param needs to be initialized for subsequent data extraction - see `X_OPERATION_DATAEXTRACT` K6 vendor extension
|
||||||
} else if (fragment.context() instanceof K6ClientCodegen.Parameter
|
} else if (fragment.context() instanceof K6ClientCodegen.Parameter
|
||||||
&& ((K6ClientCodegen.Parameter) fragment.context()).initialize) {
|
&& ((K6ClientCodegen.Parameter) fragment.context()).initialize) {
|
||||||
|
|
||||||
@ -304,8 +304,8 @@ public class K6ClientCodegen extends DefaultCodegen implements CodegenConfig {
|
|||||||
DataExtractSubstituteParameter dataExtract;
|
DataExtractSubstituteParameter dataExtract;
|
||||||
|
|
||||||
public HTTPRequest(String method, String path, @Nullable List<Parameter> query, @Nullable HTTPBody body,
|
public HTTPRequest(String method, String path, @Nullable List<Parameter> query, @Nullable HTTPBody body,
|
||||||
boolean hasBodyExample, @Nullable HTTPParameters params, @Nullable List<k6Check> k6Checks,
|
boolean hasBodyExample, @Nullable HTTPParameters params, @Nullable List<k6Check> k6Checks,
|
||||||
DataExtractSubstituteParameter dataExtract) {
|
DataExtractSubstituteParameter dataExtract) {
|
||||||
// NOTE: https://k6.io/docs/javascript-api/k6-http/del-url-body-params
|
// NOTE: https://k6.io/docs/javascript-api/k6-http/del-url-body-params
|
||||||
this.method = method.equals("delete") ? "del" : method;
|
this.method = method.equals("delete") ? "del" : method;
|
||||||
this.isDelete = method.equals("delete");
|
this.isDelete = method.equals("delete");
|
||||||
@ -592,37 +592,38 @@ public class K6ClientCodegen extends DefaultCodegen implements CodegenConfig {
|
|||||||
String responseType = getDoubleQuotedString(accepts);
|
String responseType = getDoubleQuotedString(accepts);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
if (operation != null && operation.getParameters() != null) {
|
||||||
|
for (io.swagger.v3.oas.models.parameters.Parameter parameter : operation.getParameters()) {
|
||||||
|
switch (parameter.getIn()) {
|
||||||
|
case "header":
|
||||||
|
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(), getTemplateVariable(parameter.getName())));
|
||||||
|
if (!pathVariables.containsKey(path)) {
|
||||||
|
// use 'example' field defined at the parameter level of OpenAPI spec
|
||||||
|
if (Objects.nonNull(parameter.getExample())) {
|
||||||
|
variables.add(new Parameter(toVarName(parameter.getName()),
|
||||||
|
parameter.getExample(), true));
|
||||||
|
|
||||||
for (io.swagger.v3.oas.models.parameters.Parameter parameter : operation.getParameters()) {
|
// use 'examples' field defined at the parameter level of OpenAPI spec
|
||||||
switch (parameter.getIn()) {
|
} else if (Objects.nonNull(parameter.getExamples())) {
|
||||||
case "header":
|
variables.add(new Parameter(toVarName(parameter.getName()),
|
||||||
httpParams.add(new Parameter(parameter.getName(), getTemplateString(toVarName(parameter.getName()))));
|
parameter.getExamples(), true));
|
||||||
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(), getTemplateVariable(parameter.getName())));
|
|
||||||
if (!pathVariables.containsKey(path)) {
|
|
||||||
// use 'example' field defined at the parameter level of OpenAPI spec
|
|
||||||
if (Objects.nonNull(parameter.getExample())) {
|
|
||||||
variables.add(new Parameter(toVarName(parameter.getName()),
|
|
||||||
parameter.getExample(), true));
|
|
||||||
|
|
||||||
// use 'examples' field defined at the parameter level of OpenAPI spec
|
// no example provided, generated script will contain placeholder value
|
||||||
} else if (Objects.nonNull(parameter.getExamples())) {
|
} else {
|
||||||
variables.add(new Parameter(toVarName(parameter.getName()),
|
variables.add(new Parameter(toVarName(parameter.getName()),
|
||||||
parameter.getExamples(), true));
|
parameter.getName().toUpperCase(Locale.ROOT)));
|
||||||
|
}
|
||||||
// no example provided, generated script will contain placeholder value
|
|
||||||
} else {
|
|
||||||
variables.add(new Parameter(toVarName(parameter.getName()),
|
|
||||||
parameter.getName().toUpperCase(Locale.ROOT)));
|
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
break;
|
default:
|
||||||
default:
|
break;
|
||||||
break;
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (NullPointerException e) {
|
} catch (NullPointerException e) {
|
||||||
@ -893,7 +894,7 @@ public class K6ClientCodegen extends DefaultCodegen implements CodegenConfig {
|
|||||||
* @param requests
|
* @param requests
|
||||||
*/
|
*/
|
||||||
private void addOrUpdateRequestGroup(Map<String, HTTPRequestGroup> requestGroups, String groupName,
|
private void addOrUpdateRequestGroup(Map<String, HTTPRequestGroup> requestGroups, String groupName,
|
||||||
Set<Parameter> variables, Map<Integer, HTTPRequest> requests) {
|
Set<Parameter> variables, Map<Integer, HTTPRequest> requests) {
|
||||||
if (requestGroups.containsKey(groupName)) {
|
if (requestGroups.containsKey(groupName)) {
|
||||||
HTTPRequestGroup existingHTTPRequestGroup = requestGroups.get(groupName);
|
HTTPRequestGroup existingHTTPRequestGroup = requestGroups.get(groupName);
|
||||||
existingHTTPRequestGroup.addRequests(requests);
|
existingHTTPRequestGroup.addRequests(requests);
|
||||||
@ -956,16 +957,16 @@ public class K6ClientCodegen extends DefaultCodegen implements CodegenConfig {
|
|||||||
for (Map.Entry<?, ?> xOperationDataExtractPropertiesEntry : xOperationDataExtractProperties.entrySet()) {
|
for (Map.Entry<?, ?> xOperationDataExtractPropertiesEntry : xOperationDataExtractProperties.entrySet()) {
|
||||||
|
|
||||||
switch (String.valueOf(xOperationDataExtractPropertiesEntry.getKey())) {
|
switch (String.valueOf(xOperationDataExtractPropertiesEntry.getKey())) {
|
||||||
case X_OPERATION_DATAEXTRACT_OPERATION_ID:
|
case X_OPERATION_DATAEXTRACT_OPERATION_ID:
|
||||||
operationId = Optional.of(String.valueOf(xOperationDataExtractPropertiesEntry.getValue()));
|
operationId = Optional.of(String.valueOf(xOperationDataExtractPropertiesEntry.getValue()));
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case X_OPERATION_DATAEXTRACT_VALUE_PATH:
|
case X_OPERATION_DATAEXTRACT_VALUE_PATH:
|
||||||
valuePath = Optional.of(String.valueOf(xOperationDataExtractPropertiesEntry.getValue()));
|
valuePath = Optional.of(String.valueOf(xOperationDataExtractPropertiesEntry.getValue()));
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case X_OPERATION_DATAEXTRACT_PARAMETER_NAME:
|
case X_OPERATION_DATAEXTRACT_PARAMETER_NAME:
|
||||||
parameterName = Optional.of(String.valueOf(xOperationDataExtractPropertiesEntry.getValue()));
|
parameterName = Optional.of(String.valueOf(xOperationDataExtractPropertiesEntry.getValue()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1005,12 +1006,12 @@ public class K6ClientCodegen extends DefaultCodegen implements CodegenConfig {
|
|||||||
|
|
||||||
if (cgOperation.getHasVendorExtensions() && cgOperation.vendorExtensions.containsKey(X_OPERATION_GROUPING)
|
if (cgOperation.getHasVendorExtensions() && cgOperation.vendorExtensions.containsKey(X_OPERATION_GROUPING)
|
||||||
&& cgOperation.vendorExtensions.get(X_OPERATION_GROUPING) instanceof java.util.Map) {
|
&& cgOperation.vendorExtensions.get(X_OPERATION_GROUPING) instanceof java.util.Map) {
|
||||||
|
|
||||||
Map.Entry<?, ?> operationGroupingEntry = ((Map<?, ?>) cgOperation.vendorExtensions
|
Map.Entry<?, ?> operationGroupingEntry = ((Map<?, ?>) cgOperation.vendorExtensions
|
||||||
.get(X_OPERATION_GROUPING)).entrySet().stream().findFirst().orElse(null);
|
.get(X_OPERATION_GROUPING)).entrySet().stream().findFirst().orElse(null);
|
||||||
|
if (operationGroupingEntry != null) {
|
||||||
return Optional.of(new OperationGrouping(String.valueOf(operationGroupingEntry.getKey()),
|
return Optional.of(new OperationGrouping(String.valueOf(operationGroupingEntry.getKey()),
|
||||||
Integer.parseInt(String.valueOf(operationGroupingEntry.getValue()))));
|
Integer.parseInt(String.valueOf(operationGroupingEntry.getValue()))));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return operationGrouping;
|
return operationGrouping;
|
||||||
@ -1061,7 +1062,7 @@ public class K6ClientCodegen extends DefaultCodegen implements CodegenConfig {
|
|||||||
* @param bodyOrFormParams
|
* @param bodyOrFormParams
|
||||||
*/
|
*/
|
||||||
private void extractRequestBodyExample(RequestBody requestBody, String contentTypeValue,
|
private void extractRequestBodyExample(RequestBody requestBody, String contentTypeValue,
|
||||||
List<Parameter> bodyOrFormParams) {
|
List<Parameter> bodyOrFormParams) {
|
||||||
|
|
||||||
Optional<Map.Entry<String, Example>> requestBodyExampleEntry = requestBody.getContent().get(contentTypeValue)
|
Optional<Map.Entry<String, Example>> requestBodyExampleEntry = requestBody.getContent().get(contentTypeValue)
|
||||||
.getExamples().entrySet().stream().findFirst();
|
.getExamples().entrySet().stream().findFirst();
|
||||||
@ -1108,14 +1109,14 @@ public class K6ClientCodegen extends DefaultCodegen implements CodegenConfig {
|
|||||||
|
|
||||||
} else {
|
} else {
|
||||||
switch (requestsSize) {
|
switch (requestsSize) {
|
||||||
case 0:
|
case 0:
|
||||||
case 1:
|
case 1:
|
||||||
requestOrder = requestsSize;
|
requestOrder = requestsSize;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
requestOrder = (requestsSize - 1);
|
requestOrder = (requestsSize - 1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1123,6 +1124,7 @@ public class K6ClientCodegen extends DefaultCodegen implements CodegenConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Any variables not defined yet but used for subsequent data extraction must be
|
* Any variables not defined yet but used for subsequent data extraction must be
|
||||||
* initialized
|
* initialized
|
||||||
@ -1147,5 +1149,7 @@ public class K6ClientCodegen extends DefaultCodegen implements CodegenConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public GeneratorLanguage generatorLanguage() { return GeneratorLanguage.K_SIX; }
|
public GeneratorLanguage generatorLanguage() {
|
||||||
|
return GeneratorLanguage.K_SIX;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user