using Elsa.Testing.Shared;
using Elsa.Workflows.Activities;
using Elsa.Workflows.Activities.Flowchart.Activities;
using Elsa.Workflows.Activities.Flowchart.Extensions;
using Elsa.Workflows.Activities.Flowchart.Models;
using Elsa.Workflows.Options;
using Xunit.Abstractions;
namespace Elsa.Activities.IntegrationTests.Branching;
///
/// Integration tests for FlowDecision activity in flowchart scenarios.
///
[Collection("FlowchartTests")]
public class FlowDecisionTests(ITestOutputHelper testOutputHelper)
{
private readonly WorkflowTestFixture _fixture = new(testOutputHelper);
[Theory(DisplayName = "FlowDecision follows correct path based on condition")]
[MemberData(nameof(BasicPathTestCases))]
public async Task Should_Follow_Correct_Path_Based_On_Condition(FlowchartExecutionMode executionMode, bool condition, string[] expectedOutputs, string[] unexpectedOutputs)
{
// Arrange
var start = new WriteLine("Start");
var decision = new FlowDecision(ctx => condition);
var truePath = new WriteLine("TruePath");
var falsePath = new WriteLine("FalsePath");
var flowchart = new Flowchart
{
Start = start,
Activities = { start, decision, truePath, falsePath },
Connections =
{
new() { Source = new(start, "Done"), Target = new(decision) },
new() { Source = new(decision, "True"), Target = new(truePath) },
new() { Source = new(decision, "False"), Target = new(falsePath) }
}
};
var options = new RunWorkflowOptions().WithFlowchartExecutionMode(executionMode);
// Act
await _fixture.RunActivityAsync(flowchart, options);
// Assert
AssertOutputs(expectedOutputs, unexpectedOutputs);
}
public static IEnumerable