using Xunit;
using OpenHarbor.MCP.Gateway.Core.Models;
namespace OpenHarbor.MCP.Gateway.Core.Tests.Models;
///
/// Unit tests for ServerInfo model following TDD approach.
/// Tests server metadata representation.
///
public class ServerInfoTests
{
[Fact]
public void ServerInfo_WithValidData_CreatesSuccessfully()
{
// Arrange
var now = DateTime.UtcNow;
// Act
var serverInfo = new ServerInfo
{
Id = "test-server",
Name = "Test Server",
IsHealthy = true,
LastHealthCheck = now,
ResponseTime = TimeSpan.FromMilliseconds(50),
Metadata = new Dictionary
{
{ "region", "us-east" },
{ "version", "1.0.0" }
}
};
// Assert
Assert.Equal("test-server", serverInfo.Id);
Assert.Equal("Test Server", serverInfo.Name);
Assert.True(serverInfo.IsHealthy);
Assert.Equal(now, serverInfo.LastHealthCheck);
Assert.Equal(50, serverInfo.ResponseTime?.TotalMilliseconds);
Assert.NotNull(serverInfo.Metadata);
Assert.Equal("us-east", serverInfo.Metadata["region"]);
}
[Fact]
public void ServerInfo_DefaultState_HasEmptyId()
{
// Arrange & Act
var serverInfo = new ServerInfo();
// Assert
Assert.Equal(string.Empty, serverInfo.Id);
Assert.Equal(string.Empty, serverInfo.Name);
Assert.False(serverInfo.IsHealthy);
Assert.Null(serverInfo.LastHealthCheck);
Assert.Null(serverInfo.ResponseTime);
Assert.Null(serverInfo.Metadata);
}
[Fact]
public void ServerInfo_WithMetadata_StoresCorrectly()
{
// Arrange & Act
var serverInfo = new ServerInfo
{
Id = "metadata-test",
Metadata = new Dictionary
{
{ "environment", "production" },
{ "datacenter", "dc1" }
}
};
// Assert
Assert.NotNull(serverInfo.Metadata);
Assert.Equal(2, serverInfo.Metadata.Count);
Assert.Equal("production", serverInfo.Metadata["environment"]);
Assert.Equal("dc1", serverInfo.Metadata["datacenter"]);
}
}