Skip to content

Commit 31cff44

Browse files
Autoset constants (Required fields having single valid enum value) C# Implementation of #16547 (#17954)
* Autoset constants (Required fields having single valid enum value) C# Implementation * Update generichost/api.mustache & httpclient/api.mustache to autoset singleton enums values.
1 parent 8dae702 commit 31cff44

5 files changed

Lines changed: 98 additions & 0 deletions

File tree

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1102,6 +1102,9 @@ public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List<Mo
11021102
operation.vendorExtensions.put("x-not-nullable-reference-types", referenceTypes);
11031103
operation.vendorExtensions.put("x-has-not-nullable-reference-types", referenceTypes.size() > 0);
11041104
processOperation(operation);
1105+
1106+
// Remove constant params from allParams list and add to constantParams
1107+
handleConstantParams(operation);
11051108
}
11061109
}
11071110
}

modules/openapi-generator/src/main/resources/csharp/api.mustache

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -573,6 +573,12 @@ namespace {{packageName}}.{{apiPackage}}
573573
localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
574574
}
575575

576+
{{#constantParams}}
577+
{{#isPathParam}}
578+
// Set client side default value of Path Param "{{baseName}}".
579+
localVarRequestOptions.PathParameters.Add("{{baseName}}", {{packageName}}.Client.ClientUtils.ParameterToString({{#_enum}}"{{{.}}}"{{/_enum}})); // Constant path parameter
580+
{{/isPathParam}}
581+
{{/constantParams}}
576582
{{#pathParams}}
577583
{{#required}}
578584
localVarRequestOptions.PathParameters.Add("{{baseName}}", {{packageName}}.Client.ClientUtils.ParameterToString({{paramName}})); // path parameter
@@ -584,6 +590,12 @@ namespace {{packageName}}.{{apiPackage}}
584590
}
585591
{{/required}}
586592
{{/pathParams}}
593+
{{#constantParams}}
594+
{{#isQueryParam}}
595+
// Set client side default value of Query Param "{{baseName}}".
596+
localVarRequestOptions.QueryParameters.Add("{{baseName}}", {{packageName}}.Client.ClientUtils.ParameterToString({{#_enum}}"{{{.}}}"{{/_enum}})); // Constant query parameter
597+
{{/isQueryParam}}
598+
{{/constantParams}}
587599
{{#queryParams}}
588600
{{#required}}
589601
{{#isDeepObject}}
@@ -618,6 +630,12 @@ namespace {{packageName}}.{{apiPackage}}
618630
}
619631
{{/required}}
620632
{{/queryParams}}
633+
{{#constantParams}}
634+
{{#isHeaderParam}}
635+
// Set client side default value of Header Param "{{baseName}}".
636+
localVarRequestOptions.HeaderParameters.Add("{{baseName}}", {{packageName}}.Client.ClientUtils.ParameterToString({{#_enum}}"{{{.}}}"{{/_enum}})); // Constant header parameter
637+
{{/isHeaderParam}}
638+
{{/constantParams}}
621639
{{#headerParams}}
622640
{{#required}}
623641
localVarRequestOptions.HeaderParameters.Add("{{baseName}}", {{packageName}}.Client.ClientUtils.ParameterToString({{paramName}})); // header parameter

modules/openapi-generator/src/main/resources/csharp/libraries/generichost/api.mustache

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,12 @@ namespace {{packageName}}.{{apiPackage}}
390390
uriBuilderLocalVar.Path = urlLocalVar.AbsolutePath;
391391
{{/-first}}
392392
{{/servers}}
393+
{{#constantParams}}
394+
{{#isPathParam}}
395+
// Set client side default value of Path Param "{{baseName}}".
396+
uriBuilderLocalVar.Path = uriBuilderLocalVar.Path.Replace("%7B{{baseName}}%7D", Uri.EscapeDataString(ClientUtils.ParameterToString({{#_enum}}"{{{.}}}"{{/_enum}}))); // Constant path parameter
397+
{{/isPathParam}}
398+
{{/constantParams}}
393399
{{#pathParams}}
394400
uriBuilderLocalVar.Path = uriBuilderLocalVar.Path.Replace("%7B{{baseName}}%7D", Uri.EscapeDataString({{paramName}}.ToString()));
395401
{{#-last}}
@@ -423,6 +429,12 @@ namespace {{packageName}}.{{apiPackage}}
423429
{{/required}}
424430
{{/queryParams}}
425431

432+
{{#constantParams}}
433+
{{#isQueryParam}}
434+
// Set client side default value of Query Param "{{baseName}}".
435+
parseQueryStringLocalVar["{{baseName}}"] = ClientUtils.ParameterToString({{#_enum}}"{{{.}}}"{{/_enum}}); // Constant query parameter
436+
{{/isQueryParam}}
437+
{{/constantParams}}
426438
{{#queryParams}}
427439
{{^required}}
428440
if ({{paramName}}.IsSet)
@@ -434,6 +446,12 @@ namespace {{packageName}}.{{apiPackage}}
434446

435447
{{/-last}}
436448
{{/queryParams}}
449+
{{#constantParams}}
450+
{{#isHeaderParam}}
451+
// Set client side default value of Header Param "{{baseName}}".
452+
httpRequestMessageLocalVar.Headers.Add("{{baseName}}", ClientUtils.ParameterToString({{#_enum}}"{{{.}}}"{{/_enum}})); // Constant header parameter
453+
{{/isHeaderParam}}
454+
{{/constantParams}}
437455
{{#headerParams}}
438456
{{#required}}
439457
httpRequestMessageLocalVar.Headers.Add("{{baseName}}", ClientUtils.ParameterToString({{paramName}}));

modules/openapi-generator/src/main/resources/csharp/libraries/httpclient/api.mustache

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -605,6 +605,12 @@ namespace {{packageName}}.{{apiPackage}}
605605
var localVarAccept = {{packageName}}.Client.ClientUtils.SelectHeaderAccept(_accepts);
606606
if (localVarAccept != null) localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
607607

608+
{{#constantParams}}
609+
{{#isPathParam}}
610+
// Set client side default value of Path Param "{{baseName}}".
611+
localVarRequestOptions.PathParameters.Add("{{baseName}}", {{packageName}}.Client.ClientUtils.ParameterToString({{#_enum}}"{{{.}}}"{{/_enum}})); // Constant path parameter
612+
{{/isPathParam}}
613+
{{/constantParams}}
608614
{{#pathParams}}
609615
{{#required}}
610616
localVarRequestOptions.PathParameters.Add("{{baseName}}", {{packageName}}.Client.ClientUtils.ParameterToString({{paramName}})); // path parameter
@@ -616,6 +622,12 @@ namespace {{packageName}}.{{apiPackage}}
616622
}
617623
{{/required}}
618624
{{/pathParams}}
625+
{{#constantParams}}
626+
{{#isQueryParam}}
627+
// Set client side default value of Query Param "{{baseName}}".
628+
localVarRequestOptions.QueryParameters.Add("{{baseName}}", {{packageName}}.Client.ClientUtils.ParameterToString({{#_enum}}"{{{.}}}"{{/_enum}})); // Constant query parameter
629+
{{/isQueryParam}}
630+
{{/constantParams}}
619631
{{#queryParams}}
620632
{{#required}}
621633
localVarRequestOptions.QueryParameters.Add({{packageName}}.Client.ClientUtils.ParameterToMultiMap("{{collectionFormat}}", "{{baseName}}", {{paramName}}));
@@ -627,6 +639,12 @@ namespace {{packageName}}.{{apiPackage}}
627639
}
628640
{{/required}}
629641
{{/queryParams}}
642+
{{#constantParams}}
643+
{{#isHeaderParam}}
644+
// Set client side default value of Header Param "{{baseName}}".
645+
localVarRequestOptions.HeaderParameters.Add("{{baseName}}", {{packageName}}.Client.ClientUtils.ParameterToString({{#_enum}}"{{{.}}}"{{/_enum}})); // Constant header parameter
646+
{{/isHeaderParam}}
647+
{{/constantParams}}
630648
{{#headerParams}}
631649
{{#required}}
632650
localVarRequestOptions.HeaderParameters.Add("{{baseName}}", {{packageName}}.Client.ClientUtils.ParameterToString({{paramName}})); // header parameter

modules/openapi-generator/src/test/java/org/openapitools/codegen/csharpnetcore/CSharpClientCodegenTest.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,26 @@
1616

1717
package org.openapitools.codegen.csharpnetcore;
1818

19+
import static org.junit.Assert.assertNotNull;
20+
import static org.openapitools.codegen.TestUtils.assertFileContains;
21+
import static org.openapitools.codegen.TestUtils.assertFileExists;
22+
1923
import io.swagger.v3.oas.models.OpenAPI;
2024
import io.swagger.v3.oas.models.media.Schema;
25+
26+
import java.io.File;
27+
import java.io.IOException;
28+
import java.nio.file.Files;
29+
import java.nio.file.Paths;
30+
import java.util.Map;
31+
import java.util.function.Function;
32+
import java.util.stream.Collectors;
33+
34+
import org.openapitools.codegen.ClientOptInput;
35+
import org.openapitools.codegen.CodegenConstants;
2136
import org.openapitools.codegen.CodegenModel;
2237
import org.openapitools.codegen.CodegenProperty;
38+
import org.openapitools.codegen.DefaultGenerator;
2339
import org.openapitools.codegen.TestUtils;
2440
import org.openapitools.codegen.languages.CSharpClientCodegen;
2541
import org.openapitools.codegen.languages.JavaClientCodegen;
@@ -76,4 +92,29 @@ public void testUnsigned() {
7692
Assert.assertFalse(property2.isFreeFormObject);
7793
Assert.assertFalse(property2.isAnyType);
7894
}
95+
96+
@Test
97+
public void testHandleConstantParams() throws IOException {
98+
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
99+
output.deleteOnExit();
100+
final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/java/autoset_constant.yaml");
101+
final DefaultGenerator defaultGenerator = new DefaultGenerator();
102+
final ClientOptInput clientOptInput = new ClientOptInput();
103+
clientOptInput.openAPI(openAPI);
104+
CSharpClientCodegen cSharpClientCodegen = new CSharpClientCodegen();
105+
cSharpClientCodegen.setOutputDir(output.getAbsolutePath());
106+
cSharpClientCodegen.additionalProperties().put(CodegenConstants.AUTOSET_CONSTANTS, "true");
107+
cSharpClientCodegen.setAutosetConstants(true);
108+
clientOptInput.config(cSharpClientCodegen);
109+
defaultGenerator.opts(clientOptInput);
110+
111+
Map<String, File> files = defaultGenerator.generate().stream()
112+
.collect(Collectors.toMap(File::getPath, Function.identity()));
113+
114+
File apiFile = files
115+
.get(Paths.get(output.getAbsolutePath(), "src", "Org.OpenAPITools", "Api", "HelloExampleApi.cs").toString());
116+
assertNotNull(apiFile);
117+
assertFileContains(apiFile.toPath(),
118+
"localVarRequestOptions.HeaderParameters.Add(\"X-CUSTOM_CONSTANT_HEADER\", Org.OpenAPITools.Client.ClientUtils.ParameterToString(\"CONSTANT_VALUE\"));");
119+
}
79120
}

0 commit comments

Comments
 (0)