// Copyright (c) Microsoft. All rights reserved.
using System;
namespace Microsoft.Agents.AI.Workflows.Declarative.UnitTests;
///
/// Tests declarative workflow exceptions.
///
public sealed class DeclarativeWorkflowExceptionTest(ITestOutputHelper output) : WorkflowTest(output)
{
[Fact]
public void WorkflowExecutionException()
{
AssertDefault(() => throw new DeclarativeActionException());
AssertMessage((message) => throw new DeclarativeActionException(message));
AssertInner((message, inner) => throw new DeclarativeActionException(message, inner));
}
[Fact]
public void WorkflowModelException()
{
AssertDefault(() => throw new DeclarativeModelException());
AssertMessage((message) => throw new DeclarativeModelException(message));
AssertInner((message, inner) => throw new DeclarativeModelException(message, inner));
}
private static void AssertDefault(Action throwAction) where TException : Exception
{
TException exception = Assert.Throws(throwAction.Invoke);
Assert.NotEmpty(exception.Message);
Assert.Null(exception.InnerException);
}
private static void AssertMessage(Action throwAction) where TException : Exception
{
const string Message = "Test exception message";
TException exception = Assert.Throws(() => throwAction.Invoke(Message));
Assert.Equal(Message, exception.Message);
Assert.Null(exception.InnerException);
}
private static void AssertInner(Action throwAction) where TException : Exception
{
const string Message = "Test exception message";
NotSupportedException innerException = new("Inner exception message");
TException exception = Assert.Throws(() => throwAction.Invoke(Message, innerException));
Assert.Equal(Message, exception.Message);
Assert.Equal(innerException, exception.InnerException);
}
}