mirror of
https://github.com/microsoft/agent-framework.git
synced 2026-06-16 21:04:09 +08:00
* add a2a agent * Update dotnet/src/Microsoft.Extensions.AI.Agents.A2A/A2AAgent.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * address pr review feedback * move unit tests for extension methods to the extensions folder * address pr review comments * address pr review comments * address pr review feedback * move a2a agent sample to console app * remove unnecessary Ids set for new projects in the solution file * remove unnecessary configuration --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
97 lines
2.9 KiB
C#
97 lines
2.9 KiB
C#
// Copyright (c) Microsoft. All rights reserved.
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text.Json;
|
|
using A2A;
|
|
|
|
namespace Microsoft.Extensions.AI.Agents.A2A.UnitTests;
|
|
|
|
/// <summary>
|
|
/// Unit tests for the <see cref="A2APartExtensions"/> class.
|
|
/// </summary>
|
|
public sealed class A2APartExtensionsTests
|
|
{
|
|
[Fact]
|
|
public void ToAIContent_WithTextPart_ReturnsTextContent()
|
|
{
|
|
// Arrange
|
|
var textPart = new TextPart { Text = "Hello, world!" };
|
|
|
|
// Act
|
|
var result = textPart.ToAIContent();
|
|
|
|
// Assert
|
|
Assert.NotNull(result);
|
|
Assert.Equal(textPart, result.RawRepresentation);
|
|
|
|
var textContent = Assert.IsType<TextContent>(result);
|
|
Assert.Equal("Hello, world!", textContent.Text);
|
|
}
|
|
|
|
[Fact]
|
|
public void ToAIContent_WithTextPartWithMetadata_ReturnsTextContentWithAdditionalProperties()
|
|
{
|
|
// Arrange
|
|
var metadata = new Dictionary<string, JsonElement>
|
|
{
|
|
["key1"] = JsonDocument.Parse("\"value1\"").RootElement,
|
|
["key2"] = JsonDocument.Parse("42").RootElement,
|
|
["key3"] = JsonDocument.Parse("true").RootElement
|
|
};
|
|
var textPart = new TextPart
|
|
{
|
|
Text = "Hello with metadata!",
|
|
Metadata = metadata
|
|
};
|
|
|
|
// Act
|
|
var result = textPart.ToAIContent();
|
|
|
|
// Assert
|
|
Assert.NotNull(result);
|
|
var textContent = Assert.IsType<TextContent>(result);
|
|
Assert.Equal("Hello with metadata!", textContent.Text);
|
|
Assert.NotNull(textContent.AdditionalProperties);
|
|
Assert.Equal(3, textContent.AdditionalProperties.Count);
|
|
Assert.True(textContent.AdditionalProperties.ContainsKey("key1"));
|
|
Assert.True(textContent.AdditionalProperties.ContainsKey("key2"));
|
|
Assert.True(textContent.AdditionalProperties.ContainsKey("key3"));
|
|
}
|
|
|
|
[Fact]
|
|
public void ToAIContent_WithFilePartWithFileWithUri_ReturnsHostedFileContent()
|
|
{
|
|
// Arrange
|
|
var uri = "https://example.com/file.txt";
|
|
var filePart = new FilePart { File = new FileWithUri { Uri = uri } };
|
|
|
|
// Act
|
|
var result = filePart.ToAIContent();
|
|
|
|
// Assert
|
|
Assert.NotNull(result);
|
|
Assert.Equal(filePart, result.RawRepresentation);
|
|
|
|
var hostedFileContent = Assert.IsType<HostedFileContent>(result);
|
|
Assert.Equal(uri, hostedFileContent.FileId);
|
|
Assert.Null(hostedFileContent.AdditionalProperties);
|
|
}
|
|
|
|
[Fact]
|
|
public void ToAIContent_WithCustomPartType_ThrowsNotSupportedException()
|
|
{
|
|
// Arrange
|
|
var customPart = new MockPart();
|
|
|
|
// Act & Assert
|
|
var exception = Assert.Throws<NotSupportedException>(() => customPart.ToAIContent());
|
|
Assert.Equal("Part type 'MockPart' is not supported.", exception.Message);
|
|
}
|
|
|
|
// Mock class for testing unsupported scenarios
|
|
private sealed class MockPart : Part
|
|
{
|
|
}
|
|
}
|