From b02755a378c9cb6cd0ccdfeef18c7d3cd5b6747c Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Thu, 2 Mar 2023 21:19:23 +0100 Subject: [PATCH 1/3] Prevent stack overflow when evaluating input arguments --- .../Features/JavaScriptFeature.cs | 13 +++- ...flowDefinitionActivityJavaScriptHandler.cs | 73 +++++++++++++++++++ .../Services/JintJavaScriptEvaluator.cs | 25 ------- 3 files changed, 84 insertions(+), 27 deletions(-) create mode 100644 src/modules/Elsa.JavaScript/Handlers/WorkflowDefinitionActivityJavaScriptHandler.cs diff --git a/src/modules/Elsa.JavaScript/Features/JavaScriptFeature.cs b/src/modules/Elsa.JavaScript/Features/JavaScriptFeature.cs index d2ff8d3d1..6f25bff29 100644 --- a/src/modules/Elsa.JavaScript/Features/JavaScriptFeature.cs +++ b/src/modules/Elsa.JavaScript/Features/JavaScriptFeature.cs @@ -33,6 +33,13 @@ public class JavaScriptFeature : FeatureBase /// public override void Configure() { + Module.UseWorkflowManagement(management => management.AddActivitiesFrom()); + } + + /// + public override void Apply() + { + // JavaScript services. Services .AddSingleton() .AddSingleton() @@ -41,6 +48,7 @@ public class JavaScriptFeature : FeatureBase .AddExpressionHandler() ; + // Type definition services. Services .AddSingleton() .AddSingleton() @@ -50,7 +58,8 @@ public class JavaScriptFeature : FeatureBase .AddSingleton() .AddSingleton() ; - - Module.UseWorkflowManagement(management => management.AddActivitiesFrom()); + + // Handlers. + Services.AddNotificationHandlersFrom(); } } \ No newline at end of file diff --git a/src/modules/Elsa.JavaScript/Handlers/WorkflowDefinitionActivityJavaScriptHandler.cs b/src/modules/Elsa.JavaScript/Handlers/WorkflowDefinitionActivityJavaScriptHandler.cs new file mode 100644 index 000000000..281d2a751 --- /dev/null +++ b/src/modules/Elsa.JavaScript/Handlers/WorkflowDefinitionActivityJavaScriptHandler.cs @@ -0,0 +1,73 @@ +using Elsa.Expressions.Models; +using Elsa.Expressions.Services; +using Elsa.Extensions; +using Elsa.JavaScript.Notifications; +using Elsa.Mediator.Services; +using Elsa.Workflows.Core.Models; +using Elsa.Workflows.Management.Activities; +using Elsa.Workflows.Management.Extensions; +using Elsa.Workflows.Management.Services; +using Humanizer; +using JetBrains.Annotations; +using Jint; + +namespace Elsa.JavaScript.Handlers; + +/// +/// Configures the JavaScript engine with workflow input getters. +/// +[PublicAPI] +public class WorkflowDefinitionActivityJavaScriptHandler : INotificationHandler +{ + private readonly IActivityRegistry _activityRegistry; + private readonly IExpressionEvaluator _expressionEvaluator; + + /// + /// Constructor. + /// + public WorkflowDefinitionActivityJavaScriptHandler(IActivityRegistry activityRegistry, IExpressionEvaluator expressionEvaluator) + { + _activityRegistry = activityRegistry; + _expressionEvaluator = expressionEvaluator; + } + + /// + public async Task HandleAsync(EvaluatingJavaScript notification, CancellationToken cancellationToken) + { + var engine = notification.Engine; + var context = notification.Context; + + // If we are already evaluating inputs, then we're in a circular evaluation loop. In this case, we should not attempt to evaluate the inputs. + if(context.TransientProperties.TryGetValue("EvaluatingInputs", out var evaluatingInputs) && (bool)evaluatingInputs) + return; + + // To prevent a circular evaluation loop, set a flag on the context to indicate that we're currently evaluating the inputs. + context.TransientProperties["EvaluatingInputs"] = true; + + // Create input getters. + await CreateInputAccessorsAsync(engine, context); + } + + private async Task CreateInputAccessorsAsync(Engine engine, ExpressionExecutionContext context) + { + var workflowDefinitionActivity = GetFirstWorkflowDefinitionActivity(context); + + if (workflowDefinitionActivity == null) + return; + + var descriptor = _activityRegistry.Find(workflowDefinitionActivity.Type, workflowDefinitionActivity.Version)!; + var inputDefinitions = descriptor.Inputs; + + foreach (var inputDefinition in inputDefinitions) + { + var inputPascalName = inputDefinition.Name.Pascalize(); + var input = workflowDefinitionActivity.SyntheticProperties.TryGetValue(inputDefinition.Name, out var inputValue) ? (Input?)inputValue : default; + var evaluatedExpression = input != null ? await _expressionEvaluator.EvaluateAsync(input, context) : input; + + engine.SetValue($"get{inputPascalName}", (Func)(() => evaluatedExpression)); + } + } + + private static WorkflowDefinitionActivity? GetFirstWorkflowDefinitionActivity(ExpressionExecutionContext context) => + context.GetActivityExecutionContext().GetFirstWorkflowDefinitionActivity(); +} \ No newline at end of file diff --git a/src/modules/Elsa.JavaScript/Services/JintJavaScriptEvaluator.cs b/src/modules/Elsa.JavaScript/Services/JintJavaScriptEvaluator.cs index d1f4b4a66..3b3e41b05 100644 --- a/src/modules/Elsa.JavaScript/Services/JintJavaScriptEvaluator.cs +++ b/src/modules/Elsa.JavaScript/Services/JintJavaScriptEvaluator.cs @@ -74,8 +74,6 @@ public class JintJavaScriptEvaluator : IJavaScriptEvaluator // Create variable & input setters and getters for each variable. CreateMemoryBlockAccessors(engine, context); - // Create input getters. - await CreateInputAccessorsAsync(engine, context); engine.SetValue("isNullOrWhiteSpace", (Func)(value => string.IsNullOrWhiteSpace(value))); engine.SetValue("isNullOrEmpty", (Func)(value => string.IsNullOrEmpty(value))); @@ -93,29 +91,6 @@ public class JintJavaScriptEvaluator : IJavaScriptEvaluator return engine; } - - private async Task CreateInputAccessorsAsync(Engine engine, ExpressionExecutionContext context) - { - var workflowDefinitionActivity = GetFirstWorkflowDefinitionActivity(context); - - if (workflowDefinitionActivity == null) - return; - - var descriptor = _activityRegistry.Find(workflowDefinitionActivity.Type, workflowDefinitionActivity.Version)!; - var inputDefinitions = descriptor.Inputs; - - foreach (var inputDefinition in inputDefinitions) - { - var inputPascalName = inputDefinition.Name.Pascalize(); - var input = workflowDefinitionActivity.SyntheticProperties.TryGetValue(inputDefinition.Name, out var inputValue) ? (Input?)inputValue : default; - var evaluatedExpression = input != null ? await _expressionEvaluator.EvaluateAsync(input, context) : input; - - engine.SetValue($"get{inputPascalName}", (Func)(() => evaluatedExpression)); - } - } - - private static WorkflowDefinitionActivity? GetFirstWorkflowDefinitionActivity(ExpressionExecutionContext context) => - context.GetActivityExecutionContext().GetFirstWorkflowDefinitionActivity(); private static void CreateMemoryBlockAccessors(Engine engine, ExpressionExecutionContext context) { From 8770711f19dddef4b78c1122724300926713ddb5 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Thu, 2 Mar 2023 21:19:34 +0100 Subject: [PATCH 2/3] Shuffle test folders --- Elsa.sln | 37 ++++++++++++------- test/Elsa.UnitTests/UnitTest1.cs | 11 ------ .../Activities/Break/BreakForEachWorkflow.cs | 0 .../Activities/Break/BreakForWorkflow.cs | 0 .../Activities/Break/BreakTests.cs | 0 .../Break/BreakWhileForkWorkflow.cs | 0 .../Activities/Break/BreakWhileWorkflow.cs | 0 .../Activities/Finish/FinishForkedWorkflow.cs | 0 .../Finish/FinishSequentialWorkflow.cs | 0 .../Activities/Finish/FinishTests.cs | 0 .../Flowchart/Services/Workflows.cs | 0 .../Activities/ForEach/ForEachTests.cs | 0 .../Activities/ForEach/ForEachWorkflow.cs | 0 .../ForEach/NestedForEachWithBreakWorkflow.cs | 0 .../Activities/Fork/BasicForkWorkflow.cs | 0 .../Activities/Fork/ForkTests.cs | 0 .../Activities/Fork/JoinAnyForkWorkflow.cs | 0 .../Activities/If/ComplexIfWorkflow.cs | 0 .../Activities/If/IfTests.cs | 0 .../Activities/If/IfThenWorkflow.cs | 0 .../Sequence/NestedSequentialWorkflow.cs | 0 .../Activities/Sequence/SequenceTests.cs | 0 .../Activities/Sequence/SequentialWorkflow.cs | 0 .../Activities/WriteLine/WriteLineTests.cs | 0 .../Elsa.IntegrationTests.csproj | 0 .../Elsa.IntegrationTests.csproj.DotSettings | 0 .../Scenarios/Blocking/Tests.cs | 0 .../Scenarios/Blocking/Workflows.cs | 0 .../Scenarios/BlockingAndBreaking/Tests.cs | 0 .../BlockingAndBreaking/Workflows.cs | 0 .../Elsa.JavaScript.UnitTests.csproj} | 5 +++ .../Elsa.JavaScript.UnitTests/UnitTest1.cs | 26 +++++++++++++ 32 files changed, 54 insertions(+), 25 deletions(-) delete mode 100644 test/Elsa.UnitTests/UnitTest1.cs rename test/{ => integration}/Elsa.IntegrationTests/Activities/Break/BreakForEachWorkflow.cs (100%) rename test/{ => integration}/Elsa.IntegrationTests/Activities/Break/BreakForWorkflow.cs (100%) rename test/{ => integration}/Elsa.IntegrationTests/Activities/Break/BreakTests.cs (100%) rename test/{ => integration}/Elsa.IntegrationTests/Activities/Break/BreakWhileForkWorkflow.cs (100%) rename test/{ => integration}/Elsa.IntegrationTests/Activities/Break/BreakWhileWorkflow.cs (100%) rename test/{ => integration}/Elsa.IntegrationTests/Activities/Finish/FinishForkedWorkflow.cs (100%) rename test/{ => integration}/Elsa.IntegrationTests/Activities/Finish/FinishSequentialWorkflow.cs (100%) rename test/{ => integration}/Elsa.IntegrationTests/Activities/Finish/FinishTests.cs (100%) rename test/{ => integration}/Elsa.IntegrationTests/Activities/Flowchart/Services/Workflows.cs (100%) rename test/{ => integration}/Elsa.IntegrationTests/Activities/ForEach/ForEachTests.cs (100%) rename test/{ => integration}/Elsa.IntegrationTests/Activities/ForEach/ForEachWorkflow.cs (100%) rename test/{ => integration}/Elsa.IntegrationTests/Activities/ForEach/NestedForEachWithBreakWorkflow.cs (100%) rename test/{ => integration}/Elsa.IntegrationTests/Activities/Fork/BasicForkWorkflow.cs (100%) rename test/{ => integration}/Elsa.IntegrationTests/Activities/Fork/ForkTests.cs (100%) rename test/{ => integration}/Elsa.IntegrationTests/Activities/Fork/JoinAnyForkWorkflow.cs (100%) rename test/{ => integration}/Elsa.IntegrationTests/Activities/If/ComplexIfWorkflow.cs (100%) rename test/{ => integration}/Elsa.IntegrationTests/Activities/If/IfTests.cs (100%) rename test/{ => integration}/Elsa.IntegrationTests/Activities/If/IfThenWorkflow.cs (100%) rename test/{ => integration}/Elsa.IntegrationTests/Activities/Sequence/NestedSequentialWorkflow.cs (100%) rename test/{ => integration}/Elsa.IntegrationTests/Activities/Sequence/SequenceTests.cs (100%) rename test/{ => integration}/Elsa.IntegrationTests/Activities/Sequence/SequentialWorkflow.cs (100%) rename test/{ => integration}/Elsa.IntegrationTests/Activities/WriteLine/WriteLineTests.cs (100%) rename test/{ => integration}/Elsa.IntegrationTests/Elsa.IntegrationTests.csproj (100%) rename test/{ => integration}/Elsa.IntegrationTests/Elsa.IntegrationTests.csproj.DotSettings (100%) rename test/{ => integration}/Elsa.IntegrationTests/Scenarios/Blocking/Tests.cs (100%) rename test/{ => integration}/Elsa.IntegrationTests/Scenarios/Blocking/Workflows.cs (100%) rename test/{ => integration}/Elsa.IntegrationTests/Scenarios/BlockingAndBreaking/Tests.cs (100%) rename test/{ => integration}/Elsa.IntegrationTests/Scenarios/BlockingAndBreaking/Workflows.cs (100%) rename test/{Elsa.UnitTests/Elsa.UnitTests.csproj => unit/Elsa.JavaScript.UnitTests/Elsa.JavaScript.UnitTests.csproj} (82%) create mode 100644 test/unit/Elsa.JavaScript.UnitTests/UnitTest1.cs diff --git a/Elsa.sln b/Elsa.sln index 0d380ec19..11f9750b8 100644 --- a/Elsa.sln +++ b/Elsa.sln @@ -46,10 +46,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.MassTransit", "src\mod EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{90031D64-CA0F-46D0-9AF4-8DC023A5FFCD}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.IntegrationTests", "test\Elsa.IntegrationTests\Elsa.IntegrationTests.csproj", "{B066ED0A-86E0-4025-85C2-7E8F7139D8A4}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.UnitTests", "test\Elsa.UnitTests\Elsa.UnitTests.csproj", "{85A6862B-E523-45FA-A26B-BF98BE140E89}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Labels", "src\modules\Elsa.Labels\Elsa.Labels.csproj", "{80FF5821-E831-450D-AA0C-C76D07D878F4}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "bundles", "bundles", "{F06B9573-DF68-4606-866C-A7546A10A05A}" @@ -161,6 +157,16 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.ElasticsearchS EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.OutboundHttpRequests", "src\samples\console\Elsa.Samples.OutboundHttpRequests\Elsa.Samples.OutboundHttpRequests.csproj", "{39AB433B-F7A6-4DD3-873A-9527946B7BD8}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "unit", "unit", "{18453B51-25EB-4317-A4B3-B10518252E92}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "integration", "integration", "{1B8D5897-902E-4632-8698-E89CAF3DDF54}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "component", "component", "{08B41FFA-CEE3-46A7-B5C0-3EB65D37A16C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.JavaScript.UnitTests", "test\unit\Elsa.JavaScript.UnitTests\Elsa.JavaScript.UnitTests.csproj", "{0BB927FB-8C12-49B6-9150-64B733B2EBFD}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.IntegrationTests", "test\integration\Elsa.IntegrationTests\Elsa.IntegrationTests.csproj", "{E9652738-2B3D-4357-B84B-54F0EA161382}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -199,14 +205,6 @@ Global {BB983D0B-A939-4008-B9E3-C7C172BCF83A}.Debug|Any CPU.Build.0 = Debug|Any CPU {BB983D0B-A939-4008-B9E3-C7C172BCF83A}.Release|Any CPU.ActiveCfg = Release|Any CPU {BB983D0B-A939-4008-B9E3-C7C172BCF83A}.Release|Any CPU.Build.0 = Release|Any CPU - {B066ED0A-86E0-4025-85C2-7E8F7139D8A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B066ED0A-86E0-4025-85C2-7E8F7139D8A4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B066ED0A-86E0-4025-85C2-7E8F7139D8A4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B066ED0A-86E0-4025-85C2-7E8F7139D8A4}.Release|Any CPU.Build.0 = Release|Any CPU - {85A6862B-E523-45FA-A26B-BF98BE140E89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {85A6862B-E523-45FA-A26B-BF98BE140E89}.Debug|Any CPU.Build.0 = Debug|Any CPU - {85A6862B-E523-45FA-A26B-BF98BE140E89}.Release|Any CPU.ActiveCfg = Release|Any CPU - {85A6862B-E523-45FA-A26B-BF98BE140E89}.Release|Any CPU.Build.0 = Release|Any CPU {80FF5821-E831-450D-AA0C-C76D07D878F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {80FF5821-E831-450D-AA0C-C76D07D878F4}.Debug|Any CPU.Build.0 = Debug|Any CPU {80FF5821-E831-450D-AA0C-C76D07D878F4}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -411,6 +409,14 @@ Global {39AB433B-F7A6-4DD3-873A-9527946B7BD8}.Debug|Any CPU.Build.0 = Debug|Any CPU {39AB433B-F7A6-4DD3-873A-9527946B7BD8}.Release|Any CPU.ActiveCfg = Release|Any CPU {39AB433B-F7A6-4DD3-873A-9527946B7BD8}.Release|Any CPU.Build.0 = Release|Any CPU + {0BB927FB-8C12-49B6-9150-64B733B2EBFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0BB927FB-8C12-49B6-9150-64B733B2EBFD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0BB927FB-8C12-49B6-9150-64B733B2EBFD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0BB927FB-8C12-49B6-9150-64B733B2EBFD}.Release|Any CPU.Build.0 = Release|Any CPU + {E9652738-2B3D-4357-B84B-54F0EA161382}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E9652738-2B3D-4357-B84B-54F0EA161382}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E9652738-2B3D-4357-B84B-54F0EA161382}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E9652738-2B3D-4357-B84B-54F0EA161382}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution {155227F0-A33B-40AA-A4B4-06F813EB921B} = {61017E64-6D00-49CB-9E81-5002DC8F7D5F} @@ -418,8 +424,6 @@ Global {873BFC3E-63C2-4495-A503-5EC05DCD84E4} = {155227F0-A33B-40AA-A4B4-06F813EB921B} {56C2FFB8-EA54-45B5-A095-4A78142EB4B5} = {155227F0-A33B-40AA-A4B4-06F813EB921B} {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79} = {61017E64-6D00-49CB-9E81-5002DC8F7D5F} - {B066ED0A-86E0-4025-85C2-7E8F7139D8A4} = {90031D64-CA0F-46D0-9AF4-8DC023A5FFCD} - {85A6862B-E523-45FA-A26B-BF98BE140E89} = {90031D64-CA0F-46D0-9AF4-8DC023A5FFCD} {F06B9573-DF68-4606-866C-A7546A10A05A} = {61017E64-6D00-49CB-9E81-5002DC8F7D5F} {B2049499-D384-46DF-8837-F1180107DD54} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79} {FC5D2CE9-FFB0-478D-8D54-E4109D1FD202} = {F06B9573-DF68-4606-866C-A7546A10A05A} @@ -481,5 +485,10 @@ Global {C25CFDCF-8E06-4DD8-A83E-FF7EF9FDA02E} = {56C2FFB8-EA54-45B5-A095-4A78142EB4B5} {4A54379F-4775-41B6-9752-FF300288916A} = {56C2FFB8-EA54-45B5-A095-4A78142EB4B5} {39AB433B-F7A6-4DD3-873A-9527946B7BD8} = {873BFC3E-63C2-4495-A503-5EC05DCD84E4} + {18453B51-25EB-4317-A4B3-B10518252E92} = {90031D64-CA0F-46D0-9AF4-8DC023A5FFCD} + {1B8D5897-902E-4632-8698-E89CAF3DDF54} = {90031D64-CA0F-46D0-9AF4-8DC023A5FFCD} + {08B41FFA-CEE3-46A7-B5C0-3EB65D37A16C} = {90031D64-CA0F-46D0-9AF4-8DC023A5FFCD} + {0BB927FB-8C12-49B6-9150-64B733B2EBFD} = {18453B51-25EB-4317-A4B3-B10518252E92} + {E9652738-2B3D-4357-B84B-54F0EA161382} = {1B8D5897-902E-4632-8698-E89CAF3DDF54} EndGlobalSection EndGlobal diff --git a/test/Elsa.UnitTests/UnitTest1.cs b/test/Elsa.UnitTests/UnitTest1.cs deleted file mode 100644 index bdf80b6e8..000000000 --- a/test/Elsa.UnitTests/UnitTest1.cs +++ /dev/null @@ -1,11 +0,0 @@ -using Xunit; - -namespace Elsa.UnitTests; - -public class UnitTest1 -{ - [Fact] - public void Test1() - { - } -} \ No newline at end of file diff --git a/test/Elsa.IntegrationTests/Activities/Break/BreakForEachWorkflow.cs b/test/integration/Elsa.IntegrationTests/Activities/Break/BreakForEachWorkflow.cs similarity index 100% rename from test/Elsa.IntegrationTests/Activities/Break/BreakForEachWorkflow.cs rename to test/integration/Elsa.IntegrationTests/Activities/Break/BreakForEachWorkflow.cs diff --git a/test/Elsa.IntegrationTests/Activities/Break/BreakForWorkflow.cs b/test/integration/Elsa.IntegrationTests/Activities/Break/BreakForWorkflow.cs similarity index 100% rename from test/Elsa.IntegrationTests/Activities/Break/BreakForWorkflow.cs rename to test/integration/Elsa.IntegrationTests/Activities/Break/BreakForWorkflow.cs diff --git a/test/Elsa.IntegrationTests/Activities/Break/BreakTests.cs b/test/integration/Elsa.IntegrationTests/Activities/Break/BreakTests.cs similarity index 100% rename from test/Elsa.IntegrationTests/Activities/Break/BreakTests.cs rename to test/integration/Elsa.IntegrationTests/Activities/Break/BreakTests.cs diff --git a/test/Elsa.IntegrationTests/Activities/Break/BreakWhileForkWorkflow.cs b/test/integration/Elsa.IntegrationTests/Activities/Break/BreakWhileForkWorkflow.cs similarity index 100% rename from test/Elsa.IntegrationTests/Activities/Break/BreakWhileForkWorkflow.cs rename to test/integration/Elsa.IntegrationTests/Activities/Break/BreakWhileForkWorkflow.cs diff --git a/test/Elsa.IntegrationTests/Activities/Break/BreakWhileWorkflow.cs b/test/integration/Elsa.IntegrationTests/Activities/Break/BreakWhileWorkflow.cs similarity index 100% rename from test/Elsa.IntegrationTests/Activities/Break/BreakWhileWorkflow.cs rename to test/integration/Elsa.IntegrationTests/Activities/Break/BreakWhileWorkflow.cs diff --git a/test/Elsa.IntegrationTests/Activities/Finish/FinishForkedWorkflow.cs b/test/integration/Elsa.IntegrationTests/Activities/Finish/FinishForkedWorkflow.cs similarity index 100% rename from test/Elsa.IntegrationTests/Activities/Finish/FinishForkedWorkflow.cs rename to test/integration/Elsa.IntegrationTests/Activities/Finish/FinishForkedWorkflow.cs diff --git a/test/Elsa.IntegrationTests/Activities/Finish/FinishSequentialWorkflow.cs b/test/integration/Elsa.IntegrationTests/Activities/Finish/FinishSequentialWorkflow.cs similarity index 100% rename from test/Elsa.IntegrationTests/Activities/Finish/FinishSequentialWorkflow.cs rename to test/integration/Elsa.IntegrationTests/Activities/Finish/FinishSequentialWorkflow.cs diff --git a/test/Elsa.IntegrationTests/Activities/Finish/FinishTests.cs b/test/integration/Elsa.IntegrationTests/Activities/Finish/FinishTests.cs similarity index 100% rename from test/Elsa.IntegrationTests/Activities/Finish/FinishTests.cs rename to test/integration/Elsa.IntegrationTests/Activities/Finish/FinishTests.cs diff --git a/test/Elsa.IntegrationTests/Activities/Flowchart/Services/Workflows.cs b/test/integration/Elsa.IntegrationTests/Activities/Flowchart/Services/Workflows.cs similarity index 100% rename from test/Elsa.IntegrationTests/Activities/Flowchart/Services/Workflows.cs rename to test/integration/Elsa.IntegrationTests/Activities/Flowchart/Services/Workflows.cs diff --git a/test/Elsa.IntegrationTests/Activities/ForEach/ForEachTests.cs b/test/integration/Elsa.IntegrationTests/Activities/ForEach/ForEachTests.cs similarity index 100% rename from test/Elsa.IntegrationTests/Activities/ForEach/ForEachTests.cs rename to test/integration/Elsa.IntegrationTests/Activities/ForEach/ForEachTests.cs diff --git a/test/Elsa.IntegrationTests/Activities/ForEach/ForEachWorkflow.cs b/test/integration/Elsa.IntegrationTests/Activities/ForEach/ForEachWorkflow.cs similarity index 100% rename from test/Elsa.IntegrationTests/Activities/ForEach/ForEachWorkflow.cs rename to test/integration/Elsa.IntegrationTests/Activities/ForEach/ForEachWorkflow.cs diff --git a/test/Elsa.IntegrationTests/Activities/ForEach/NestedForEachWithBreakWorkflow.cs b/test/integration/Elsa.IntegrationTests/Activities/ForEach/NestedForEachWithBreakWorkflow.cs similarity index 100% rename from test/Elsa.IntegrationTests/Activities/ForEach/NestedForEachWithBreakWorkflow.cs rename to test/integration/Elsa.IntegrationTests/Activities/ForEach/NestedForEachWithBreakWorkflow.cs diff --git a/test/Elsa.IntegrationTests/Activities/Fork/BasicForkWorkflow.cs b/test/integration/Elsa.IntegrationTests/Activities/Fork/BasicForkWorkflow.cs similarity index 100% rename from test/Elsa.IntegrationTests/Activities/Fork/BasicForkWorkflow.cs rename to test/integration/Elsa.IntegrationTests/Activities/Fork/BasicForkWorkflow.cs diff --git a/test/Elsa.IntegrationTests/Activities/Fork/ForkTests.cs b/test/integration/Elsa.IntegrationTests/Activities/Fork/ForkTests.cs similarity index 100% rename from test/Elsa.IntegrationTests/Activities/Fork/ForkTests.cs rename to test/integration/Elsa.IntegrationTests/Activities/Fork/ForkTests.cs diff --git a/test/Elsa.IntegrationTests/Activities/Fork/JoinAnyForkWorkflow.cs b/test/integration/Elsa.IntegrationTests/Activities/Fork/JoinAnyForkWorkflow.cs similarity index 100% rename from test/Elsa.IntegrationTests/Activities/Fork/JoinAnyForkWorkflow.cs rename to test/integration/Elsa.IntegrationTests/Activities/Fork/JoinAnyForkWorkflow.cs diff --git a/test/Elsa.IntegrationTests/Activities/If/ComplexIfWorkflow.cs b/test/integration/Elsa.IntegrationTests/Activities/If/ComplexIfWorkflow.cs similarity index 100% rename from test/Elsa.IntegrationTests/Activities/If/ComplexIfWorkflow.cs rename to test/integration/Elsa.IntegrationTests/Activities/If/ComplexIfWorkflow.cs diff --git a/test/Elsa.IntegrationTests/Activities/If/IfTests.cs b/test/integration/Elsa.IntegrationTests/Activities/If/IfTests.cs similarity index 100% rename from test/Elsa.IntegrationTests/Activities/If/IfTests.cs rename to test/integration/Elsa.IntegrationTests/Activities/If/IfTests.cs diff --git a/test/Elsa.IntegrationTests/Activities/If/IfThenWorkflow.cs b/test/integration/Elsa.IntegrationTests/Activities/If/IfThenWorkflow.cs similarity index 100% rename from test/Elsa.IntegrationTests/Activities/If/IfThenWorkflow.cs rename to test/integration/Elsa.IntegrationTests/Activities/If/IfThenWorkflow.cs diff --git a/test/Elsa.IntegrationTests/Activities/Sequence/NestedSequentialWorkflow.cs b/test/integration/Elsa.IntegrationTests/Activities/Sequence/NestedSequentialWorkflow.cs similarity index 100% rename from test/Elsa.IntegrationTests/Activities/Sequence/NestedSequentialWorkflow.cs rename to test/integration/Elsa.IntegrationTests/Activities/Sequence/NestedSequentialWorkflow.cs diff --git a/test/Elsa.IntegrationTests/Activities/Sequence/SequenceTests.cs b/test/integration/Elsa.IntegrationTests/Activities/Sequence/SequenceTests.cs similarity index 100% rename from test/Elsa.IntegrationTests/Activities/Sequence/SequenceTests.cs rename to test/integration/Elsa.IntegrationTests/Activities/Sequence/SequenceTests.cs diff --git a/test/Elsa.IntegrationTests/Activities/Sequence/SequentialWorkflow.cs b/test/integration/Elsa.IntegrationTests/Activities/Sequence/SequentialWorkflow.cs similarity index 100% rename from test/Elsa.IntegrationTests/Activities/Sequence/SequentialWorkflow.cs rename to test/integration/Elsa.IntegrationTests/Activities/Sequence/SequentialWorkflow.cs diff --git a/test/Elsa.IntegrationTests/Activities/WriteLine/WriteLineTests.cs b/test/integration/Elsa.IntegrationTests/Activities/WriteLine/WriteLineTests.cs similarity index 100% rename from test/Elsa.IntegrationTests/Activities/WriteLine/WriteLineTests.cs rename to test/integration/Elsa.IntegrationTests/Activities/WriteLine/WriteLineTests.cs diff --git a/test/Elsa.IntegrationTests/Elsa.IntegrationTests.csproj b/test/integration/Elsa.IntegrationTests/Elsa.IntegrationTests.csproj similarity index 100% rename from test/Elsa.IntegrationTests/Elsa.IntegrationTests.csproj rename to test/integration/Elsa.IntegrationTests/Elsa.IntegrationTests.csproj diff --git a/test/Elsa.IntegrationTests/Elsa.IntegrationTests.csproj.DotSettings b/test/integration/Elsa.IntegrationTests/Elsa.IntegrationTests.csproj.DotSettings similarity index 100% rename from test/Elsa.IntegrationTests/Elsa.IntegrationTests.csproj.DotSettings rename to test/integration/Elsa.IntegrationTests/Elsa.IntegrationTests.csproj.DotSettings diff --git a/test/Elsa.IntegrationTests/Scenarios/Blocking/Tests.cs b/test/integration/Elsa.IntegrationTests/Scenarios/Blocking/Tests.cs similarity index 100% rename from test/Elsa.IntegrationTests/Scenarios/Blocking/Tests.cs rename to test/integration/Elsa.IntegrationTests/Scenarios/Blocking/Tests.cs diff --git a/test/Elsa.IntegrationTests/Scenarios/Blocking/Workflows.cs b/test/integration/Elsa.IntegrationTests/Scenarios/Blocking/Workflows.cs similarity index 100% rename from test/Elsa.IntegrationTests/Scenarios/Blocking/Workflows.cs rename to test/integration/Elsa.IntegrationTests/Scenarios/Blocking/Workflows.cs diff --git a/test/Elsa.IntegrationTests/Scenarios/BlockingAndBreaking/Tests.cs b/test/integration/Elsa.IntegrationTests/Scenarios/BlockingAndBreaking/Tests.cs similarity index 100% rename from test/Elsa.IntegrationTests/Scenarios/BlockingAndBreaking/Tests.cs rename to test/integration/Elsa.IntegrationTests/Scenarios/BlockingAndBreaking/Tests.cs diff --git a/test/Elsa.IntegrationTests/Scenarios/BlockingAndBreaking/Workflows.cs b/test/integration/Elsa.IntegrationTests/Scenarios/BlockingAndBreaking/Workflows.cs similarity index 100% rename from test/Elsa.IntegrationTests/Scenarios/BlockingAndBreaking/Workflows.cs rename to test/integration/Elsa.IntegrationTests/Scenarios/BlockingAndBreaking/Workflows.cs diff --git a/test/Elsa.UnitTests/Elsa.UnitTests.csproj b/test/unit/Elsa.JavaScript.UnitTests/Elsa.JavaScript.UnitTests.csproj similarity index 82% rename from test/Elsa.UnitTests/Elsa.UnitTests.csproj rename to test/unit/Elsa.JavaScript.UnitTests/Elsa.JavaScript.UnitTests.csproj index 59bcc7e28..26fc34995 100644 --- a/test/Elsa.UnitTests/Elsa.UnitTests.csproj +++ b/test/unit/Elsa.JavaScript.UnitTests/Elsa.JavaScript.UnitTests.csproj @@ -8,6 +8,7 @@ + runtime; build; native; contentfiles; analyzers; buildtransitive @@ -19,4 +20,8 @@ + + + + diff --git a/test/unit/Elsa.JavaScript.UnitTests/UnitTest1.cs b/test/unit/Elsa.JavaScript.UnitTests/UnitTest1.cs new file mode 100644 index 000000000..5507242b8 --- /dev/null +++ b/test/unit/Elsa.JavaScript.UnitTests/UnitTest1.cs @@ -0,0 +1,26 @@ +using Elsa.Expressions.Services; +using Elsa.JavaScript.Handlers; +using Elsa.Workflows.Management.Services; +using Moq; +using Xunit; + +namespace Elsa.JavaScript.UnitTests; + +public class WorkflowDefinitionActivityJavaScriptHandlerTests +{ + private readonly WorkflowDefinitionActivityJavaScriptHandler _handler; + + public WorkflowDefinitionActivityJavaScriptHandlerTests() + { + var activityRegistryMock = new Mock(); + var expressionEvaluatorMock = new Mock(); + _handler = new WorkflowDefinitionActivityJavaScriptHandler(activityRegistryMock.Object, expressionEvaluatorMock.Object); + } + + [Fact] + public void Test1() + { + + } + +} \ No newline at end of file From c2ce3ce1d0f9447735ca5d822998b82dc84b959c Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Thu, 2 Mar 2023 21:35:37 +0100 Subject: [PATCH 3/3] Fix test projects --- .../Elsa.IntegrationTests/Elsa.IntegrationTests.csproj | 4 ++-- .../Elsa.JavaScript.UnitTests.csproj | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/integration/Elsa.IntegrationTests/Elsa.IntegrationTests.csproj b/test/integration/Elsa.IntegrationTests/Elsa.IntegrationTests.csproj index b063f451e..0872a73d6 100644 --- a/test/integration/Elsa.IntegrationTests/Elsa.IntegrationTests.csproj +++ b/test/integration/Elsa.IntegrationTests/Elsa.IntegrationTests.csproj @@ -21,8 +21,8 @@ - - + + diff --git a/test/unit/Elsa.JavaScript.UnitTests/Elsa.JavaScript.UnitTests.csproj b/test/unit/Elsa.JavaScript.UnitTests/Elsa.JavaScript.UnitTests.csproj index 26fc34995..e541d58fc 100644 --- a/test/unit/Elsa.JavaScript.UnitTests/Elsa.JavaScript.UnitTests.csproj +++ b/test/unit/Elsa.JavaScript.UnitTests/Elsa.JavaScript.UnitTests.csproj @@ -21,7 +21,7 @@ - +