diff --git a/src/Kiota.Builder/Refiners/CSharpRefiner.cs b/src/Kiota.Builder/Refiners/CSharpRefiner.cs index 7af05fa489..c5e9a92664 100644 --- a/src/Kiota.Builder/Refiners/CSharpRefiner.cs +++ b/src/Kiota.Builder/Refiners/CSharpRefiner.cs @@ -169,6 +169,8 @@ protected static void MakeEnumPropertiesNullable(CodeElement currentElement) "Microsoft.Kiota.Abstractions.Serialization", "ParseNodeHelper"), new (static x => x is CodeProperty prop && prop.IsOfKind(CodePropertyKind.Headers), "Microsoft.Kiota.Abstractions", "RequestHeaders"), + new (static x => x is CodeEnum prop && prop.Options.Any(x => x.IsNameEscaped), + "System.Runtime.Serialization", "EnumMemberAttribute") }; protected static void CapitalizeNamespacesFirstLetters(CodeElement current) { diff --git a/tests/Kiota.Builder.Tests/Refiners/CSharpLanguageRefinerTests.cs b/tests/Kiota.Builder.Tests/Refiners/CSharpLanguageRefinerTests.cs index 03b42c1840..bc9f0f1ca2 100644 --- a/tests/Kiota.Builder.Tests/Refiners/CSharpLanguageRefinerTests.cs +++ b/tests/Kiota.Builder.Tests/Refiners/CSharpLanguageRefinerTests.cs @@ -14,6 +14,36 @@ public class CSharpLanguageRefinerTests private readonly CodeNamespace root = CodeNamespace.InitRootNamespace(); #region CommonLanguageRefinerTests [Fact] + public async Task EnumHasEscapedOption_UsesEnumMemberAttribute() + { + var model = root.AddEnum(new CodeEnum + { + Name = "someenum" + }).First(); + var option = new CodeEnumOption { Name = "kiotaCsharpName", SerializationName = "Kiota:CSharp:Enum" }; + model.AddOption(option); + await ILanguageRefiner.Refine(new GenerationConfiguration { Language = GenerationLanguage.CSharp }, root); + + var declaration = model.StartBlock; + + Assert.Contains("EnumMemberAttribute", declaration.Usings.Select(x => x.Name)); + } + [Fact] + public async Task EnumDoesntHaveEscapedOption_DoesntUseEnumMemberAttribute() + { + var model = root.AddEnum(new CodeEnum + { + Name = "someenum" + }).First(); + var option = new CodeEnumOption { Name = "item1" }; + model.AddOption(option); + await ILanguageRefiner.Refine(new GenerationConfiguration { Language = GenerationLanguage.CSharp }, root); + + var declaration = model.StartBlock; + + Assert.DoesNotContain("EnumMemberAttribute", declaration.Usings.Select(x => x.Name)); + } + [Fact] public async Task AddsExceptionInheritanceOnErrorClasses() { var model = root.AddClass(new CodeClass