namespace AnthropicClient.Tests.Unit.Models; public class ChatMessageTests : SerializationTest { private readonly string _testJson = @"{ ""role"": ""assistant"", ""content"": [ { ""text"": ""text"", ""type"": ""text"" } ] }"; [Fact] public void Constructor_WhenCalled_ItShouldInitializeProperties() { var role = "assistant"; var content = new List { new TextContent("text") }; var chatMessage = new ChatMessage(role, content); chatMessage.Role.Should().Be(role); chatMessage.Content.Should().BeSameAs(content); } [Fact] public void Constructor_WhenCalledAndRoleIsNull_ItShouldThrowArgumentNullException() { var content = new List { new TextContent("text") }; var action = () => new ChatMessage(null!, content); action.Should().Throw(); } [Fact] public void Constructor_WhenCalledAndContentIsNull_ItShouldThrowArgumentNullException() { var role = "assistant"; var action = () => new ChatMessage(role, null!); action.Should().Throw(); } [Fact] public void Constructor_WhenCalledAndRoleIsInvalid_ItShouldThrowArgumentException() { var role = "invalid"; var content = new List { new TextContent("text") }; var action = () => new ChatMessage(role, content); action.Should().Throw(); } [Fact] public void JsonSerialization_WhenSerialized_ItShouldReturnJsonString() { var role = "assistant"; var content = new List { new TextContent("text") }; var chatMessage = new ChatMessage(role, content); var actual = Serialize(chatMessage); JsonAssert.Equal(_testJson, actual); } [Fact] public void JsonDeserialization_WhenDeserialized_ItShouldReturnChatMessage() { var chatMessage = Deserialize(_testJson); chatMessage.Should().NotBeNull(); chatMessage!.Role.Should().Be("assistant"); chatMessage.Content.Should().HaveCount(1); chatMessage.Content[0].Should().BeOfType(); chatMessage.Content[0].As().Text.Should().Be("text"); } }