using Xunit; using FluentAssertions; using NSubstitute; using FreeCode.Core.Interfaces; using FreeCode.Core.Models; using FreeCode.Mcp; using FreeCode.Tests.Unit.Helpers; namespace FreeCode.Tests.Unit.Mcp; public sealed class McpClientManagerTests { [Fact] public void GetConnections_WithoutStateOrDiskConfig_ReturnsEmpty() { var manager = new McpClientManager(); manager.GetConnections().Should().BeEmpty(); } [Fact] public async Task ConnectServerAsync_WithUnknownServer_ThrowsKeyNotFoundException() { var manager = new McpClientManager(); var act = async () => await manager.ConnectServerAsync("missing"); await act.Should().ThrowAsync(); } [Fact] public async Task DisconnectServerAsync_WithUnknownServer_CompletesWithoutThrowing() { var manager = new McpClientManager(); var act = async () => await manager.DisconnectServerAsync("missing"); await act.Should().NotThrowAsync(); } [Fact] public async Task ReconnectServerAsync_WithUnknownServer_CompletesWithoutThrowing() { var manager = new McpClientManager(); var act = async () => await manager.ReconnectServerAsync("missing"); await act.Should().NotThrowAsync(); } [Fact] public async Task AuthenticateServerAsync_WithBlankServerName_ThrowsArgumentException() { var manager = new McpClientManager(); var act = async () => await manager.AuthenticateServerAsync(" "); await act.Should().ThrowAsync(); } [Fact] public async Task AuthenticateServerAsync_WithUnknownServer_ThrowsKeyNotFoundException() { var manager = new McpClientManager(); var act = async () => await manager.AuthenticateServerAsync("missing"); await act.Should().ThrowAsync(); } }