< Summary

Information
Class: Elsa.Workflows.Management.Providers.DefaultExpressionDescriptorProvider
Assembly: Elsa.Workflows.Management
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Management/Providers/DefaultExpressionDescriptorProvider.cs
Line coverage
78%
Covered lines: 67
Uncovered lines: 18
Coverable lines: 85
Total lines: 136
Line coverage: 78.8%
Branch coverage
50%
Covered branches: 12
Total branches: 24
Branch coverage: 50%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
GetDescriptors()100%11100%
CreateLiteralDescriptor()100%22100%
CreateObjectDescriptor()100%11100%
CreateJsonDescriptor()100%11100%
CreateDelegateDescriptor()100%11100%
CreateVariableDescriptor()0%9658.33%
CreateInputDescriptor()0%8665.21%
CreateDescriptor(...)100%1010100%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Management/Providers/DefaultExpressionDescriptorProvider.cs

#LineLine coverage
 1using System.Diagnostics;
 2using System.Text.Json;
 3using Elsa.Expressions;
 4using Elsa.Expressions.Contracts;
 5using Elsa.Expressions.Models;
 6using Elsa.Extensions;
 7using Elsa.Workflows.Expressions;
 8using Elsa.Workflows.Memory;
 9using Elsa.Workflows.Models;
 10using Microsoft.Extensions.DependencyInjection;
 11
 12namespace Elsa.Workflows.Management.Providers;
 13
 14/// <inheritdoc />
 15public class DefaultExpressionDescriptorProvider : IExpressionDescriptorProvider
 16{
 17    /// <inheritdoc />
 18    public IEnumerable<ExpressionDescriptor> GetDescriptors()
 19    {
 31720        yield return CreateLiteralDescriptor();
 31721        yield return CreateObjectDescriptor();
 31722        yield return CreateJsonDescriptor();
 31723        yield return CreateDelegateDescriptor();
 31724        yield return CreateVariableDescriptor();
 31725        yield return CreateInputDescriptor();
 31726    }
 27
 28    private ExpressionDescriptor CreateLiteralDescriptor()
 29    {
 31730        return CreateDescriptor<LiteralExpressionHandler>(
 31731            "Literal",
 31732            "Literal",
 31733            isBrowsable: false,
 165434            memoryBlockReferenceFactory: () => new Literal(),
 31735            deserialize: context =>
 31736            {
 165437                var elementValue = context.JsonElement.TryGetProperty("value", out var v) ? v : default;
 165438                var value = elementValue.GetValue();
 165439                return new Expression("Literal", value);
 31740            });
 41    }
 42
 31743    private ExpressionDescriptor CreateObjectDescriptor() => CreateDescriptor<ObjectExpressionHandler>("Object", "Object
 44
 45    [Obsolete("Use Object instead.")]
 31746    private ExpressionDescriptor CreateJsonDescriptor() => CreateDescriptor<ObjectExpressionHandler>("Json", "Json", mon
 47
 31748    private ExpressionDescriptor CreateDelegateDescriptor() => CreateDescriptor<DelegateExpressionHandler>("Delegate", "
 49
 50    private ExpressionDescriptor CreateVariableDescriptor()
 51    {
 31752        return CreateDescriptor<VariableExpressionHandler>(
 31753            "Variable",
 31754            "Variable",
 31755            isBrowsable: true,
 056            memoryBlockReferenceFactory: () => new Variable(),
 31757            deserialize: context =>
 31758            {
 059                var valueElement = context.JsonElement.TryGetProperty("value", out var v) ? v : default;
 060                var valueString = valueElement.GetValue()?.ToString();
 31761
 062                if (string.IsNullOrWhiteSpace(valueString))
 063                    return new Expression("Variable", null);
 31764
 31765                try
 31766                {
 067                    var value = JsonSerializer.Deserialize(valueString, context.MemoryBlockType, context.Options);
 068                    return new Expression("Variable", value);
 31769                }
 070                catch (Exception)
 31771                {
 072                    return new Expression("Variable", null);
 31773                }
 074            }
 31775        );
 76    }
 77
 78    private ExpressionDescriptor CreateInputDescriptor()
 79    {
 31780        return CreateDescriptor<InputExpressionHandler>(
 31781            "Input",
 31782            "Input", // Displayed text in UI (input selection dropdown)
 31783            isBrowsable: true,
 31784            deserialize: context =>
 31785            {
 086                var valueElement = context.JsonElement.TryGetProperty("value", out var v) ? v : default;
 087                var valueString = valueElement.GetValue()?.ToString();
 31788
 089                if (string.IsNullOrWhiteSpace(valueString)) return new Expression("Input", null);
 31790
 31791                try
 31792                {
 093                    var value = JsonSerializer.Deserialize(valueString, typeof(InputDefinition), context.Options);
 31794
 095                    return new Expression("Input", value);
 31796                }
 097                catch (Exception)
 31798                {
 099                    return new Expression("Input", null);
 317100                }
 0101            }
 317102        );
 103    }
 104
 105    private static ExpressionDescriptor CreateDescriptor<THandler>(
 106        string expressionType,
 107        string displayName,
 108        bool isSerializable = true,
 109        bool isBrowsable = true,
 110        string? monacoLanguage = null,
 111        Func<MemoryBlockReference>? memoryBlockReferenceFactory = default,
 112        Func<ExpressionSerializationContext, Expression>? deserialize = default)
 113        where THandler : IExpressionHandler
 114    {
 1902115        var descriptor = new ExpressionDescriptor
 1902116        {
 1902117            Type = expressionType,
 1902118            DisplayName = displayName,
 1902119            IsSerializable = isSerializable,
 1902120            IsBrowsable = isBrowsable,
 2914121            HandlerFactory = sp => ActivatorUtilities.GetServiceOrCreateInstance<THandler>(sp),
 255122            MemoryBlockReferenceFactory = memoryBlockReferenceFactory ?? (() => new MemoryBlockReference())
 1902123        };
 124
 1902125        if (deserialize != null)
 951126            descriptor.Deserialize = deserialize;
 127
 1902128        if (monacoLanguage != null)
 634129            descriptor.Properties = new
 634130            {
 634131                MonacoLanguage = monacoLanguage
 634132            }.ToDictionary();
 133
 1902134        return descriptor;
 135    }
 136}