< Summary

Information
Class: Elsa.AI.Host.Services.WorkflowProposalDiffService
Assembly: Elsa.AI.Host
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.AI.Host/Services/WorkflowProposalDiffService.cs
Line coverage
100%
Covered lines: 27
Uncovered lines: 0
Coverable lines: 27
Total lines: 52
Line coverage: 100%
Branch coverage
100%
Covered branches: 28
Total branches: 28
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
CreateDiff(...)100%11100%
GetActivityIds()100%2424100%
ReadString(...)100%66100%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.AI.Host/Services/WorkflowProposalDiffService.cs

#LineLine coverage
 1using Elsa.AI.Abstractions.Models;
 2
 3namespace Elsa.AI.Host.Services;
 4
 5public class WorkflowProposalDiffService
 6{
 7    public AIGraphDiff CreateDiff(JsonObject draft, JsonObject? baseline = null)
 8    {
 29        var baselineIds = GetActivityIds(baseline).ToHashSet(StringComparer.OrdinalIgnoreCase);
 210        var draftIds = GetActivityIds(draft).ToHashSet(StringComparer.OrdinalIgnoreCase);
 11
 212        return new AIGraphDiff
 213        {
 214            AddedActivityIds = draftIds.Except(baselineIds, StringComparer.OrdinalIgnoreCase).Order().ToList(),
 215            RemovedActivityIds = baselineIds.Except(draftIds, StringComparer.OrdinalIgnoreCase).Order().ToList(),
 216            ChangedActivityIds = [],
 217            Data = new JsonObject
 218            {
 219                ["baselineActivityCount"] = baselineIds.Count,
 220                ["draftActivityCount"] = draftIds.Count
 221            }
 222        };
 23    }
 24
 25    private static IEnumerable<string> GetActivityIds(JsonNode? node)
 26    {
 2227        if (node is JsonObject jsonObject)
 28        {
 829            var type = ReadString(jsonObject, "type") ?? ReadString(jsonObject, "typeName") ?? ReadString(jsonObject, "a
 830            var id = ReadString(jsonObject, "id") ?? ReadString(jsonObject, "activityId") ?? ReadString(jsonObject, "nod
 831            if (!string.IsNullOrWhiteSpace(type) && !string.IsNullOrWhiteSpace(id))
 532                yield return id;
 33
 5534            foreach (var child in jsonObject.Select(x => x.Value))
 35            {
 3636                foreach (var childId in GetActivityIds(child))
 537                    yield return childId;
 38            }
 39        }
 1440        else if (node is JsonArray jsonArray)
 41        {
 1642            foreach (var child in jsonArray)
 43            {
 2044                foreach (var childId in GetActivityIds(child))
 545                    yield return childId;
 46            }
 47        }
 2248    }
 49
 50    private static string? ReadString(JsonObject jsonObject, string name) =>
 2851        jsonObject.TryGetPropertyValue(name, out var node) && node is JsonValue value && value.TryGetValue<string>(out v
 52}