From bf10976525f1ebf29d76b61295247a279df92822 Mon Sep 17 00:00:00 2001 From: davit-asryan-sveasolar <100680564+davit-asryan-sveasolar@users.noreply.github.com> Date: Fri, 31 Mar 2023 00:20:33 +0400 Subject: [PATCH] #2488 - CSharp | Add EnumMember Attribute if CodeEnumOption.SerializationName is different from CodeEnumOption.Name --- CHANGELOG.md | 1 + .../Writers/CSharp/CodeEnumWriter.cs | 5 ++++ .../Writers/CSharp/CodeEnumWriterTests.cs | 23 +++++++++++++++++++ 3 files changed, 29 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b34e19c32a..e08d9b1000 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,6 +37,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed a bug where java refiner would not normalize inherited class names and interface types. - Fixed a bug where search based commands would not match exact matches when additional results are available. - Fixed a bug where imported classes and enums would not be disambiguated when they have the same name in dotnet. +- Fixed a bug where escaping enum names resulted in a loss of the original enum name. [#2488](https://github.com/microsoft/kiota/issues/2488) ## [1.0.1] - 2023-03-11 diff --git a/src/Kiota.Builder/Writers/CSharp/CodeEnumWriter.cs b/src/Kiota.Builder/Writers/CSharp/CodeEnumWriter.cs index 7d9e5a0b82..57ecc9aceb 100644 --- a/src/Kiota.Builder/Writers/CSharp/CodeEnumWriter.cs +++ b/src/Kiota.Builder/Writers/CSharp/CodeEnumWriter.cs @@ -27,6 +27,11 @@ public override void WriteCodeElement(CodeEnum codeElement, LanguageWriter write foreach (var option in codeElement.Options) { conventions.WriteShortDescription(option.Documentation.Description, writer); + + if (option.IsNameEscaped) + { + writer.WriteLine($"[EnumMember(Value = \"{option.SerializationName}\")]"); + } writer.WriteLine($"{option.Name.ToFirstCharacterUpperCase()}{(codeElement.Flags ? " = " + GetEnumFlag(idx) : string.Empty)},"); idx++; } diff --git a/tests/Kiota.Builder.Tests/Writers/CSharp/CodeEnumWriterTests.cs b/tests/Kiota.Builder.Tests/Writers/CSharp/CodeEnumWriterTests.cs index 1fd462a11c..5729f4c3ec 100644 --- a/tests/Kiota.Builder.Tests/Writers/CSharp/CodeEnumWriterTests.cs +++ b/tests/Kiota.Builder.Tests/Writers/CSharp/CodeEnumWriterTests.cs @@ -46,6 +46,29 @@ public void WritesEnum() AssertExtensions.CurlyBracesAreClosed(result, 1); Assert.Contains(Option.Name, result); } + + [Fact] + public void NamesDiffer_WritesEnumMember() + { + currentEnum.Flags = true; + currentEnum.AddOption(Option); + currentEnum.AddOption(new CodeEnumOption { Name = "InvalidName", SerializationName = "Invalid:Name"}); + writer.Write(currentEnum); + var result = tw.ToString(); + Assert.Contains($"[EnumMember(Value = \"Invalid:Name\")]", result); + } + + [Fact] + public void NamesDontDiffer_DoesntWriteEnumMember() + { + currentEnum.Flags = true; + currentEnum.AddOption(Option); + currentEnum.AddOption(new CodeEnumOption { Name = "ValidName"}); + writer.Write(currentEnum); + var result = tw.ToString(); + Assert.DoesNotContain($"\"ValidName\"", result); + } + [Fact] public void WritesFlagsEnum() {