db620d33df
CodeQL / Analyze (csharp) (push) Waiting to run
CodeQL / Analyze (python) (push) Waiting to run
dotnet-build-and-test / dotnet-test-functions (push) Has been cancelled
dotnet-build-and-test / paths-filter (push) Has been cancelled
dotnet-build-and-test / dotnet-build (Debug, windows-latest, net9.0) (push) Has been cancelled
dotnet-build-and-test / dotnet-build (Release, ubuntu-latest, net10.0) (push) Has been cancelled
dotnet-build-and-test / dotnet-build (Release, ubuntu-latest, net8.0) (push) Has been cancelled
dotnet-build-and-test / dotnet-build (Release, windows-latest, net472) (push) Has been cancelled
dotnet-build-and-test / dotnet-test (Release, integration, true, ubuntu-latest, net10.0) (push) Has been cancelled
dotnet-build-and-test / dotnet-test (Release, integration, true, windows-latest, net472) (push) Has been cancelled
dotnet-build-and-test / dotnet-foundry-hosted-it (push) Has been cancelled
dotnet-build-and-test / dotnet-build-and-test-check (push) Has been cancelled
dotnet-build-and-test / Integration Test Report (push) Has been cancelled
122 lines
5.3 KiB
C#
122 lines
5.3 KiB
C#
// Copyright (c) Microsoft. All rights reserved.
|
|
|
|
using System.Text.Json;
|
|
using Microsoft.Azure.Functions.Worker.Core.FunctionMetadata;
|
|
|
|
namespace Microsoft.Agents.AI.Hosting.AzureFunctions.UnitTests;
|
|
|
|
public sealed class FunctionMetadataFactoryTests
|
|
{
|
|
[Fact]
|
|
public void CreateEntityTrigger_SetsCorrectNameAndBindings()
|
|
{
|
|
DefaultFunctionMetadata metadata = FunctionMetadataFactory.CreateEntityTrigger("myAgent");
|
|
|
|
Assert.Equal("dafx-myAgent", metadata.Name);
|
|
Assert.Equal("dotnet-isolated", metadata.Language);
|
|
Assert.Equal(BuiltInFunctions.RunAgentEntityFunctionEntryPoint, metadata.EntryPoint);
|
|
Assert.NotNull(metadata.RawBindings);
|
|
Assert.Equal(2, metadata.RawBindings.Count);
|
|
Assert.Contains("entityTrigger", metadata.RawBindings[0]);
|
|
Assert.Contains("durableClient", metadata.RawBindings[1]);
|
|
}
|
|
|
|
[Fact]
|
|
public void CreateHttpTrigger_SetsCorrectNameRouteAndDefaults()
|
|
{
|
|
DefaultFunctionMetadata metadata = FunctionMetadataFactory.CreateHttpTrigger(
|
|
"myWorkflow", "workflows/myWorkflow/run", BuiltInFunctions.RunWorkflowOrchestrationHttpFunctionEntryPoint);
|
|
|
|
Assert.Equal("http-myWorkflow", metadata.Name);
|
|
Assert.Equal("dotnet-isolated", metadata.Language);
|
|
Assert.Equal(BuiltInFunctions.RunWorkflowOrchestrationHttpFunctionEntryPoint, metadata.EntryPoint);
|
|
Assert.NotNull(metadata.RawBindings);
|
|
Assert.Equal(3, metadata.RawBindings.Count);
|
|
Assert.Contains("httpTrigger", metadata.RawBindings[0]);
|
|
Assert.Contains("workflows/myWorkflow/run", metadata.RawBindings[0]);
|
|
Assert.Contains("\"post\"", metadata.RawBindings[0]);
|
|
Assert.Contains("http", metadata.RawBindings[1]);
|
|
Assert.Contains("durableClient", metadata.RawBindings[2]);
|
|
}
|
|
|
|
[Fact]
|
|
public void CreateHttpTrigger_RespectsCustomMethods()
|
|
{
|
|
DefaultFunctionMetadata metadata = FunctionMetadataFactory.CreateHttpTrigger(
|
|
"status", "workflows/status/{runId}", BuiltInFunctions.GetWorkflowStatusHttpFunctionEntryPoint, methods: "\"get\"");
|
|
|
|
Assert.NotNull(metadata.RawBindings);
|
|
Assert.Contains("\"get\"", metadata.RawBindings[0]);
|
|
Assert.DoesNotContain("\"post\"", metadata.RawBindings[0]);
|
|
}
|
|
|
|
[Fact]
|
|
public void CreateActivityTrigger_SetsCorrectNameAndBindings()
|
|
{
|
|
DefaultFunctionMetadata metadata = FunctionMetadataFactory.CreateActivityTrigger("dafx-MyExecutor");
|
|
|
|
Assert.Equal("dafx-MyExecutor", metadata.Name);
|
|
Assert.Equal("dotnet-isolated", metadata.Language);
|
|
Assert.Equal(BuiltInFunctions.InvokeWorkflowActivityFunctionEntryPoint, metadata.EntryPoint);
|
|
Assert.NotNull(metadata.RawBindings);
|
|
Assert.Equal(2, metadata.RawBindings.Count);
|
|
Assert.Contains("activityTrigger", metadata.RawBindings[0]);
|
|
Assert.Contains("durableClient", metadata.RawBindings[1]);
|
|
}
|
|
|
|
[Fact]
|
|
public void CreateOrchestrationTrigger_SetsCorrectNameAndBindings()
|
|
{
|
|
DefaultFunctionMetadata metadata = FunctionMetadataFactory.CreateOrchestrationTrigger(
|
|
"dafx-MyWorkflow", BuiltInFunctions.RunWorkflowOrchestrationFunctionEntryPoint);
|
|
|
|
Assert.Equal("dafx-MyWorkflow", metadata.Name);
|
|
Assert.Equal("dotnet-isolated", metadata.Language);
|
|
Assert.Equal(BuiltInFunctions.RunWorkflowOrchestrationFunctionEntryPoint, metadata.EntryPoint);
|
|
Assert.NotNull(metadata.RawBindings);
|
|
Assert.Single(metadata.RawBindings);
|
|
Assert.Contains("orchestrationTrigger", metadata.RawBindings[0]);
|
|
}
|
|
|
|
[Fact]
|
|
public void CreateWorkflowMcpToolTrigger_SetsCorrectNameAndBindings()
|
|
{
|
|
DefaultFunctionMetadata metadata = FunctionMetadataFactory.CreateWorkflowMcpToolTrigger("Translate", "Translate text");
|
|
|
|
Assert.Equal("mcptool-Translate", metadata.Name);
|
|
Assert.Equal("dotnet-isolated", metadata.Language);
|
|
Assert.Equal(BuiltInFunctions.RunWorkflowMcpToolFunctionEntryPoint, metadata.EntryPoint);
|
|
Assert.NotNull(metadata.RawBindings);
|
|
Assert.Equal(3, metadata.RawBindings.Count);
|
|
|
|
// Verify all bindings are valid JSON
|
|
foreach (string binding in metadata.RawBindings)
|
|
{
|
|
JsonDocument.Parse(binding);
|
|
}
|
|
|
|
// mcpToolTrigger binding
|
|
Assert.Contains("mcpToolTrigger", metadata.RawBindings[0]);
|
|
Assert.Contains("\"toolName\":\"Translate\"", metadata.RawBindings[0]);
|
|
Assert.Contains("\"description\":\"Translate text\"", metadata.RawBindings[0]);
|
|
Assert.Contains("toolProperties", metadata.RawBindings[0]);
|
|
|
|
// mcpToolProperty binding for input
|
|
Assert.Contains("mcpToolProperty", metadata.RawBindings[1]);
|
|
Assert.Contains("\"propertyName\":\"input\"", metadata.RawBindings[1]);
|
|
Assert.Contains("\"isRequired\":true", metadata.RawBindings[1]);
|
|
|
|
// durableClient binding
|
|
Assert.Contains("durableClient", metadata.RawBindings[2]);
|
|
}
|
|
|
|
[Fact]
|
|
public void CreateWorkflowMcpToolTrigger_UsesDefaultDescription_WhenNull()
|
|
{
|
|
DefaultFunctionMetadata metadata = FunctionMetadataFactory.CreateWorkflowMcpToolTrigger("MyWorkflow", description: null);
|
|
|
|
Assert.NotNull(metadata.RawBindings);
|
|
Assert.Contains("Run the MyWorkflow workflow", metadata.RawBindings[0]);
|
|
}
|
|
}
|