using Xunit;
using Moq;
using OpenHarbor.MCP.Gateway.Core.Interfaces;
using OpenHarbor.MCP.Gateway.Core.Models;
namespace OpenHarbor.MCP.Gateway.Core.Tests.Infrastructure;
///
/// Unit tests for IServerTransport interface following TDD approach.
/// Tests transport communication contract.
///
public class IServerTransportTests
{
[Fact]
public async Task SendRequestAsync_WithValidRequest_ReturnsResponse()
{
// Arrange
var mockTransport = new Mock();
var request = new GatewayRequest
{
ToolName = "test_tool",
Arguments = new Dictionary { { "key", "value" } }
};
var expectedResponse = new GatewayResponse
{
Success = true,
Result = new Dictionary { { "data", "result" } }
};
mockTransport
.Setup(t => t.SendRequestAsync(It.IsAny(), It.IsAny()))
.ReturnsAsync(expectedResponse);
// Act
var response = await mockTransport.Object.SendRequestAsync(request, CancellationToken.None);
// Assert
Assert.NotNull(response);
Assert.True(response.Success);
mockTransport.Verify(t => t.SendRequestAsync(request, It.IsAny()), Times.Once);
}
[Fact]
public async Task ConnectAsync_OpensConnection()
{
// Arrange
var mockTransport = new Mock();
mockTransport
.Setup(t => t.ConnectAsync(It.IsAny()))
.Returns(Task.CompletedTask);
// Act
await mockTransport.Object.ConnectAsync(CancellationToken.None);
// Assert
mockTransport.Verify(t => t.ConnectAsync(It.IsAny()), Times.Once);
}
[Fact]
public async Task DisconnectAsync_ClosesConnection()
{
// Arrange
var mockTransport = new Mock();
mockTransport
.Setup(t => t.DisconnectAsync(It.IsAny()))
.Returns(Task.CompletedTask);
// Act
await mockTransport.Object.DisconnectAsync(CancellationToken.None);
// Assert
mockTransport.Verify(t => t.DisconnectAsync(It.IsAny()), Times.Once);
}
[Fact]
public void IsConnected_ReturnsConnectionState()
{
// Arrange
var mockTransport = new Mock();
mockTransport.Setup(t => t.IsConnected).Returns(true);
// Act
var isConnected = mockTransport.Object.IsConnected;
// Assert
Assert.True(isConnected);
}
}