From c79acde5fc555931f5ec33acbae2a9ccddc69ae7 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Wed, 20 Apr 2022 21:38:50 +0200 Subject: [PATCH] Add Fork tests --- .../Activities/Fork/BasicForkWorkflow.cs | 21 +++++++ .../Activities/Fork/ForkTests.cs | 51 ++++++++++++++++ .../Activities/Fork/JoinAnyForkWorkflow.cs | 61 +++++++++++++++++++ 3 files changed, 133 insertions(+) create mode 100644 test/Elsa.IntegrationTests/Activities/Fork/BasicForkWorkflow.cs create mode 100644 test/Elsa.IntegrationTests/Activities/Fork/ForkTests.cs create mode 100644 test/Elsa.IntegrationTests/Activities/Fork/JoinAnyForkWorkflow.cs diff --git a/test/Elsa.IntegrationTests/Activities/Fork/BasicForkWorkflow.cs b/test/Elsa.IntegrationTests/Activities/Fork/BasicForkWorkflow.cs new file mode 100644 index 000000000..5b06b2c4f --- /dev/null +++ b/test/Elsa.IntegrationTests/Activities/Fork/BasicForkWorkflow.cs @@ -0,0 +1,21 @@ +using Elsa.Activities; +using Elsa.Contracts; +using Elsa.Modules.Activities.Console; + +namespace Elsa.IntegrationTests.Activities; + +public class BasicForkWorkflow : IWorkflow +{ + public void Build(IWorkflowDefinitionBuilder workflow) + { + workflow.WithRoot(new Fork + { + Branches = + { + new WriteLine("Branch 1"), + new WriteLine("Branch 2"), + new WriteLine("Branch 3") + } + }); + } +} \ No newline at end of file diff --git a/test/Elsa.IntegrationTests/Activities/Fork/ForkTests.cs b/test/Elsa.IntegrationTests/Activities/Fork/ForkTests.cs new file mode 100644 index 000000000..87718ecfd --- /dev/null +++ b/test/Elsa.IntegrationTests/Activities/Fork/ForkTests.cs @@ -0,0 +1,51 @@ +using System.Linq; +using System.Threading.Tasks; +using Elsa.Builders; +using Elsa.Contracts; +using Elsa.Testing.Shared; +using Microsoft.Extensions.DependencyInjection; +using Xunit; +using Xunit.Abstractions; + +namespace Elsa.IntegrationTests.Activities; + +public class ForkTests +{ + private readonly IWorkflowRunner _workflowRunner; + private readonly CapturingTextWriter _capturingTextWriter = new(); + + public ForkTests(ITestOutputHelper testOutputHelper) + { + var services = new TestApplicationBuilder(testOutputHelper).WithCapturingTextWriter(_capturingTextWriter).Build(); + _workflowRunner = services.GetRequiredService(); + } + + [Fact(DisplayName = "Each branch executes")] + public async Task Test1() + { + var workflow = new WorkflowDefinitionBuilder().BuildWorkflow(new BasicForkWorkflow()); + await _workflowRunner.RunAsync(workflow); + var lines = _capturingTextWriter.Lines.ToList(); + Assert.Equal(new[]{ "Branch 1", "Branch 2", "Branch 3" }, lines); + } + + [Fact(DisplayName = "Wait Any causes workflow to continue")] + public async Task Test2() + { + var workflow = new WorkflowDefinitionBuilder().BuildWorkflow(new JoinAnyForkWorkflow()); + + // First run. + var result = await _workflowRunner.RunAsync(workflow); + + // Collect one of the bookmarks to resume the workflow. + var bookmark = result.Bookmarks.FirstOrDefault(x => x.ActivityId == "Event2"); + Assert.NotNull(bookmark); + + // Resume the workflow. + await _workflowRunner.RunAsync(workflow, result.WorkflowState, bookmark); + + // Verify output. + var lines = _capturingTextWriter.Lines.ToList(); + Assert.Equal(new[]{ "Start", "Branch 2", "End" }, lines); + } +} \ No newline at end of file diff --git a/test/Elsa.IntegrationTests/Activities/Fork/JoinAnyForkWorkflow.cs b/test/Elsa.IntegrationTests/Activities/Fork/JoinAnyForkWorkflow.cs new file mode 100644 index 000000000..b91dc3e6f --- /dev/null +++ b/test/Elsa.IntegrationTests/Activities/Fork/JoinAnyForkWorkflow.cs @@ -0,0 +1,61 @@ +using Elsa.Activities; +using Elsa.Contracts; +using Elsa.Modules.Activities.Console; +using Elsa.Modules.Activities.Primitives; + +namespace Elsa.IntegrationTests.Activities; + +public class JoinAnyForkWorkflow : IWorkflow +{ + public void Build(IWorkflowDefinitionBuilder workflow) + { + workflow.WithRoot(new Sequence + { + Activities = + { + new WriteLine("Start"), + new Fork + { + Branches = + { + new Sequence + { + Activities = + { + new Event("Event 1") + { + Id = "Event1" + }, + new WriteLine("Branch 1") + } + }, + new Sequence + { + Activities = + { + new Event("Event 2") + { + Id = "Event2" + }, + new WriteLine("Branch 2") + } + }, + new Sequence + { + Activities = + { + new Event("Event 3") + { + Id = "Event3" + }, + new WriteLine("Branch 3") + } + }, + }, + JoinMode = JoinMode.WaitAny + }, + new WriteLine("End") + } + }); + } +} \ No newline at end of file