From e3a8e533c80a1ebe56019b61114961be61784472 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Thu, 27 Nov 2025 20:57:48 +0100 Subject: [PATCH] Add unit tests for `Correlate` activity and enhance `ActivityTestFixture` execution functionality (#7119) * Add unit tests for `Correlate` activity and enhance `ActivityTestFixture` execution functionality - Introduced `CorrelateTests` to validate correlation ID handling with string literals, inputs, and functions. - Extended `ActivityTestFixture` with new `ExecuteAsync(ActivityExecutionContext)` overload for improved test execution customization. * Update src/common/Elsa.Testing.Shared/ActivityTestFixture.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../ActivityTestFixture.cs | 12 ++++- .../Primitives/CorrelateTests.cs | 54 +++++++++++++++++++ 2 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 test/unit/Elsa.Activities.UnitTests/Primitives/CorrelateTests.cs diff --git a/src/common/Elsa.Testing.Shared/ActivityTestFixture.cs b/src/common/Elsa.Testing.Shared/ActivityTestFixture.cs index aaecccf79..bd0399b5e 100644 --- a/src/common/Elsa.Testing.Shared/ActivityTestFixture.cs +++ b/src/common/Elsa.Testing.Shared/ActivityTestFixture.cs @@ -79,7 +79,17 @@ public class ActivityTestFixture public async Task ExecuteAsync() { var context = await BuildAsync(); - + return await ExecuteAsync(context); + } + + /// + /// Executes the activity using a pre-built . + /// Useful when you need to customize the context before execution, such as setting initial workflow state or overriding correlation IDs. + /// + /// The pre-built context to execute + /// The after execution + public async Task ExecuteAsync(ActivityExecutionContext context) + { // Set up variables and inputs, then execute the activity await SetupExistingVariablesAsync(Activity, context); await context.EvaluateInputPropertiesAsync(); diff --git a/test/unit/Elsa.Activities.UnitTests/Primitives/CorrelateTests.cs b/test/unit/Elsa.Activities.UnitTests/Primitives/CorrelateTests.cs new file mode 100644 index 000000000..fc7586cdf --- /dev/null +++ b/test/unit/Elsa.Activities.UnitTests/Primitives/CorrelateTests.cs @@ -0,0 +1,54 @@ +using Elsa.Testing.Shared; + +namespace Elsa.Activities.UnitTests.Primitives; + +public class CorrelateTests +{ + [Fact] + public async Task Should_Set_CorrelationId_From_String_Literal() + { + const string expected = "test-correlation-id"; + var correlate = new Correlate(expected, null, null); + + await AssertCorrelationIdAsync(correlate, expected); + } + + [Fact] + public async Task Should_Set_CorrelationId_From_Input() + { + const string expected = "dynamic-correlation-id"; + var correlate = new Correlate { CorrelationId = new(expected) }; + + await AssertCorrelationIdAsync(correlate, expected); + } + + [Fact] + public async Task Should_Set_CorrelationId_From_Func() + { + const string expected = "func-correlation-id"; + var correlate = new Correlate(_ => expected); + + await AssertCorrelationIdAsync(correlate, expected); + } + + [Fact] + public async Task Should_Overwrite_Existing_CorrelationId() + { + const string initial = "initial-correlation-id"; + const string expected = "updated-correlation-id"; + var correlate = new Correlate(expected, null, null); + var fixture = new ActivityTestFixture(correlate); + + var context = await fixture.BuildAsync(); + context.WorkflowExecutionContext.CorrelationId = initial; + await fixture.ExecuteAsync(context); + + Assert.Equal(expected, context.WorkflowExecutionContext.CorrelationId); + } + + private static async Task AssertCorrelationIdAsync(Correlate correlate, string expected) + { + var context = await new ActivityTestFixture(correlate).ExecuteAsync(); + Assert.Equal(expected, context.WorkflowExecutionContext.CorrelationId); + } +}