< Summary

Information
Class: Elsa.Workflows.Hasher
Assembly: Elsa.Workflows.Core
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Core/Services/Hasher.cs
Line coverage
100%
Covered lines: 20
Uncovered lines: 0
Coverable lines: 20
Total lines: 53
Line coverage: 100%
Branch coverage
100%
Covered branches: 4
Total branches: 4
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
Hash(...)100%11100%
Hash(...)100%11100%
Serialize(...)100%44100%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Core/Services/Hasher.cs

#LineLine coverage
 1using System.Security.Cryptography;
 2using System.Text;
 3using System.Text.Json;
 4using System.Text.Json.Serialization;
 5using Elsa.Workflows.Serialization.Converters;
 6using Elsa.Common.Serialization;
 7
 8namespace Elsa.Workflows;
 9
 10/// <inheritdoc />
 11public class Hasher : IHasher
 12{
 13    private readonly JsonSerializerOptions _serializerOptions;
 14
 12815    public Hasher(ISerializationTypeRegistry workflowJsonTypeRegistry)
 16    {
 12817        _serializerOptions = new JsonSerializerOptions
 12818        {
 12819            IncludeFields = true,
 12820            PropertyNameCaseInsensitive = true,
 12821            DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull
 12822        };
 23
 12824        _serializerOptions.Converters.Add(new TypeJsonConverter(workflowJsonTypeRegistry));
 12825        _serializerOptions.Converters.Add(new ExcludeFromHashConverterFactory());
 12826    }
 27
 28    /// <inheritdoc />
 29    public string Hash(string value)
 30    {
 1194031        var data = SHA256.HashData(Encoding.UTF8.GetBytes(value));
 1194032        return Convert.ToHexString(data);
 33    }
 34
 35    /// <inheritdoc />
 36    public string Hash(params object?[] values)
 37    {
 2532338        var strings = values.Select(Serialize).Where(x => !string.IsNullOrWhiteSpace(x)).ToList();
 1194039        var input = string.Join("|", strings);
 1194040        return Hash(input);
 41    }
 42
 43    private string Serialize(object? payload)
 44    {
 1338345        if(payload == null)
 71646            return string.Empty;
 47
 1266748        if(payload is string s)
 72449            return s;
 50
 1194351        return JsonSerializer.Serialize(payload, payload.GetType(), _serializerOptions);
 52    }
 53}