// Copyright (c) Microsoft. All rights reserved. using System.Collections.Generic; using System.Text.Json; using Microsoft.Extensions.AI; namespace Microsoft.Agents.AI.A2A.UnitTests; /// /// Unit tests for the class. /// public sealed class AdditionalPropertiesDictionaryExtensionsTests { [Fact] public void ToA2AMetadata_WithNullAdditionalProperties_ReturnsNull() { // Arrange AdditionalPropertiesDictionary? additionalProperties = null; // Act Dictionary? result = additionalProperties.ToA2AMetadata(); // Assert Assert.Null(result); } [Fact] public void ToA2AMetadata_WithEmptyAdditionalProperties_ReturnsNull() { // Arrange AdditionalPropertiesDictionary additionalProperties = []; // Act Dictionary? result = additionalProperties.ToA2AMetadata(); // Assert Assert.Null(result); } [Fact] public void ToA2AMetadata_WithStringValue_ReturnsMetadataWithJsonElement() { // Arrange AdditionalPropertiesDictionary additionalProperties = new() { { "stringKey", "stringValue" } }; // Act Dictionary? result = additionalProperties.ToA2AMetadata(); // Assert Assert.NotNull(result); Assert.Single(result); Assert.True(result.ContainsKey("stringKey")); Assert.Equal("stringValue", result["stringKey"].GetString()); } [Fact] public void ToA2AMetadata_WithNumericValue_ReturnsMetadataWithJsonElement() { // Arrange AdditionalPropertiesDictionary additionalProperties = new() { { "numberKey", 42 } }; // Act Dictionary? result = additionalProperties.ToA2AMetadata(); // Assert Assert.NotNull(result); Assert.Single(result); Assert.True(result.ContainsKey("numberKey")); Assert.Equal(42, result["numberKey"].GetInt32()); } [Fact] public void ToA2AMetadata_WithBooleanValue_ReturnsMetadataWithJsonElement() { // Arrange AdditionalPropertiesDictionary additionalProperties = new() { { "booleanKey", true } }; // Act Dictionary? result = additionalProperties.ToA2AMetadata(); // Assert Assert.NotNull(result); Assert.Single(result); Assert.True(result.ContainsKey("booleanKey")); Assert.True(result["booleanKey"].GetBoolean()); } [Fact] public void ToA2AMetadata_WithMultipleProperties_ReturnsMetadataWithAllProperties() { // Arrange AdditionalPropertiesDictionary additionalProperties = new() { { "stringKey", "stringValue" }, { "numberKey", 42 }, { "booleanKey", true } }; // Act Dictionary? result = additionalProperties.ToA2AMetadata(); // Assert Assert.NotNull(result); Assert.Equal(3, result.Count); Assert.True(result.ContainsKey("stringKey")); Assert.Equal("stringValue", result["stringKey"].GetString()); Assert.True(result.ContainsKey("numberKey")); Assert.Equal(42, result["numberKey"].GetInt32()); Assert.True(result.ContainsKey("booleanKey")); Assert.True(result["booleanKey"].GetBoolean()); } [Fact] public void ToA2AMetadata_WithArrayValue_ReturnsMetadataWithJsonElement() { // Arrange int[] arrayValue = [1, 2, 3]; AdditionalPropertiesDictionary additionalProperties = new() { { "arrayKey", arrayValue } }; // Act Dictionary? result = additionalProperties.ToA2AMetadata(); // Assert Assert.NotNull(result); Assert.Single(result); Assert.True(result.ContainsKey("arrayKey")); Assert.Equal(JsonValueKind.Array, result["arrayKey"].ValueKind); Assert.Equal(3, result["arrayKey"].GetArrayLength()); } [Fact] public void ToA2AMetadata_WithNullValue_ReturnsMetadataWithNullJsonElement() { // Arrange AdditionalPropertiesDictionary additionalProperties = new() { { "nullKey", null! } }; // Act Dictionary? result = additionalProperties.ToA2AMetadata(); // Assert Assert.NotNull(result); Assert.Single(result); Assert.True(result.ContainsKey("nullKey")); Assert.Equal(JsonValueKind.Null, result["nullKey"].ValueKind); } [Fact] public void ToA2AMetadata_WithJsonElementValue_ReturnsMetadataWithJsonElement() { // Arrange JsonElement jsonElement = JsonSerializer.SerializeToElement(new { name = "test", value = 123 }); AdditionalPropertiesDictionary additionalProperties = new() { { "jsonElementKey", jsonElement } }; // Act Dictionary? result = additionalProperties.ToA2AMetadata(); // Assert Assert.NotNull(result); Assert.Single(result); Assert.True(result.ContainsKey("jsonElementKey")); Assert.Equal(JsonValueKind.Object, result["jsonElementKey"].ValueKind); Assert.Equal("test", result["jsonElementKey"].GetProperty("name").GetString()); Assert.Equal(123, result["jsonElementKey"].GetProperty("value").GetInt32()); } }