elsa-core/test/unit/Elsa.Activities.UnitTests/Flow/FlowchartTests.cs
Sipke Schoorstra 4bbdd6f3a7
Configures Flowchart Execution via DI (#7141)
* Introduce `FlowchartExecutionMode` to streamline flowchart execution logic.

- Added `FlowchartExecutionMode` enum to represent execution modes (Default, TokenBased, CounterBased).
- Updated flowchart-related integration and unit tests to use the new execution mode.
- Removed the global `UseTokenFlow` flag in favor of execution-specific configuration via `RunWorkflowOptions`.
- Refactored flowchart-related APIs and test helpers for improved flexibility and modularity.

* Add support for configuring flowchart execution behavior via `FlowchartOptions` and DI.

- Introduced extensions for `FlowchartFeature` to simplify configuration.
- Added DI support for setting default execution modes.
- Refactored flowchart execution logic to prioritize configuration.

* Update default Flowchart execution settings to align with version 3.5.2 behavior

- Changed `DefaultExecutionMode` to `CounterBased`.
- Updated `UseTokenFlow` default to `false`.

* Update src/modules/Elsa.Workflows.Core/Activities/Flowchart/Models/FlowchartExecutionMode.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update src/modules/Elsa.Workflows.Core/Activities/Flowchart/Extensions/FlowchartFeatureExtensions.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update test/integration/Elsa.Workflows.IntegrationTests/Scenarios/FlowchartNextActivity/Tests.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update src/modules/Elsa.Workflows.Core/Activities/Flowchart/Extensions/RunWorkflowOptionsExtensions.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Refactor flowchart integration tests for improved formatting and consistency

* Refactor workflow tests and related services to improve reusability and align with updated Flowchart execution behavior

* Update src/modules/Elsa.Workflows.Core/Activities/Flowchart/Options/FlowchartOptions.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Refactor flowchart execution logic to use `FlowchartExecutionMode` enum, replacing boolean checks for improved clarity and extensibility.

* Refactor tests and workflow logic to replace boolean `useTokenFlow` with `FlowchartExecutionMode` enum for clarity and consistency.

* Refactor flowchart execution logic to centralize mode-based behavior handling and simplify implementation.

* Remove unnecessary whitespace in Flowchart.cs to improve code formatting

* Remove unnecessary whitespace in FlowJoinTests.cs to improve code formatting

* Update src/common/Elsa.Testing.Shared.Integration/WorkflowTestFixture.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update src/modules/Elsa.Workflows.Core/Activities/Flowchart/Activities/Flowchart.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-12-15 10:15:39 +01:00

85 lines
2.4 KiB
C#

using Elsa.Testing.Shared;
using Elsa.Workflows.Activities.Flowchart.Activities;
using Elsa.Workflows.Activities.Flowchart.Models;
using static Elsa.Activities.UnitTests.Flow.FlowchartTestHelpers;
namespace Elsa.Activities.UnitTests.Flow;
/// <summary>
/// Tests for common Flowchart behavior (both counter and token-based strategies).
/// </summary>
public class FlowchartTests
{
[Fact(DisplayName = "Schedules start activity when specified")]
public async Task SchedulesStartActivity()
{
// Arrange
var startActivity = new WriteLine("Start");
var flowchart = new Flowchart
{
Start = startActivity
};
// Act
var context = await ExecuteFlowchartAsync(flowchart);
// Assert
Assert.True(context.HasScheduledActivity(startActivity));
}
[Fact(DisplayName = "Executes without error when no start activity specified")]
public async Task ExecutesWithoutErrorWhenNoStartActivity()
{
// Arrange
var flowchart = new Flowchart
{
Start = null
};
// Act
var context = await ExecuteFlowchartAsync(flowchart);
// Assert
Assert.NotNull(context);
Assert.False(context.HasScheduledActivity(new WriteLine("NonExistent")));
}
[Theory(DisplayName = "Respects execution mode")]
[InlineData(FlowchartExecutionMode.TokenBased)]
[InlineData(FlowchartExecutionMode.CounterBased)]
public async Task RespectsExecutionMode(FlowchartExecutionMode executionMode)
{
// Arrange
var activity = new WriteLine("Test");
var flowchart = new Flowchart
{
Start = activity,
Activities = { activity }
};
// Act
var context = await ExecuteFlowchartAsync(flowchart, executionMode);
// Assert - just verify it executes without error
Assert.NotNull(context);
}
[Fact(DisplayName = "Accepts empty connections collection")]
public async Task AcceptsEmptyConnections()
{
// Arrange
var activity = new WriteLine("Isolated");
var flowchart = new Flowchart
{
Start = activity,
Activities = { activity }
};
// Act
var context = await ExecuteFlowchartAsync(flowchart);
// Assert
Assert.True(context.HasScheduledActivity(activity));
}
}