elsa-core/test/integration/Elsa.Activities.IntegrationTests/Flow/StartTests.cs
Sipke Schoorstra 39dae54604
Add integration and unit tests for Start activity across different workflow scenarios (#7111)
- Introduced three test workflows:
  - `StartInFlowchartAsExplicitStartWorkflow`: Verifies the explicit `Start` activity in a flowchart as a starting point.
  - `StartInFlowchartWithStartPropertyWorkflow`: Confirms precedence of `Flowchart.Start` property over the `Start` activity.
  - `StartInSequenceWorkflow`: Demonstrates successful `Start` activity usage in a sequence.

- Added integration tests (`StartTests`) ensuring expected execution flows and `Start` activity behavior for each workflow.
- Added unit tests validating `Start` activity implementation and compliance with `IStartNode`.
- Ensures test coverage for `Start` activity behavior across flowchart, sequence, and property overrides.
2025-11-27 09:24:33 +01:00

59 lines
2.3 KiB
C#

using Elsa.Activities.IntegrationTests.Flow.Workflows;
using Elsa.Testing.Shared;
using Elsa.Workflows;
using Elsa.Workflows.Activities;
using Xunit.Abstractions;
namespace Elsa.Activities.IntegrationTests.Flow;
/// <summary>
/// Integration tests for the <see cref="Start"/> activity.
/// </summary>
public class StartTests(ITestOutputHelper testOutputHelper)
{
private readonly WorkflowTestFixture _fixture = new WorkflowTestFixture(testOutputHelper)
.AddWorkflow<StartInSequenceWorkflow>()
.AddWorkflow<StartInFlowchartAsExplicitStartWorkflow>()
.AddWorkflow<StartInFlowchartWithStartPropertyWorkflow>();
[Fact(DisplayName = "Start completes successfully in sequence")]
public async Task Start_CompletesSuccessfullyInSequence()
{
// Act
var workflowState = await _fixture.RunWorkflowAsync(StartInSequenceWorkflow.DefinitionId);
// Assert
Assert.Equal(WorkflowStatus.Finished, workflowState.Status);
var lines = _fixture.CapturingTextWriter.Lines.ToList();
Assert.Contains("Before Start", lines);
Assert.Contains("After Start", lines);
}
[Fact(DisplayName = "Start activity is used as flowchart start when present")]
public async Task Start_IsUsedAsFlowchartStart_WhenPresent()
{
// Act
var workflowState = await _fixture.RunWorkflowAsync(StartInFlowchartAsExplicitStartWorkflow.DefinitionId);
// Assert
Assert.Equal(WorkflowStatus.Finished, workflowState.Status);
var lines = _fixture.CapturingTextWriter.Lines.ToList();
Assert.Contains("Start activity", lines);
Assert.Contains("After Start", lines);
Assert.DoesNotContain("Should not execute", lines);
}
[Fact(DisplayName = "Flowchart Start property takes precedence over explicit Start activity")]
public async Task FlowchartStartProperty_TakesPrecedenceOverExplicitStartActivity()
{
// Act
var workflowState = await _fixture.RunWorkflowAsync(StartInFlowchartWithStartPropertyWorkflow.DefinitionId);
// Assert
Assert.Equal(WorkflowStatus.Finished, workflowState.Status);
var lines = _fixture.CapturingTextWriter.Lines.ToList();
Assert.Contains("Start property used", lines);
Assert.DoesNotContain("Start activity", lines);
}
}