using ChatBot.Models; using ChatBot.Models.Dto; using FluentAssertions; using OllamaSharp.Models.Chat; namespace ChatBot.Tests.Models; public class ChatSessionTests { [Fact] public void Constructor_ShouldInitializeProperties() { // Arrange & Act var session = new ChatSession(); // Assert session.ChatId.Should().Be(0); session.SessionId.Should().NotBeNullOrEmpty(); session.ChatType.Should().Be("private"); session.ChatTitle.Should().Be(string.Empty); session.Model.Should().Be(string.Empty); session.CreatedAt.Should().BeCloseTo(DateTime.UtcNow, TimeSpan.FromSeconds(1)); session.LastUpdatedAt.Should().BeCloseTo(DateTime.UtcNow, TimeSpan.FromSeconds(1)); session.GetAllMessages().Should().NotBeNull(); session.GetAllMessages().Should().BeEmpty(); } [Fact] public void AddUserMessage_ShouldAddMessageToSession() { // Arrange var session = new ChatSession(); var content = "Hello"; var username = "testuser"; // Act session.AddUserMessage(content, username); // Assert session.GetAllMessages().Should().HaveCount(1); var message = session.GetAllMessages().First(); message.Role.Should().Be(ChatRole.User); message.Content.Should().Be(content); } [Fact] public void AddAssistantMessage_ShouldAddMessageToSession() { // Arrange var session = new ChatSession(); var content = "Hello! How can I help you?"; // Act session.AddAssistantMessage(content); // Assert session.GetAllMessages().Should().HaveCount(1); var message = session.GetAllMessages().First(); message.Role.Should().Be(ChatRole.Assistant); message.Content.Should().Be(content); } [Fact] public void AddMessage_ShouldAddMessageToSession() { // Arrange var session = new ChatSession(); var content = "You are a helpful assistant."; var message = new ChatMessage { Role = ChatRole.System, Content = content }; // Act session.AddMessage(message); // Assert session.GetAllMessages().Should().HaveCount(1); var addedMessage = session.GetAllMessages().First(); addedMessage.Role.Should().Be(ChatRole.System); addedMessage.Content.Should().Be(content); } [Fact] public void ClearHistory_ShouldRemoveAllMessages() { // Arrange var session = new ChatSession(); session.AddUserMessage("Hello", "testuser"); session.AddAssistantMessage("Hi there!"); // Act session.ClearHistory(); // Assert session.GetAllMessages().Should().BeEmpty(); } [Fact] public void GetMessageCount_ShouldReturnCorrectCount() { // Arrange var session = new ChatSession(); session.AddUserMessage("Hello", "testuser"); session.AddAssistantMessage("Hi there!"); session.AddUserMessage("How are you?", "testuser"); // Act var count = session.GetMessageCount(); // Assert count.Should().Be(3); } [Fact] public void GetLastMessage_ShouldReturnLastMessage() { // Arrange var session = new ChatSession(); session.AddUserMessage("Hello", "testuser"); session.AddAssistantMessage("Hi there!"); session.AddUserMessage("How are you?", "testuser"); // Act var messages = session.GetAllMessages(); var lastMessage = messages.LastOrDefault(); // Assert lastMessage.Should().NotBeNull(); lastMessage!.Content.Should().Be("How are you?"); lastMessage.Role.Should().Be(ChatRole.User); } [Fact] public void GetLastMessage_ShouldReturnNull_WhenNoMessages() { // Arrange var session = new ChatSession(); // Act var messages = session.GetAllMessages(); var lastMessage = messages.LastOrDefault(); // Assert lastMessage.Should().BeNull(); } [Fact] public void AddMessage_ShouldUpdateLastUpdatedAt() { // Arrange var session = new ChatSession(); var originalTime = session.LastUpdatedAt; var message = new ChatMessage { Role = ChatRole.User, Content = "Test" }; // Act session.AddMessage(message); // Assert session.LastUpdatedAt.Should().BeAfter(originalTime); } [Fact] public void GetMessageCount_ShouldReturnZero_WhenNoMessages() { // Arrange var session = new ChatSession(); // Act var count = session.GetMessageCount(); // Assert count.Should().Be(0); } [Fact] public void GetMessageCount_ShouldReturnCorrectCount_WhenHasMessages() { // Arrange var session = new ChatSession(); session.AddUserMessage("Hello", "testuser"); // Act var count = session.GetMessageCount(); // Assert count.Should().Be(1); } }