File: Contents\ErrorContentTests.cs
Project: ..\..\..\test\Libraries\Microsoft.Extensions.AI.Abstractions.Tests\Microsoft.Extensions.AI.Abstractions.Tests.csproj (Microsoft.Extensions.AI.Abstractions.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.Text.Json;
using Xunit;
 
namespace Microsoft.Extensions.AI;
 
public class ErrorContentTests
{
    [Fact]
    public void Constructor_NormalizesNullToEmpty()
    {
        ErrorContent content = new(null!);
        Assert.Empty(content.Message);
 
        content.Message = "test";
        Assert.Equal("test", content.Message);
 
        content.Message = null!;
        Assert.Empty(content.Message);
    }
 
    [Fact]
    public void Constructor_ShouldInitializeProperties()
    {
        // Arrange
        string errorMessage = "Error occurred";
        string errorCode = "ERR001";
        string errorDetails = "Something went wrong";
 
        // Act
        var errorContent = new ErrorContent(errorMessage)
        {
            ErrorCode = errorCode,
            Details = errorDetails
        };
 
        // Assert
        Assert.Equal(errorMessage, errorContent.Message);
        Assert.Equal(errorCode, errorContent.ErrorCode);
        Assert.Equal(errorDetails, errorContent.Details);
    }
 
    [Fact]
    public void JsonSerialization_ShouldSerializeAndDeserializeCorrectly()
    {
        // Arrange
        var errorContent = new ErrorContent("Error occurred")
        {
            ErrorCode = "ERR001",
            Details = "Something went wrong"
        };
        JsonSerializerOptions options = new(AIJsonUtilities.DefaultOptions) { PropertyNamingPolicy = JsonNamingPolicy.CamelCase };
 
        // Act
        var json = JsonSerializer.Serialize(errorContent, options);
        var deserializedErrorContent = JsonSerializer.Deserialize<ErrorContent>(json, options);
 
        // Assert
        Assert.NotNull(deserializedErrorContent);
        Assert.Equal(errorContent.Message, deserializedErrorContent!.Message);
        Assert.Equal(errorContent.ErrorCode, deserializedErrorContent.ErrorCode);
        Assert.Equal(errorContent.Details, deserializedErrorContent.Details);
    }
 
    [Fact]
    public void JsonDeserialization_KnownPayload()
    {
        const string Json = """
            {
              "$type": "error",
              "message": "Error occurred",
              "errorCode": "ERR001",
              "details": "Something went wrong",
              "additionalProperties": {
                "severity": "high"
              }
            }
            """;
 
        AIContent? result = JsonSerializer.Deserialize<AIContent>(Json, AIJsonUtilities.DefaultOptions);
 
        Assert.NotNull(result);
        var errorContent = Assert.IsType<ErrorContent>(result);
        Assert.Equal("Error occurred", errorContent.Message);
        Assert.Equal("ERR001", errorContent.ErrorCode);
        Assert.Equal("Something went wrong", errorContent.Details);
        Assert.NotNull(errorContent.AdditionalProperties);
        Assert.Equal("high", errorContent.AdditionalProperties["severity"]?.ToString());
    }
}