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`.
This commit is contained in:
Sipke Schoorstra 2025-08-31 08:50:07 +02:00 committed by GitHub
parent 2a10738d94
commit b1d9d04150
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 23 additions and 6 deletions

View file

@ -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<string, object?> GetVariableTestValues(WorkflowGraph workflowGraph)
{
var variableTestValues = workflowGraph.Workflow.CustomProperties.TryGetValue("VariableTestValues", out var variableTestValuesObj) ? variableTestValuesObj : null;
if(variableTestValues is null)
return new Dictionary<string, object?>();
if (variableTestValues is JsonElement jsonElement)
variableTestValues = JsonSerializer.Deserialize<Dictionary<string, object?>>(jsonElement.GetRawText());
variableTestValues = JsonSerializer.Deserialize<ExpandoObject>(jsonElement.GetRawText())!;
return variableTestValues as IDictionary<string, object?> ?? new Dictionary<string, object?>();
var expandoObject = (ExpandoObject)variableTestValues;
var parsedValues = new Dictionary<string, object?>();
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;
}
}

View file

@ -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;