add tests
This commit is contained in:
363
ChatBot.Tests/Models/ChatMessageTests.cs
Normal file
363
ChatBot.Tests/Models/ChatMessageTests.cs
Normal file
@@ -0,0 +1,363 @@
|
||||
using ChatBot.Models.Dto;
|
||||
using FluentAssertions;
|
||||
using OllamaSharp.Models.Chat;
|
||||
|
||||
namespace ChatBot.Tests.Models;
|
||||
|
||||
public class ChatMessageTests
|
||||
{
|
||||
[Fact]
|
||||
public void Constructor_WithRequiredProperties_ShouldInitializeCorrectly()
|
||||
{
|
||||
// Arrange
|
||||
var content = "Hello, world!";
|
||||
var role = ChatRole.User;
|
||||
|
||||
// Act
|
||||
var message = new ChatMessage { Content = content, Role = role };
|
||||
|
||||
// Assert
|
||||
message.Content.Should().Be(content);
|
||||
message.Role.Should().Be(role);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Content_ShouldBeSettable()
|
||||
{
|
||||
// Arrange
|
||||
var message = new ChatMessage { Content = "Initial content", Role = ChatRole.User };
|
||||
var newContent = "Updated content";
|
||||
|
||||
// Act
|
||||
message.Content = newContent;
|
||||
|
||||
// Assert
|
||||
message.Content.Should().Be(newContent);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Role_ShouldBeSettable()
|
||||
{
|
||||
// Arrange
|
||||
var message = new ChatMessage { Content = "Test content", Role = ChatRole.User };
|
||||
var newRole = ChatRole.Assistant;
|
||||
|
||||
// Act
|
||||
message.Role = newRole;
|
||||
|
||||
// Assert
|
||||
message.Role.Should().Be(newRole);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("")]
|
||||
[InlineData("Short message")]
|
||||
[InlineData(
|
||||
"A very long message that contains a lot of text and should still be valid for the content field"
|
||||
)]
|
||||
[InlineData("Message with special characters: !@#$%^&*()_+-=[]{}|;':\",./<>?")]
|
||||
[InlineData("Message with unicode: Привет мир! 🌍")]
|
||||
[InlineData("Message with newlines:\nLine 1\nLine 2")]
|
||||
[InlineData("Message with tabs:\tTab content")]
|
||||
public void Content_ShouldAcceptVariousValues(string content)
|
||||
{
|
||||
// Arrange
|
||||
var message = new ChatMessage { Content = "Initial", Role = ChatRole.User };
|
||||
|
||||
// Act
|
||||
message.Content = content;
|
||||
|
||||
// Assert
|
||||
message.Content.Should().Be(content);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Role_ShouldAcceptSystemRole()
|
||||
{
|
||||
// Arrange
|
||||
var message = new ChatMessage { Content = "Test content", Role = ChatRole.User };
|
||||
|
||||
// Act
|
||||
message.Role = ChatRole.System;
|
||||
|
||||
// Assert
|
||||
message.Role.Should().Be(ChatRole.System);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Role_ShouldAcceptUserRole()
|
||||
{
|
||||
// Arrange
|
||||
var message = new ChatMessage { Content = "Test content", Role = ChatRole.System };
|
||||
|
||||
// Act
|
||||
message.Role = ChatRole.User;
|
||||
|
||||
// Assert
|
||||
message.Role.Should().Be(ChatRole.User);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Role_ShouldAcceptAssistantRole()
|
||||
{
|
||||
// Arrange
|
||||
var message = new ChatMessage { Content = "Test content", Role = ChatRole.User };
|
||||
|
||||
// Act
|
||||
message.Role = ChatRole.Assistant;
|
||||
|
||||
// Assert
|
||||
message.Role.Should().Be(ChatRole.Assistant);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AllProperties_ShouldBeMutable()
|
||||
{
|
||||
// Arrange
|
||||
var message = new ChatMessage { Content = "Initial content", Role = ChatRole.User };
|
||||
|
||||
// Act
|
||||
message.Content = "Updated content";
|
||||
message.Role = ChatRole.Assistant;
|
||||
|
||||
// Assert
|
||||
message.Content.Should().Be("Updated content");
|
||||
message.Role.Should().Be(ChatRole.Assistant);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Message_ShouldSupportSystemRole()
|
||||
{
|
||||
// Arrange
|
||||
var content = "You are a helpful assistant.";
|
||||
var role = ChatRole.System;
|
||||
|
||||
// Act
|
||||
var message = new ChatMessage { Content = content, Role = role };
|
||||
|
||||
// Assert
|
||||
message.Content.Should().Be(content);
|
||||
message.Role.Should().Be(ChatRole.System);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Message_ShouldSupportUserRole()
|
||||
{
|
||||
// Arrange
|
||||
var content = "Hello, how are you?";
|
||||
var role = ChatRole.User;
|
||||
|
||||
// Act
|
||||
var message = new ChatMessage { Content = content, Role = role };
|
||||
|
||||
// Assert
|
||||
message.Content.Should().Be(content);
|
||||
message.Role.Should().Be(ChatRole.User);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Message_ShouldSupportAssistantRole()
|
||||
{
|
||||
// Arrange
|
||||
var content = "I'm doing well, thank you!";
|
||||
var role = ChatRole.Assistant;
|
||||
|
||||
// Act
|
||||
var message = new ChatMessage { Content = content, Role = role };
|
||||
|
||||
// Assert
|
||||
message.Content.Should().Be(content);
|
||||
message.Role.Should().Be(ChatRole.Assistant);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Message_WithEmptyContent_ShouldBeValid()
|
||||
{
|
||||
// Arrange
|
||||
var content = "";
|
||||
var role = ChatRole.User;
|
||||
|
||||
// Act
|
||||
var message = new ChatMessage { Content = content, Role = role };
|
||||
|
||||
// Assert
|
||||
message.Content.Should().Be(content);
|
||||
message.Role.Should().Be(role);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Message_WithWhitespaceContent_ShouldBeValid()
|
||||
{
|
||||
// Arrange
|
||||
var content = " \t\n ";
|
||||
var role = ChatRole.User;
|
||||
|
||||
// Act
|
||||
var message = new ChatMessage { Content = content, Role = role };
|
||||
|
||||
// Assert
|
||||
message.Content.Should().Be(content);
|
||||
message.Role.Should().Be(role);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Message_WithVeryLongContent_ShouldBeValid()
|
||||
{
|
||||
// Arrange
|
||||
var content = new string('A', 10000); // 10,000 characters
|
||||
var role = ChatRole.Assistant;
|
||||
|
||||
// Act
|
||||
var message = new ChatMessage { Content = content, Role = role };
|
||||
|
||||
// Assert
|
||||
message.Content.Should().Be(content);
|
||||
message.Role.Should().Be(role);
|
||||
message.Content.Length.Should().Be(10000);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Message_WithJsonContent_ShouldBeValid()
|
||||
{
|
||||
// Arrange
|
||||
var content = """{"key": "value", "number": 123, "array": [1, 2, 3]}""";
|
||||
var role = ChatRole.Assistant;
|
||||
|
||||
// Act
|
||||
var message = new ChatMessage { Content = content, Role = role };
|
||||
|
||||
// Assert
|
||||
message.Content.Should().Be(content);
|
||||
message.Role.Should().Be(role);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Message_WithXmlContent_ShouldBeValid()
|
||||
{
|
||||
// Arrange
|
||||
var content = "<root><item>value</item></root>";
|
||||
var role = ChatRole.Assistant;
|
||||
|
||||
// Act
|
||||
var message = new ChatMessage { Content = content, Role = role };
|
||||
|
||||
// Assert
|
||||
message.Content.Should().Be(content);
|
||||
message.Role.Should().Be(role);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Message_WithMarkdownContent_ShouldBeValid()
|
||||
{
|
||||
// Arrange
|
||||
var content = "# Header\n\n**Bold text** and *italic text*\n\n- List item 1\n- List item 2";
|
||||
var role = ChatRole.Assistant;
|
||||
|
||||
// Act
|
||||
var message = new ChatMessage { Content = content, Role = role };
|
||||
|
||||
// Assert
|
||||
message.Content.Should().Be(content);
|
||||
message.Role.Should().Be(role);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Message_WithCodeContent_ShouldBeValid()
|
||||
{
|
||||
// Arrange
|
||||
var content = "```csharp\npublic class Test { }\n```";
|
||||
var role = ChatRole.Assistant;
|
||||
|
||||
// Act
|
||||
var message = new ChatMessage { Content = content, Role = role };
|
||||
|
||||
// Assert
|
||||
message.Content.Should().Be(content);
|
||||
message.Role.Should().Be(role);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Message_WithDefaultRole_ShouldBeValid()
|
||||
{
|
||||
// Arrange
|
||||
var content = "Test message";
|
||||
|
||||
// Act
|
||||
var message = new ChatMessage { Content = content, Role = default(ChatRole) };
|
||||
|
||||
// Assert
|
||||
message.Content.Should().Be(content);
|
||||
message.Role.Should().Be(default(ChatRole));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Message_ShouldBeComparableByContent()
|
||||
{
|
||||
// Arrange
|
||||
var message1 = new ChatMessage { Content = "Same content", Role = ChatRole.User };
|
||||
var message2 = new ChatMessage { Content = "Same content", Role = ChatRole.Assistant };
|
||||
|
||||
// Act & Assert
|
||||
message1.Content.Should().Be(message2.Content);
|
||||
message1.Role.Should().NotBe(message2.Role);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Message_ShouldBeComparableByRole()
|
||||
{
|
||||
// Arrange
|
||||
var message1 = new ChatMessage { Content = "Different content 1", Role = ChatRole.User };
|
||||
var message2 = new ChatMessage { Content = "Different content 2", Role = ChatRole.User };
|
||||
|
||||
// Act & Assert
|
||||
message1.Role.Should().Be(message2.Role);
|
||||
message1.Content.Should().NotBe(message2.Content);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Message_ShouldSupportAllRoleTypes()
|
||||
{
|
||||
// Arrange & Act
|
||||
var systemMessage = new ChatMessage { Content = "System message", Role = ChatRole.System };
|
||||
var userMessage = new ChatMessage { Content = "User message", Role = ChatRole.User };
|
||||
var assistantMessage = new ChatMessage
|
||||
{
|
||||
Content = "Assistant message",
|
||||
Role = ChatRole.Assistant,
|
||||
};
|
||||
// Assert
|
||||
systemMessage.Role.Should().Be(ChatRole.System);
|
||||
userMessage.Role.Should().Be(ChatRole.User);
|
||||
assistantMessage.Role.Should().Be(ChatRole.Assistant);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Message_ShouldHandleSpecialCharacters()
|
||||
{
|
||||
// Arrange
|
||||
var content = "Special chars: !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~";
|
||||
var role = ChatRole.User;
|
||||
|
||||
// Act
|
||||
var message = new ChatMessage { Content = content, Role = role };
|
||||
|
||||
// Assert
|
||||
message.Content.Should().Be(content);
|
||||
message.Role.Should().Be(role);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Message_ShouldHandleUnicodeCharacters()
|
||||
{
|
||||
// Arrange
|
||||
var content = "Unicode: 中文 العربية русский 日本語 한국어";
|
||||
var role = ChatRole.Assistant;
|
||||
|
||||
// Act
|
||||
var message = new ChatMessage { Content = content, Role = role };
|
||||
|
||||
// Assert
|
||||
message.Content.Should().Be(content);
|
||||
message.Role.Should().Be(role);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user