using Xunit;
using Svrnty.MCP.Gateway.Infrastructure.Transport;
using Svrnty.MCP.Gateway.Core.Models;
namespace Svrnty.MCP.Gateway.Infrastructure.Tests.Transport;
///
/// Unit tests for StdioServerTransport following TDD approach.
/// Tests stdio transport implementation.
///
public class StdioServerTransportTests
{
[Fact]
public void Constructor_WithValidCommand_CreatesSuccessfully()
{
// Arrange & Act
var transport = new StdioServerTransport("dotnet", new[] { "run" });
// Assert
Assert.NotNull(transport);
Assert.False(transport.IsConnected);
}
[Fact]
public void Constructor_WithNullCommand_ThrowsException()
{
// Arrange, Act & Assert
Assert.Throws(() =>
new StdioServerTransport(null!, new[] { "arg" }));
}
[Fact]
public void IsConnected_BeforeConnect_ReturnsFalse()
{
// Arrange
var transport = new StdioServerTransport("echo", new[] { "test" });
// Act & Assert
Assert.False(transport.IsConnected);
}
[Fact]
public async Task SendRequestAsync_WithoutConnect_ThrowsException()
{
// Arrange
var transport = new StdioServerTransport("echo", new[] { "test" });
var request = new GatewayRequest { ToolName = "test" };
// Act & Assert
await Assert.ThrowsAsync(() =>
transport.SendRequestAsync(request, CancellationToken.None));
}
[Fact]
public void Dispose_MultipleTimesests_DoesNotThrow()
{
// Arrange
var transport = new StdioServerTransport("echo", new[] { "test" });
// Act & Assert
transport.Dispose();
transport.Dispose(); // Should not throw
}
}