< Summary

Information
Class: Elsa.Secrets.Providers.SecretExpressionDescriptorProvider
Assembly: Elsa.Secrets
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Secrets/Providers/SecretExpressionDescriptorProvider.cs
Line coverage
87%
Covered lines: 29
Uncovered lines: 4
Coverable lines: 33
Total lines: 73
Line coverage: 87.8%
Branch coverage
68%
Covered branches: 11
Total branches: 16
Branch coverage: 68.7%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
GetDescriptors()100%11100%
Deserialize(...)50%9880%
DeserializeReference(...)75%5466.66%
DeserializeStringReference(...)100%44100%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Secrets/Providers/SecretExpressionDescriptorProvider.cs

#LineLine coverage
 1using System.Text.Json;
 2using Elsa.Expressions.Contracts;
 3using Elsa.Expressions.Models;
 4using Elsa.Secrets.Expressions;
 5using Microsoft.Extensions.DependencyInjection;
 6
 7namespace Elsa.Secrets.Providers;
 8
 9/// <summary>
 10/// Provides the Secret expression descriptor.
 11/// </summary>
 12public class SecretExpressionDescriptorProvider : IExpressionDescriptorProvider
 13{
 14    private const string SecretPickerUIHint = "secret-picker";
 15    private const string SecretPickerEndpoint = "/secrets/picker";
 16
 17    /// <inheritdoc />
 18    public IEnumerable<ExpressionDescriptor> GetDescriptors()
 19    {
 620        yield return new()
 621        {
 622            Type = SecretExpression.TypeName,
 623            DisplayName = "Secret",
 624            HandlerFactory = ActivatorUtilities.GetServiceOrCreateInstance<SecretExpressionHandler>,
 625            Properties = new Dictionary<string, object>
 626            {
 627                ["UIHint"] = SecretPickerUIHint,
 628                ["PickerEndpoint"] = SecretPickerEndpoint
 629            },
 630            Deserialize = Deserialize
 631        };
 632    }
 33
 34    private static Expression Deserialize(ExpressionSerializationContext context)
 35    {
 536        var valueElement = context.JsonElement.TryGetProperty("value", out var v) ? v : default;
 37
 538        if (valueElement.ValueKind is JsonValueKind.Undefined or JsonValueKind.Null)
 039            return new Expression(SecretExpression.TypeName, null);
 40
 541        var reference = DeserializeReference(valueElement, context.Options);
 542        return new Expression(SecretExpression.TypeName, reference);
 43    }
 44
 45    private static SecretReference? DeserializeReference(JsonElement valueElement, JsonSerializerOptions options)
 46    {
 47        try
 48        {
 549            return valueElement.ValueKind switch
 550            {
 251                JsonValueKind.Object => valueElement.Deserialize<SecretReference>(options),
 352                JsonValueKind.String => DeserializeStringReference(valueElement.GetString(), options),
 053                _ => null
 554            };
 55        }
 056        catch (JsonException)
 57        {
 058            return null;
 59        }
 560    }
 61
 62    private static SecretReference? DeserializeStringReference(string? value, JsonSerializerOptions options)
 63    {
 364        if (string.IsNullOrWhiteSpace(value))
 165            return null;
 66
 267        var trimmedValue = value.Trim();
 268        if (trimmedValue.StartsWith('{'))
 169            return JsonSerializer.Deserialize<SecretReference>(trimmedValue, options);
 70
 171        return new SecretReference(trimmedValue);
 72    }
 73}