namespace AnthropicClient.Tests.Unit.Models; public class AnthropicErrorTests : SerializationTest { private readonly string _testApiErrorJson = @"{ ""type"": ""error"", ""error"": { ""type"": ""api_error"", ""message"": ""message"" } }"; private readonly string _testAuthenticationErrorJson = @"{ ""type"": ""error"", ""error"": { ""type"": ""authentication_error"", ""message"": ""message"" } }"; private readonly string _testRateLimitErrorJson = @"{ ""type"": ""error"", ""error"": { ""type"": ""rate_limit_error"", ""message"": ""message"" } }"; private readonly string _testPermissionErrorJson = @"{ ""type"": ""error"", ""error"": { ""type"": ""permission_error"", ""message"": ""message"" } }"; private readonly string _testNotFoundErrorJson = @"{ ""type"": ""error"", ""error"": { ""type"": ""not_found_error"", ""message"": ""message"" } }"; private readonly string _testOverloadedErrorJson = @"{ ""type"": ""error"", ""error"": { ""type"": ""overloaded_error"", ""message"": ""message"" } }"; private readonly string _testInvalidRequestErrorJson = @"{ ""type"": ""error"", ""error"": { ""type"": ""invalid_request_error"", ""message"": ""message"" } }"; [Fact] public void Constructor_WhenCalled_ItShouldInitializeProperties() { var apiError = new ApiError("message"); var error = new AnthropicError(apiError); error.Type.Should().Be("error"); error.Error.Should().BeSameAs(apiError); } [Fact] public void JsonSerialization_WhenSerialized_ItShouldBeExpectedShape() { var apiError = new ApiError("message"); var error = new AnthropicError(apiError); var json = Serialize(error); JsonAssert.Equal(_testApiErrorJson, json); } [Fact] public void JsonDeserialization_WhenDeserialized_ItShouldBeExpectedModel() { var error = Deserialize(_testApiErrorJson); error!.Type.Should().Be("error"); error.Error.Should().BeOfType(); error.Error!.Message.Should().Be("message"); } [Fact] public void JsonDeserialization_WhenDeserialized_ItShouldBeExpectedModelForAuthenticationError() { var error = Deserialize(_testAuthenticationErrorJson); error!.Type.Should().Be("error"); error.Error.Should().BeOfType(); error.Error!.Message.Should().Be("message"); } [Fact] public void JsonDeserialization_WhenDeserialized_ItShouldBeExpectedModelForRateLimitError() { var error = Deserialize(_testRateLimitErrorJson); error!.Type.Should().Be("error"); error.Error.Should().BeOfType(); error.Error!.Message.Should().Be("message"); } [Fact] public void JsonDeserialization_WhenDeserialized_ItShouldBeExpectedModelForPermissionError() { var error = Deserialize(_testPermissionErrorJson); error!.Type.Should().Be("error"); error.Error.Should().BeOfType(); error.Error!.Message.Should().Be("message"); } [Fact] public void JsonDeserialization_WhenDeserialized_ItShouldBeExpectedModelForNotFoundError() { var error = Deserialize(_testNotFoundErrorJson); error!.Type.Should().Be("error"); error.Error.Should().BeOfType(); error.Error!.Message.Should().Be("message"); } [Fact] public void JsonDeserialization_WhenDeserialized_ItShouldBeExpectedModelForOverloadedError() { var error = Deserialize(_testOverloadedErrorJson); error!.Type.Should().Be("error"); error.Error.Should().BeOfType(); error.Error!.Message.Should().Be("message"); } [Fact] public void JsonDeserialization_WhenDeserialized_ItShouldBeExpectedModelForInvalidRequestError() { var error = Deserialize(_testInvalidRequestErrorJson); error!.Type.Should().Be("error"); error.Error.Should().BeOfType(); error.Error!.Message.Should().Be("message"); } [Fact] public void JsonDeserialization_WhenDeserialized_ItShouldBeExpectedModelForUnknownError() { var json = @"{ ""type"": ""error"", ""error"": { ""type"": ""unknown_error"", ""message"": ""message"" } }"; var action = () => Deserialize(json); action.Should().Throw(); } }