From 7fa62582b875e5af9c4285b6cecbd2ba9896b079 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Wed, 20 Apr 2022 15:52:51 +0200 Subject: [PATCH] Add tests for If activity --- .../Break/BreakForEachWorkflow.cs | 2 +- .../Break/BreakForWorkflow.cs | 2 +- .../{ => Activities}/Break/BreakTests.cs | 3 +- .../Break/BreakWhileWorkflow.cs | 2 +- .../{ => Activities}/ForEach/ForEachTests.cs | 2 +- .../ForEach/ForEachWorkflow.cs | 2 +- .../ForEach/NestedForEachWithBreakWorkflow.cs | 2 +- .../Activities/If/ComplexIfWorkflow.cs | 48 +++++++++++++++++++ .../Activities/If/IfTests.cs | 44 +++++++++++++++++ .../Activities/If/IfThenWorkflow.cs | 25 ++++++++++ .../Sequence/NestedSequentialWorkflow.cs | 2 +- .../Sequence/SequenceTests.cs | 3 +- .../Sequence/SequentialWorkflow.cs | 2 +- .../WriteLine/WriteLineTests.cs} | 6 +-- .../Elsa.IntegrationTests.csproj | 4 ++ .../Elsa.IntegrationTests.csproj.DotSettings | 6 +++ 16 files changed, 140 insertions(+), 15 deletions(-) rename test/Elsa.IntegrationTests/{ => Activities}/Break/BreakForEachWorkflow.cs (96%) rename test/Elsa.IntegrationTests/{ => Activities}/Break/BreakForWorkflow.cs (95%) rename test/Elsa.IntegrationTests/{ => Activities}/Break/BreakTests.cs (96%) rename test/Elsa.IntegrationTests/{ => Activities}/Break/BreakWhileWorkflow.cs (96%) rename test/Elsa.IntegrationTests/{ => Activities}/ForEach/ForEachTests.cs (95%) rename test/Elsa.IntegrationTests/{ => Activities}/ForEach/ForEachWorkflow.cs (94%) rename test/Elsa.IntegrationTests/{ => Activities}/ForEach/NestedForEachWithBreakWorkflow.cs (96%) create mode 100644 test/Elsa.IntegrationTests/Activities/If/ComplexIfWorkflow.cs create mode 100644 test/Elsa.IntegrationTests/Activities/If/IfTests.cs create mode 100644 test/Elsa.IntegrationTests/Activities/If/IfThenWorkflow.cs rename test/Elsa.IntegrationTests/{ => Activities}/Sequence/NestedSequentialWorkflow.cs (94%) rename test/Elsa.IntegrationTests/{ => Activities}/Sequence/SequenceTests.cs (95%) rename test/Elsa.IntegrationTests/{ => Activities}/Sequence/SequentialWorkflow.cs (90%) rename test/Elsa.IntegrationTests/{WriteLine/HelloWorldWorkflowTests.cs => Activities/WriteLine/WriteLineTests.cs} (87%) diff --git a/test/Elsa.IntegrationTests/Break/BreakForEachWorkflow.cs b/test/Elsa.IntegrationTests/Activities/Break/BreakForEachWorkflow.cs similarity index 96% rename from test/Elsa.IntegrationTests/Break/BreakForEachWorkflow.cs rename to test/Elsa.IntegrationTests/Activities/Break/BreakForEachWorkflow.cs index e24a18fda..fa09dd409 100644 --- a/test/Elsa.IntegrationTests/Break/BreakForEachWorkflow.cs +++ b/test/Elsa.IntegrationTests/Activities/Break/BreakForEachWorkflow.cs @@ -4,7 +4,7 @@ using Elsa.Contracts; using Elsa.Models; using Elsa.Modules.Activities.Activities.Console; -namespace Elsa.IntegrationTests; +namespace Elsa.IntegrationTests.Activities; class BreakForEachWorkflow : IWorkflow { diff --git a/test/Elsa.IntegrationTests/Break/BreakForWorkflow.cs b/test/Elsa.IntegrationTests/Activities/Break/BreakForWorkflow.cs similarity index 95% rename from test/Elsa.IntegrationTests/Break/BreakForWorkflow.cs rename to test/Elsa.IntegrationTests/Activities/Break/BreakForWorkflow.cs index 7b6b08647..89b3bc82b 100644 --- a/test/Elsa.IntegrationTests/Break/BreakForWorkflow.cs +++ b/test/Elsa.IntegrationTests/Activities/Break/BreakForWorkflow.cs @@ -3,7 +3,7 @@ using Elsa.Contracts; using Elsa.Models; using Elsa.Modules.Activities.Activities.Console; -namespace Elsa.IntegrationTests; +namespace Elsa.IntegrationTests.Activities; class BreakForWorkflow : IWorkflow { diff --git a/test/Elsa.IntegrationTests/Break/BreakTests.cs b/test/Elsa.IntegrationTests/Activities/Break/BreakTests.cs similarity index 96% rename from test/Elsa.IntegrationTests/Break/BreakTests.cs rename to test/Elsa.IntegrationTests/Activities/Break/BreakTests.cs index f050c9777..146dac2e9 100644 --- a/test/Elsa.IntegrationTests/Break/BreakTests.cs +++ b/test/Elsa.IntegrationTests/Activities/Break/BreakTests.cs @@ -2,13 +2,12 @@ using System.Linq; using System.Threading.Tasks; using Elsa.Builders; using Elsa.Contracts; -using Elsa.IntegrationTests.Workflows; using Elsa.Testing.Shared; using Microsoft.Extensions.DependencyInjection; using Xunit; using Xunit.Abstractions; -namespace Elsa.IntegrationTests; +namespace Elsa.IntegrationTests.Activities; public class BreakWorkflowTests { diff --git a/test/Elsa.IntegrationTests/Break/BreakWhileWorkflow.cs b/test/Elsa.IntegrationTests/Activities/Break/BreakWhileWorkflow.cs similarity index 96% rename from test/Elsa.IntegrationTests/Break/BreakWhileWorkflow.cs rename to test/Elsa.IntegrationTests/Activities/Break/BreakWhileWorkflow.cs index b04f10b4c..2b8c5bae3 100644 --- a/test/Elsa.IntegrationTests/Break/BreakWhileWorkflow.cs +++ b/test/Elsa.IntegrationTests/Activities/Break/BreakWhileWorkflow.cs @@ -3,7 +3,7 @@ using Elsa.Contracts; using Elsa.Models; using Elsa.Modules.Activities.Activities.Console; -namespace Elsa.IntegrationTests; +namespace Elsa.IntegrationTests.Activities; public class BreakWhileWorkflow : IWorkflow { diff --git a/test/Elsa.IntegrationTests/ForEach/ForEachTests.cs b/test/Elsa.IntegrationTests/Activities/ForEach/ForEachTests.cs similarity index 95% rename from test/Elsa.IntegrationTests/ForEach/ForEachTests.cs rename to test/Elsa.IntegrationTests/Activities/ForEach/ForEachTests.cs index 5cabe4d9b..aad962aa1 100644 --- a/test/Elsa.IntegrationTests/ForEach/ForEachTests.cs +++ b/test/Elsa.IntegrationTests/Activities/ForEach/ForEachTests.cs @@ -7,7 +7,7 @@ using Microsoft.Extensions.DependencyInjection; using Xunit; using Xunit.Abstractions; -namespace Elsa.IntegrationTests; +namespace Elsa.IntegrationTests.Activities; public class ForEachTests { diff --git a/test/Elsa.IntegrationTests/ForEach/ForEachWorkflow.cs b/test/Elsa.IntegrationTests/Activities/ForEach/ForEachWorkflow.cs similarity index 94% rename from test/Elsa.IntegrationTests/ForEach/ForEachWorkflow.cs rename to test/Elsa.IntegrationTests/Activities/ForEach/ForEachWorkflow.cs index 063a91685..ec7ba953f 100644 --- a/test/Elsa.IntegrationTests/ForEach/ForEachWorkflow.cs +++ b/test/Elsa.IntegrationTests/Activities/ForEach/ForEachWorkflow.cs @@ -4,7 +4,7 @@ using Elsa.Contracts; using Elsa.Models; using Elsa.Modules.Activities.Activities.Console; -namespace Elsa.IntegrationTests; +namespace Elsa.IntegrationTests.Activities; class ForEachWorkflow : IWorkflow { diff --git a/test/Elsa.IntegrationTests/ForEach/NestedForEachWithBreakWorkflow.cs b/test/Elsa.IntegrationTests/Activities/ForEach/NestedForEachWithBreakWorkflow.cs similarity index 96% rename from test/Elsa.IntegrationTests/ForEach/NestedForEachWithBreakWorkflow.cs rename to test/Elsa.IntegrationTests/Activities/ForEach/NestedForEachWithBreakWorkflow.cs index fae0e9e18..4549e5ec3 100644 --- a/test/Elsa.IntegrationTests/ForEach/NestedForEachWithBreakWorkflow.cs +++ b/test/Elsa.IntegrationTests/Activities/ForEach/NestedForEachWithBreakWorkflow.cs @@ -3,7 +3,7 @@ using Elsa.Contracts; using Elsa.Models; using Elsa.Modules.Activities.Activities.Console; -namespace Elsa.IntegrationTests; +namespace Elsa.IntegrationTests.Activities; class NestedForEachWithBreakWorkflow : IWorkflow { diff --git a/test/Elsa.IntegrationTests/Activities/If/ComplexIfWorkflow.cs b/test/Elsa.IntegrationTests/Activities/If/ComplexIfWorkflow.cs new file mode 100644 index 000000000..12bdec103 --- /dev/null +++ b/test/Elsa.IntegrationTests/Activities/If/ComplexIfWorkflow.cs @@ -0,0 +1,48 @@ +using System; +using Elsa.Activities; +using Elsa.Contracts; +using Elsa.Models; +using Elsa.Modules.Activities.Activities.Console; + +namespace Elsa.IntegrationTests.Activities; + +public class ComplexIfWorkflow : IWorkflow +{ + private readonly Func _condition; + + public ComplexIfWorkflow(Func condition) + { + _condition = condition; + } + + public void Build(IWorkflowDefinitionBuilder workflow) + { + workflow.WithRoot(new Sequence + { + Activities = + { + new WriteLine("Start"), + new If(_condition) + { + Then = new Sequence + { + Activities = + { + new WriteLine("Executing"), + new WriteLine("True!"), + } + }, + Else = new Sequence + { + Activities = + { + new WriteLine("Executing"), + new WriteLine("False!"), + } + } + }, + new WriteLine("End") + } + }); + } +} \ No newline at end of file diff --git a/test/Elsa.IntegrationTests/Activities/If/IfTests.cs b/test/Elsa.IntegrationTests/Activities/If/IfTests.cs new file mode 100644 index 000000000..24a074845 --- /dev/null +++ b/test/Elsa.IntegrationTests/Activities/If/IfTests.cs @@ -0,0 +1,44 @@ +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 IfTests +{ + private readonly IWorkflowRunner _workflowRunner; + private readonly CapturingTextWriter _capturingTextWriter = new(); + + public IfTests(ITestOutputHelper testOutputHelper) + { + var services = new TestApplicationBuilder(testOutputHelper).WithCapturingTextWriter(_capturingTextWriter).Build(); + _workflowRunner = services.GetRequiredService(); + } + + [Theory(DisplayName = "The correct branch executes when condition is true")] + [InlineData(true, "True!")] + [InlineData(false, "False!")] + public async Task Test1(bool conditionResult, string expectedLine) + { + var workflow = new WorkflowDefinitionBuilder().BuildWorkflow(new IfThenWorkflow(() => conditionResult)); + await _workflowRunner.RunAsync(workflow); + var lines = _capturingTextWriter.Lines.ToList(); + Assert.Equal(new[] { expectedLine }, lines); + } + + [Theory(DisplayName = "The If activity completes only after either one of its branches completed")] + [InlineData(true, new[] { "Start", "Executing", "True!", "End" })] + [InlineData(false, new[] { "Start", "Executing", "False!", "End" })] + public async Task Test2(bool conditionResult, string[] expectedLines) + { + var workflow = new WorkflowDefinitionBuilder().BuildWorkflow(new ComplexIfWorkflow(() => conditionResult)); + await _workflowRunner.RunAsync(workflow); + var lines = _capturingTextWriter.Lines.ToList(); + Assert.Equal(expectedLines, lines); + } +} \ No newline at end of file diff --git a/test/Elsa.IntegrationTests/Activities/If/IfThenWorkflow.cs b/test/Elsa.IntegrationTests/Activities/If/IfThenWorkflow.cs new file mode 100644 index 000000000..e2985840e --- /dev/null +++ b/test/Elsa.IntegrationTests/Activities/If/IfThenWorkflow.cs @@ -0,0 +1,25 @@ +using System; +using Elsa.Activities; +using Elsa.Contracts; +using Elsa.Modules.Activities.Activities.Console; + +namespace Elsa.IntegrationTests.Activities; + +public class IfThenWorkflow : IWorkflow +{ + private readonly Func _condition; + + public IfThenWorkflow(Func condition) + { + _condition = condition; + } + + public void Build(IWorkflowDefinitionBuilder workflow) + { + workflow.WithRoot(new If(_condition) + { + Then = new WriteLine("True!"), + Else = new WriteLine("False!") + }); + } +} \ No newline at end of file diff --git a/test/Elsa.IntegrationTests/Sequence/NestedSequentialWorkflow.cs b/test/Elsa.IntegrationTests/Activities/Sequence/NestedSequentialWorkflow.cs similarity index 94% rename from test/Elsa.IntegrationTests/Sequence/NestedSequentialWorkflow.cs rename to test/Elsa.IntegrationTests/Activities/Sequence/NestedSequentialWorkflow.cs index ff3f8e9db..9043e2ae1 100644 --- a/test/Elsa.IntegrationTests/Sequence/NestedSequentialWorkflow.cs +++ b/test/Elsa.IntegrationTests/Activities/Sequence/NestedSequentialWorkflow.cs @@ -2,7 +2,7 @@ using Elsa.Activities; using Elsa.Contracts; using Elsa.Modules.Activities.Activities.Console; -namespace Elsa.IntegrationTests; +namespace Elsa.IntegrationTests.Activities; class NestedSequentialWorkflow : IWorkflow { diff --git a/test/Elsa.IntegrationTests/Sequence/SequenceTests.cs b/test/Elsa.IntegrationTests/Activities/Sequence/SequenceTests.cs similarity index 95% rename from test/Elsa.IntegrationTests/Sequence/SequenceTests.cs rename to test/Elsa.IntegrationTests/Activities/Sequence/SequenceTests.cs index 7acabca37..40967c54f 100644 --- a/test/Elsa.IntegrationTests/Sequence/SequenceTests.cs +++ b/test/Elsa.IntegrationTests/Activities/Sequence/SequenceTests.cs @@ -2,13 +2,12 @@ using System.Linq; using System.Threading.Tasks; using Elsa.Builders; using Elsa.Contracts; -using Elsa.IntegrationTests.Workflows; using Elsa.Testing.Shared; using Microsoft.Extensions.DependencyInjection; using Xunit; using Xunit.Abstractions; -namespace Elsa.IntegrationTests; +namespace Elsa.IntegrationTests.Activities; public class SequenceTests { diff --git a/test/Elsa.IntegrationTests/Sequence/SequentialWorkflow.cs b/test/Elsa.IntegrationTests/Activities/Sequence/SequentialWorkflow.cs similarity index 90% rename from test/Elsa.IntegrationTests/Sequence/SequentialWorkflow.cs rename to test/Elsa.IntegrationTests/Activities/Sequence/SequentialWorkflow.cs index 29b81d6fa..65c575625 100644 --- a/test/Elsa.IntegrationTests/Sequence/SequentialWorkflow.cs +++ b/test/Elsa.IntegrationTests/Activities/Sequence/SequentialWorkflow.cs @@ -2,7 +2,7 @@ using Elsa.Activities; using Elsa.Contracts; using Elsa.Modules.Activities.Activities.Console; -namespace Elsa.IntegrationTests.Workflows; +namespace Elsa.IntegrationTests.Activities; class SequentialWorkflow : IWorkflow { diff --git a/test/Elsa.IntegrationTests/WriteLine/HelloWorldWorkflowTests.cs b/test/Elsa.IntegrationTests/Activities/WriteLine/WriteLineTests.cs similarity index 87% rename from test/Elsa.IntegrationTests/WriteLine/HelloWorldWorkflowTests.cs rename to test/Elsa.IntegrationTests/Activities/WriteLine/WriteLineTests.cs index c6b59bef7..091010e9e 100644 --- a/test/Elsa.IntegrationTests/WriteLine/HelloWorldWorkflowTests.cs +++ b/test/Elsa.IntegrationTests/Activities/WriteLine/WriteLineTests.cs @@ -8,14 +8,14 @@ using Microsoft.Extensions.DependencyInjection; using Xunit; using Xunit.Abstractions; -namespace Elsa.IntegrationTests; +namespace Elsa.IntegrationTests.Activities; -public class HelloWorldWorkflowTests +public class WriteLineTests { private readonly IWorkflowRunner _workflowRunner; private readonly CapturingTextWriter _capturingTextWriter = new(); - public HelloWorldWorkflowTests(ITestOutputHelper testOutputHelper) + public WriteLineTests(ITestOutputHelper testOutputHelper) { var services = new TestApplicationBuilder(testOutputHelper).WithCapturingTextWriter(_capturingTextWriter).Build(); _workflowRunner = services.GetRequiredService(); diff --git a/test/Elsa.IntegrationTests/Elsa.IntegrationTests.csproj b/test/Elsa.IntegrationTests/Elsa.IntegrationTests.csproj index 6b3b9fc37..91cf791cc 100644 --- a/test/Elsa.IntegrationTests/Elsa.IntegrationTests.csproj +++ b/test/Elsa.IntegrationTests/Elsa.IntegrationTests.csproj @@ -26,4 +26,8 @@ + + + + diff --git a/test/Elsa.IntegrationTests/Elsa.IntegrationTests.csproj.DotSettings b/test/Elsa.IntegrationTests/Elsa.IntegrationTests.csproj.DotSettings index 4b4f2ea72..d90189d75 100644 --- a/test/Elsa.IntegrationTests/Elsa.IntegrationTests.csproj.DotSettings +++ b/test/Elsa.IntegrationTests/Elsa.IntegrationTests.csproj.DotSettings @@ -1,5 +1,11 @@  + True + True + True + True + True True True + True True True \ No newline at end of file