// Copyright (c) Microsoft. All rights reserved. using Microsoft.Agents.AI.Workflows.Declarative.Interpreter; namespace Microsoft.Agents.AI.Workflows.Declarative.UnitTests.Interpreter; /// /// Tests execution of workflow created by . /// public sealed class DeclarativeWorkflowModelTest(ITestOutputHelper output) : WorkflowTest(output) { [Fact] public void GetDepthForDefault() { WorkflowModel model = new(new TestExecutor("root")); Assert.Equal(0, model.GetDepth(null)); } [Fact] public void GetDepthForMissingNode() { WorkflowModel model = new(new TestExecutor("root")); Assert.Throws(() => model.GetDepth("missing")); } [Fact] public void ConnectMissingNode() { TestExecutor rootExecutor = new("root"); WorkflowModel model = new(rootExecutor); model.AddLink("root", "missing"); TestWorkflowBuilder modelBuilder = new(); Assert.Throws(() => model.Build(modelBuilder)); } [Fact] public void AddToMissingParent() { WorkflowModel model = new(new TestExecutor("root")); Assert.Throws(() => model.AddNode(new TestExecutor("next"), "missing")); } [Fact] public void LinkFromMissingSource() { WorkflowModel model = new(new TestExecutor("root")); Assert.Throws(() => model.AddLink("missing", "anything")); } [Fact] public void LocateMissingParent() { WorkflowModel model = new(new TestExecutor("root")); Assert.Null(model.LocateParent(null)); Assert.Throws(() => model.LocateParent("missing")); } internal sealed class TestExecutor(string actionId) : IModeledAction { public string Id { get; } = actionId; } internal sealed class TestWorkflowBuilder : IModelBuilder { public void Connect(IModeledAction source, IModeledAction target, string? condition = null) { Assert.Fail(); // Not expected to be called in this test. } } }