svrnty-mcp-client/tests/Svrnty.MCP.Client.Core.Tests/Infrastructure/McpClientTests.cs
Svrnty 97880406dc refactor: rename OpenHarbor.MCP to Svrnty.MCP across all libraries
- Renamed all directories: OpenHarbor.MCP.* → Svrnty.MCP.*
- Updated all namespaces in 179 C# files
- Renamed 20 .csproj files and 3 .sln files
- Updated 193 documentation references
- Updated 33 references in main CODEX codebase
- Updated Codex.sln with new paths
- Build verified: 0 errors

Preparing for extraction to standalone repositories.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-22 21:04:17 -04:00

177 lines
4.7 KiB
C#

using Moq;
using Svrnty.MCP.Client.Core.Abstractions;
using Svrnty.MCP.Client.Core.Exceptions;
using Svrnty.MCP.Client.Core.Models;
using Svrnty.MCP.Client.Infrastructure;
using Xunit;
namespace Svrnty.MCP.Client.Core.Tests.Infrastructure;
/// <summary>
/// Unit tests for McpClient following TDD approach.
/// Tests client initialization, server management, and tool operations.
/// </summary>
public class McpClientTests
{
[Fact]
public void Constructor_WithServerConfigs_CreatesClient()
{
// Arrange
var configs = new List<McpServerConfig>
{
CreateTestConfig("server1"),
CreateTestConfig("server2")
};
// Act
var client = new McpClient(configs);
// Assert
Assert.NotNull(client);
}
[Fact]
public async Task ConnectAllAsync_WithMultipleServers_ConnectsAll()
{
// Arrange
var configs = new List<McpServerConfig>
{
CreateTestConfig("server1"),
CreateTestConfig("server2")
};
var client = new McpClient(configs);
// Act
await client.ConnectAllAsync();
// Assert
var servers = await client.GetConnectedServersAsync();
Assert.Equal(2, servers.Count());
}
[Fact]
public async Task DisconnectAllAsync_AfterConnect_DisconnectsAll()
{
// Arrange
var configs = new List<McpServerConfig> { CreateTestConfig("server1") };
var client = new McpClient(configs);
await client.ConnectAllAsync();
// Act
await client.DisconnectAllAsync();
// Assert
var servers = await client.GetConnectedServersAsync();
Assert.Empty(servers);
}
[Fact]
public async Task GetConnectedServersAsync_WithNoServers_ReturnsEmpty()
{
// Arrange
var client = new McpClient(new List<McpServerConfig>());
// Act
var servers = await client.GetConnectedServersAsync();
// Assert
Assert.Empty(servers);
}
[Fact]
public async Task ListToolsAsync_WithNonExistentServer_ThrowsServerNotFoundException()
{
// Arrange
var client = new McpClient(new List<McpServerConfig>());
// Act & Assert
await Assert.ThrowsAsync<ServerNotFoundException>(
async () => await client.ListToolsAsync("non-existent-server")
);
}
[Fact]
public async Task CallToolAsync_WithNonExistentServer_ThrowsServerNotFoundException()
{
// Arrange
var client = new McpClient(new List<McpServerConfig>());
// Act & Assert
await Assert.ThrowsAsync<ServerNotFoundException>(
async () => await client.CallToolAsync("non-existent-server", "test_tool")
);
}
[Fact]
public async Task PingAsync_WithNonExistentServer_ThrowsServerNotFoundException()
{
// Arrange
var client = new McpClient(new List<McpServerConfig>());
// Act & Assert
await Assert.ThrowsAsync<ServerNotFoundException>(
async () => await client.PingAsync("non-existent-server")
);
}
[Fact]
public async Task DisposeAsync_AfterConnect_DisposesCleanly()
{
// Arrange
var configs = new List<McpServerConfig> { CreateTestConfig("server1") };
var client = new McpClient(configs);
await client.ConnectAllAsync();
// Act
await client.DisposeAsync();
// Assert
var servers = await client.GetConnectedServersAsync();
Assert.Empty(servers);
}
[Fact]
public async Task ListToolsAsync_WithConnectedServer_ReturnsTools()
{
// Arrange
var configs = new List<McpServerConfig> { CreateTestConfig("server1") };
var client = new McpClient(configs);
await client.ConnectAllAsync();
// Act
var tools = await client.ListToolsAsync("server1");
// Assert
Assert.NotNull(tools);
}
[Fact]
public async Task CallToolAsync_WithConnectedServer_ReturnsResult()
{
// Arrange
var configs = new List<McpServerConfig> { CreateTestConfig("server1") };
var client = new McpClient(configs);
await client.ConnectAllAsync();
// Act
var result = await client.CallToolAsync("server1", "test_tool");
// Assert
Assert.NotNull(result);
}
private static McpServerConfig CreateTestConfig(string name)
{
return new McpServerConfig
{
Name = name,
Transport = new StdioTransportConfig
{
Type = "Stdio",
Command = "echo",
Args = new[] { "test" }
}
};
}
}