Files
agent-framework/dotnet/tests/Microsoft.Agents.AI.Workflows.Declarative.UnitTests/CodeGen/InvokeAzureAgentTemplateTest.cs
Chris 75a8335af5 .NET - [Breaking]: Update Declarative Object Model + Dependencies (#3017)
* Builds locally and tests pass

* Fix typo

* Reverted nuget config change to remove internal feed and map to new public object model package with renames.

* Renaming Bot object model in additional sample.

---------

Co-authored-by: Peter Ibekwe <peibekwe@microsoft.com>
2026-01-28 20:00:37 +00:00

141 lines
4.5 KiB
C#

// Copyright (c) Microsoft. All rights reserved.
using Microsoft.Agents.AI.Workflows.Declarative.CodeGen;
using Microsoft.Agents.AI.Workflows.Declarative.Kit;
using Microsoft.Agents.ObjectModel;
using Xunit.Abstractions;
namespace Microsoft.Agents.AI.Workflows.Declarative.UnitTests.CodeGen;
public class InvokeAzureAgentTemplateTest(ITestOutputHelper output) : WorkflowActionTemplateTest(output)
{
[Fact]
public void LiteralConversation()
{
// Act, Assert
this.ExecuteTest(
nameof(LiteralConversation),
StringExpression.Literal("asst_123abc"),
StringExpression.Literal("conv_123abc"),
messagesVariable: null);
}
[Fact]
public void VariableConversation()
{
// Act, Assert
this.ExecuteTest(
nameof(VariableConversation),
StringExpression.Variable(PropertyPath.GlobalVariable("TestAgent")),
StringExpression.Variable(PropertyPath.TopicVariable("TestConversation")),
"MyMessages",
BoolExpression.Literal(true));
}
[Fact]
public void ExpressionAutosend()
{
// Act, Assert
this.ExecuteTest(
nameof(VariableConversation),
StringExpression.Literal("asst_123abc"),
StringExpression.Variable(PropertyPath.TopicVariable("TestConversation")),
"MyMessages",
BoolExpression.Expression("1 < 2"));
}
[Fact]
public void InputMessagesVariable()
{
// Act, Assert
this.ExecuteTest(
nameof(VariableConversation),
StringExpression.Literal("asst_123abc"),
StringExpression.Variable(PropertyPath.TopicVariable("TestConversation")),
"MyMessages",
messages: ValueExpression.Variable(PropertyPath.TopicVariable("TestConversation")));
}
[Fact]
public void InputMessagesExpression()
{
// Act, Assert
this.ExecuteTest(
nameof(VariableConversation),
StringExpression.Literal("asst_123abc"),
StringExpression.Literal("conv_123abc"),
"MyMessages",
messages: ValueExpression.Expression("[UserMessage(System.LastMessageText)]"));
}
private void ExecuteTest(
string displayName,
StringExpression.Builder agentName,
StringExpression.Builder conversation,
string? messagesVariable = null,
BoolExpression.Builder? autoSend = null,
ValueExpression.Builder? messages = null)
{
// Arrange
InvokeAzureAgent model =
this.CreateModel(
displayName,
agentName,
conversation,
messagesVariable,
autoSend,
messages);
// Act
InvokeAzureAgentTemplate template = new(model);
string workflowCode = template.TransformText();
this.Output.WriteLine(workflowCode.Trim());
// Assert
AssertGeneratedCode<AgentExecutor>(template.Id, workflowCode);
AssertAgentProvider(template.UseAgentProvider, workflowCode);
AssertOptionalAssignment(model.Output?.Messages?.Path, workflowCode);
}
private InvokeAzureAgent CreateModel(
string displayName,
StringExpression.Builder agentName,
StringExpression.Builder conversation,
string? messagesVariable = null,
BoolExpression.Builder? autoSend = null,
ValueExpression.Builder? messages = null)
{
InitializablePropertyPath? outputMessages = null;
if (messagesVariable is not null)
{
outputMessages = PropertyPath.Create(FormatVariablePath(messagesVariable));
}
InvokeAzureAgent.Builder actionBuilder =
new()
{
Id = this.CreateActionId("invoke_agent"),
DisplayName = this.FormatDisplayName(displayName),
ConversationId = conversation,
Agent =
new AzureAgentUsage.Builder
{
Name = agentName,
},
Input =
new AzureAgentInput.Builder
{
Messages = messages,
},
Output =
new AzureAgentOutput.Builder
{
AutoSend = autoSend,
Messages = outputMessages,
},
};
return actionBuilder.Build();
}
}