* 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>
85 lines
2.4 KiB
C#
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));
|
|
}
|
|
}
|