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); } }