Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fixes wrong extended parameter use when parameter is an keyword
Browse files Browse the repository at this point in the history
lorenyaSICKAG committed Mar 11, 2024
1 parent 0c9d87f commit 3d220db
Showing 2 changed files with 81 additions and 1 deletion.
80 changes: 80 additions & 0 deletions src/NSwag.CodeGeneration.CSharp.Tests/QueryParameterTests.cs
Original file line number Diff line number Diff line change
@@ -298,5 +298,85 @@ public void When_query_parameter_is_mixed_free_form_object_parameters_are_expand
"foreach (var item_ in extendedProperties.AdditionalProperties) { urlBuilder_.Append(System.Uri.EscapeDataString(item_.Key)).Append('=').Append(System.Uri.EscapeDataString(ConvertToString(item_.Value, System.Globalization.CultureInfo.InvariantCulture))).Append('&'); }",
code);
}

[Fact]
public void When_query_parameter_is_keyword_use_correct_variable_name_when_object_parameters_has_expanded()
{
var spec = @"{
""openapi"": ""3.0.0"",
""info"": {
""version"": ""1.0.0"",
""title"": ""Query params tests""
},
""servers"": [
{
""url"": ""http://localhost:8080""
}
],
""paths"": {
""/settings"": {
""post"": {
""summary"": ""List all settings"",
""operationId"": ""listSettings"",
""parameters"": [
{
""name"": ""params"",
""in"": ""query"",
""required"": true,
""schema"": {
""$ref"": ""#/components/schemas/MultiValueMapStringObject""
}
}
],
""responses"": {
""200"": {
""description"": ""An array of settings""
}
}
}
}
},
""components"": {
""schemas"": {
""MultiValueMapStringObject"": {
""type"": ""object"",
""properties"": {
""all"": {
""type"": ""object"",
""additionalProperties"": {
""type"": ""object""
},
""writeOnly"": true
},
""empty"": {
""type"": ""boolean""
}
},
""additionalProperties"": {
""type"": ""array"",
""items"": {
""type"": ""object""
}
}
}
}
}
}
";

var document = OpenApiDocument.FromJsonAsync(spec).Result;

// Act
var generator = new CSharpClientGenerator(document, new CSharpClientGeneratorSettings());
var code = generator.GenerateFile();

// Assert
Assert.DoesNotContain(
"foreach (var item_ in params.AdditionalProperties) { urlBuilder_.Append(System.Uri.EscapeDataString(item_.Key)).Append('=').Append(System.Uri.EscapeDataString(ConvertToString(item_.Value, System.Globalization.CultureInfo.InvariantCulture))).Append('&'); }",
code);
Assert.Contains(
"foreach (var item_ in @params.AdditionalProperties) { urlBuilder_.Append(System.Uri.EscapeDataString(item_.Key)).Append('=').Append(System.Uri.EscapeDataString(ConvertToString(item_.Value, System.Globalization.CultureInfo.InvariantCulture))).Append('&'); }",
code);
}
}
}
Original file line number Diff line number Diff line change
@@ -40,5 +40,5 @@ if ({{parameter.Name}}.{{property.Name}} != null)
urlBuilder_.Append(System.Uri.EscapeDataString("{{ parameter.Name }}")).Append('=').Append(System.Uri.EscapeDataString({% if parameter.IsNullable and parameter.IsRequired %}{{ parameter.VariableName }} != null ? {% endif %}ConvertToString({{ parameter.VariableName }}, System.Globalization.CultureInfo.InvariantCulture){% if parameter.IsNullable and parameter.IsRequired %} : "{{ QueryNullValue }}"{% endif %})).Append('&');
{% endif -%}
{% if parameter.HasAdditionalProperties -%}
foreach (var item_ in {{parameter.Name}}.AdditionalProperties) { urlBuilder_.Append(System.Uri.EscapeDataString(item_.Key)).Append('=').Append(System.Uri.EscapeDataString(ConvertToString(item_.Value, System.Globalization.CultureInfo.InvariantCulture))).Append('&'); }
foreach (var item_ in {{ parameter.VariableName }}.AdditionalProperties) { urlBuilder_.Append(System.Uri.EscapeDataString(item_.Key)).Append('=').Append(System.Uri.EscapeDataString(ConvertToString(item_.Value, System.Globalization.CultureInfo.InvariantCulture))).Append('&'); }
{% endif -%}

0 comments on commit 3d220db

Please sign in to comment.