| File: HostedMcpServerToolApprovalModeTests.cs | Web Access |
| Project: src\test\Libraries\Microsoft.Extensions.AI.Abstractions.Tests\Microsoft.Extensions.AI.Abstractions.Tests.csproj (Microsoft.Extensions.AI.Abstractions.Tests) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Text.Json; using Xunit; namespace Microsoft.Extensions.AI; public class HostedMcpServerToolApprovalModeTests { [Fact] public void Singletons_Idempotent() { Assert.Same(HostedMcpServerToolApprovalMode.AlwaysRequire, HostedMcpServerToolApprovalMode.AlwaysRequire); Assert.Same(HostedMcpServerToolApprovalMode.NeverRequire, HostedMcpServerToolApprovalMode.NeverRequire); } [Fact] public void Serialization_NeverRequire_Roundtrips() { string json = JsonSerializer.Serialize(HostedMcpServerToolApprovalMode.NeverRequire, TestJsonSerializerContext.Default.HostedMcpServerToolApprovalMode); Assert.Equal("""{"$type":"never"}""", json); HostedMcpServerToolApprovalMode? result = JsonSerializer.Deserialize(json, TestJsonSerializerContext.Default.HostedMcpServerToolApprovalMode); Assert.Equal(HostedMcpServerToolApprovalMode.NeverRequire, result); } [Fact] public void Serialization_AlwaysRequire_Roundtrips() { string json = JsonSerializer.Serialize(HostedMcpServerToolApprovalMode.AlwaysRequire, TestJsonSerializerContext.Default.HostedMcpServerToolApprovalMode); Assert.Equal("""{"$type":"always"}""", json); HostedMcpServerToolApprovalMode? result = JsonSerializer.Deserialize(json, TestJsonSerializerContext.Default.HostedMcpServerToolApprovalMode); Assert.Equal(HostedMcpServerToolApprovalMode.AlwaysRequire, result); } [Fact] public void Serialization_RequireSpecific_Roundtrips() { var requireSpecific = HostedMcpServerToolApprovalMode.RequireSpecific(["ToolA", "ToolB"], ["ToolC"]); string json = JsonSerializer.Serialize(requireSpecific, TestJsonSerializerContext.Default.HostedMcpServerToolApprovalMode); Assert.Equal("""{"$type":"requireSpecific","alwaysRequireApprovalToolNames":["ToolA","ToolB"],"neverRequireApprovalToolNames":["ToolC"]}""", json); HostedMcpServerToolApprovalMode? result = JsonSerializer.Deserialize(json, TestJsonSerializerContext.Default.HostedMcpServerToolApprovalMode); Assert.Equal(requireSpecific, result); } [Fact] public void Equality_RequireSpecific_WorksAsExpected() { var mode1 = HostedMcpServerToolApprovalMode.RequireSpecific(["ToolA", "ToolB"], ["ToolC"]); var mode2 = HostedMcpServerToolApprovalMode.RequireSpecific(["ToolA", "ToolB"], ["ToolC"]); Assert.Equal(mode1, mode2); Assert.Equal(mode1.GetHashCode(), mode2.GetHashCode()); Assert.NotNull(mode1.AlwaysRequireApprovalToolNames); mode1.AlwaysRequireApprovalToolNames.Add("ToolD"); Assert.NotEqual(mode1, mode2); Assert.NotEqual(mode1.GetHashCode(), mode2.GetHashCode()); Assert.NotNull(mode2.AlwaysRequireApprovalToolNames); mode2.AlwaysRequireApprovalToolNames.Add("ToolD"); Assert.Equal(mode1, mode2); Assert.Equal(mode1.GetHashCode(), mode2.GetHashCode()); Assert.NotNull(mode2.NeverRequireApprovalToolNames); mode2.NeverRequireApprovalToolNames.Add("ToolE"); Assert.NotEqual(mode1, mode2); Assert.NotEqual(mode1.GetHashCode(), mode2.GetHashCode()); Assert.NotNull(mode1.NeverRequireApprovalToolNames); mode1.NeverRequireApprovalToolNames.Add("ToolE"); Assert.Equal(mode1, mode2); Assert.Equal(mode1.GetHashCode(), mode2.GetHashCode()); var mode3 = HostedMcpServerToolApprovalMode.RequireSpecific(null, null); Assert.Equal(mode3.GetHashCode(), mode3.GetHashCode()); var mode4 = HostedMcpServerToolApprovalMode.RequireSpecific(["a"], null); Assert.Equal(mode4.GetHashCode(), mode4.GetHashCode()); Assert.NotEqual(mode3, mode4); Assert.NotEqual(mode3.GetHashCode(), mode4.GetHashCode()); var mode5 = HostedMcpServerToolApprovalMode.RequireSpecific(null, ["b"]); Assert.Equal(mode5.GetHashCode(), mode5.GetHashCode()); Assert.NotEqual(mode3, mode5); Assert.NotEqual(mode3.GetHashCode(), mode5.GetHashCode()); Assert.NotEqual(mode4, mode5); Assert.NotEqual(mode4.GetHashCode(), mode5.GetHashCode()); var mode6 = HostedMcpServerToolApprovalMode.RequireSpecific([], []); Assert.Equal(mode6.GetHashCode(), mode6.GetHashCode()); Assert.NotEqual(mode3, mode6); } }