From b1d9d041509eccf8fde87aad1fed8e000690ca25 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Sun, 31 Aug 2025 08:50:07 +0200 Subject: [PATCH] Parse `VariableTestValues` more robustly, leveraging `ExpandoObject` and type conversion logic. (#6883) * Parse `VariableTestValues` more robustly, leveraging `ExpandoObject` and type conversion logic. * Clean up unused imports in `JavaScriptAndNetTypeTest`. --- .../Services/ActivityTestRunner.cs | 24 +++++++++++++++++-- .../JavaScriptAndNetTypeTest.cs | 5 +--- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/modules/Elsa.Workflows.Core/Services/ActivityTestRunner.cs b/src/modules/Elsa.Workflows.Core/Services/ActivityTestRunner.cs index f0d41edf8..b97d3452a 100644 --- a/src/modules/Elsa.Workflows.Core/Services/ActivityTestRunner.cs +++ b/src/modules/Elsa.Workflows.Core/Services/ActivityTestRunner.cs @@ -1,4 +1,6 @@ +using System.Dynamic; using System.Text.Json; +using Elsa.Expressions.Helpers; using Elsa.Extensions; using Elsa.Workflows.Models; @@ -37,10 +39,28 @@ public class ActivityTestRunner( private IDictionary GetVariableTestValues(WorkflowGraph workflowGraph) { var variableTestValues = workflowGraph.Workflow.CustomProperties.TryGetValue("VariableTestValues", out var variableTestValuesObj) ? variableTestValuesObj : null; + + if(variableTestValues is null) + return new Dictionary(); if (variableTestValues is JsonElement jsonElement) - variableTestValues = JsonSerializer.Deserialize>(jsonElement.GetRawText()); + variableTestValues = JsonSerializer.Deserialize(jsonElement.GetRawText())!; - return variableTestValues as IDictionary ?? new Dictionary(); + var expandoObject = (ExpandoObject)variableTestValues; + var parsedValues = new Dictionary(); + + foreach (var (key, value) in expandoObject) + { + var variableDefinition = workflowGraph.Workflow.Variables.FirstOrDefault(x => x.Id == key); + + if (variableDefinition == null) + continue; + + var variableType = variableDefinition.GetVariableType(); + var variableValue = value.ConvertTo(variableType); + parsedValues[key] = variableValue; + } + + return parsedValues; } } \ No newline at end of file diff --git a/test/integration/Elsa.JavaScript.IntegrationTests/JavaScriptAndNetTypeTest.cs b/test/integration/Elsa.JavaScript.IntegrationTests/JavaScriptAndNetTypeTest.cs index 3858ead2a..344aae9c3 100644 --- a/test/integration/Elsa.JavaScript.IntegrationTests/JavaScriptAndNetTypeTest.cs +++ b/test/integration/Elsa.JavaScript.IntegrationTests/JavaScriptAndNetTypeTest.cs @@ -1,9 +1,6 @@ using System.Dynamic; -using System.Numerics; -using System.Text.Json; -using Elsa.Common.Converters; +using Elsa.Expressions.JavaScript.Contracts; using Elsa.Expressions.Models; -using Elsa.JavaScript.Contracts; using Elsa.Testing.Shared; using Microsoft.Extensions.DependencyInjection; using Xunit;