From bfa80d6f0f803021d5e708a39f0c24fe57e73089 Mon Sep 17 00:00:00 2001 From: rkodev <43806892+rkodev@users.noreply.github.com> Date: Thu, 30 Nov 2023 11:01:20 +0300 Subject: [PATCH 1/2] Fix enum name evaluation in go contructors --- CHANGELOG.md | 2 ++ .../Writers/Go/CodeMethodWriter.cs | 3 +++ .../Writers/Go/CodeMethodWriterTests.cs | 26 +++++++++++++++++++ 3 files changed, 31 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c6883a75a..a75d65072e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed a bug where property names that matched reserved type would be replaced in dotnet. - Fixed pass by value for `contentType` param in Go `requestInfo.SetStreamContentAndContentType`[#3830](https://github.com/microsoft/kiota/issues/3830) - Fixed parsing of `DateOnly` values generated in request executors [#3679](https://github.com/microsoft/kiota/issues/3679) +- Fixes generation of default values names for go contructor functions [#3436](https://github.com/microsoft/kiota/issues/3436) + ## [1.8.2] - 2023-11-08 diff --git a/src/Kiota.Builder/Writers/Go/CodeMethodWriter.cs b/src/Kiota.Builder/Writers/Go/CodeMethodWriter.cs index 3edc3cf575..d6a9e7712c 100644 --- a/src/Kiota.Builder/Writers/Go/CodeMethodWriter.cs +++ b/src/Kiota.Builder/Writers/Go/CodeMethodWriter.cs @@ -555,6 +555,9 @@ private void WriteConstructorBody(CodeClass parentClass, CodeMethod currentMetho var defaultValue = propWithDefault.DefaultValue; if (propWithDefault.Type is CodeType propertyType && propertyType.TypeDefinition is CodeEnum enumDefinition) { + defaultValue = defaultValue.Trim('"'); + defaultValue = + enumDefinition.Options.FirstOrDefault(x => x.SerializationName.Equals(defaultValue, StringComparison.OrdinalIgnoreCase))?.Name ?? defaultValue; defaultValue = $"{defaultValue.Trim('"').ToUpperInvariant()}_{enumDefinition.Name.ToUpperInvariant()}"; } writer.WriteLine($"{defaultValueReference} := {defaultValue}"); diff --git a/tests/Kiota.Builder.Tests/Writers/Go/CodeMethodWriterTests.cs b/tests/Kiota.Builder.Tests/Writers/Go/CodeMethodWriterTests.cs index 2e634f430f..fd16bf24b4 100644 --- a/tests/Kiota.Builder.Tests/Writers/Go/CodeMethodWriterTests.cs +++ b/tests/Kiota.Builder.Tests/Writers/Go/CodeMethodWriterTests.cs @@ -1851,6 +1851,32 @@ public void WritesConstructor() Assert.Contains("NewBaseRequestBuilder", result); } [Fact] + public void WritesConstructorWithEnumValue() + { + setup(); + var modelsNamespace = root.AddNamespace("models"); + method.Kind = CodeMethodKind.Constructor; + var serializationName = "1024x1024"; + var defaultValue = "TENTWENTYFOUR_BY_TENTWENTYFOUR"; + var propName = "size"; + var codeEnum = modelsNamespace.AddEnum(new CodeEnum + { + Name = "pictureSize" + }).First(); + parentClass.AddProperty(new CodeProperty + { + Name = propName, + DefaultValue = defaultValue, + SerializationName = serializationName, + Kind = CodePropertyKind.Custom, + Type = new CodeType { TypeDefinition = codeEnum } + }); + writer.Write(method); + var result = tw.ToString(); + Assert.Contains(parentClass.Name.ToFirstCharacterUpperCase(), result); + Assert.Contains($"Set{propName.ToFirstCharacterUpperCase()}({defaultValue})", result);//ensure symbol is cleaned up + } + [Fact] public void WritesWithUrl() { setup(); From ccad6095b1e1bc1af3ffb9eadc9c8511aaa4eecb Mon Sep 17 00:00:00 2001 From: Ronald K <43806892+rkodev@users.noreply.github.com> Date: Thu, 30 Nov 2023 11:17:14 +0300 Subject: [PATCH 2/2] Update src/Kiota.Builder/Writers/Go/CodeMethodWriter.cs Co-authored-by: Eastman --- src/Kiota.Builder/Writers/Go/CodeMethodWriter.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Kiota.Builder/Writers/Go/CodeMethodWriter.cs b/src/Kiota.Builder/Writers/Go/CodeMethodWriter.cs index d6a9e7712c..9274be5c87 100644 --- a/src/Kiota.Builder/Writers/Go/CodeMethodWriter.cs +++ b/src/Kiota.Builder/Writers/Go/CodeMethodWriter.cs @@ -558,7 +558,7 @@ private void WriteConstructorBody(CodeClass parentClass, CodeMethod currentMetho defaultValue = defaultValue.Trim('"'); defaultValue = enumDefinition.Options.FirstOrDefault(x => x.SerializationName.Equals(defaultValue, StringComparison.OrdinalIgnoreCase))?.Name ?? defaultValue; - defaultValue = $"{defaultValue.Trim('"').ToUpperInvariant()}_{enumDefinition.Name.ToUpperInvariant()}"; + defaultValue = $"{defaultValue.ToUpperInvariant()}_{enumDefinition.Name.ToUpperInvariant()}"; } writer.WriteLine($"{defaultValueReference} := {defaultValue}"); defaultValueReference = $"&{defaultValueReference}";