< Summary

Information
Class: Elsa.Workflows.Management.Activities.WorkflowDefinitionActivity.WorkflowDefinitionActivityDescriptorFactory
Assembly: Elsa.Workflows.Management
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Management/Activities/WorkflowDefinitionActivity/WorkflowDefinitionActivityDescriptorFactory.cs
Line coverage
97%
Covered lines: 94
Uncovered lines: 2
Coverable lines: 96
Total lines: 121
Line coverage: 97.9%
Branch coverage
100%
Covered branches: 10
Total branches: 10
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
CreateDescriptor(...)100%88100%
DescribeInputs()100%22100%
DescribeOutputs(...)100%1194.11%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Management/Activities/WorkflowDefinitionActivity/WorkflowDefinitionActivityDescriptorFactory.cs

#LineLine coverage
 1using Elsa.Extensions;
 2using Elsa.Workflows.Management.Entities;
 3using Elsa.Workflows.Models;
 4using Humanizer;
 5
 6namespace Elsa.Workflows.Management.Activities.WorkflowDefinitionActivity;
 7
 8public class WorkflowDefinitionActivityDescriptorFactory
 9{
 10    public ActivityDescriptor CreateDescriptor(WorkflowDefinition definition, WorkflowDefinition? latestPublishedDefinit
 11    {
 87312        var typeName = definition.Name!.Pascalize();
 13
 87314        var ports = definition.Outcomes.Select(outcome => new Port
 87315        {
 87316            Name = outcome,
 87317            DisplayName = outcome,
 87318            IsBrowsable = true,
 87319            Type = PortType.Flow
 87320        }).ToList();
 21
 87322        var rootPort = new Port
 87323        {
 87324            Name = nameof(WorkflowDefinitionActivity.Root),
 87325            DisplayName = "Root",
 87326            IsBrowsable = false,
 87327            Type = PortType.Embedded
 87328        };
 29
 87330        ports.Insert(0, rootPort);
 31
 87332        return new()
 87333        {
 87334            TypeName = typeName,
 87335            ClrType = typeof(WorkflowDefinitionActivity),
 87336            Name = typeName,
 87337            Version = definition.Version,
 87338            DisplayName = definition.Name,
 87339            Description = definition.Description,
 87340            Category = definition.Options.ActivityCategory ?? "Workflows",
 87341            Kind = ActivityKind.Action,
 87342            IsBrowsable = definition.IsPublished,
 87343            Inputs = DescribeInputs(definition).ToList(),
 87344            Outputs = DescribeOutputs(definition).ToList(),
 87345            Ports = ports,
 87346            CustomProperties =
 87347            {
 87348                ["RootType"] = nameof(WorkflowDefinitionActivity),
 87349                ["WorkflowDefinitionId"] = definition.DefinitionId,
 87350                ["WorkflowDefinitionVersionId"] = definition.Id
 87351            },
 87352            ConstructionProperties = new Dictionary<string, object>
 87353            {
 87354                [nameof(WorkflowDefinitionActivity.WorkflowDefinitionId)] = definition.DefinitionId,
 87355                [nameof(WorkflowDefinitionActivity.WorkflowDefinitionVersionId)] = definition.Id,
 87356                [nameof(WorkflowDefinitionActivity.Version)] = definition.Version,
 87357            },
 87358            Constructor = context =>
 87359            {
 55060                var activity = context.CreateActivity<WorkflowDefinitionActivity>();
 55061                activity.Type = typeName;
 55062                activity.WorkflowDefinitionId = definition.DefinitionId;
 55063                activity.WorkflowDefinitionVersionId = definition.Id;
 55064                activity.Version = definition.Version;
 55065                activity.LatestAvailablePublishedVersion = latestPublishedDefinition?.Version ?? definition.Version;
 55066                activity.LatestAvailablePublishedVersionId = latestPublishedDefinition?.Id ?? definition.Id;
 87367
 55068                return activity;
 87369            }
 87370        };
 71    }
 72
 73    private static IEnumerable<InputDescriptor> DescribeInputs(WorkflowDefinition definition)
 74    {
 87375        var inputs = definition.Inputs.Select(inputDefinition =>
 87376        {
 7677            var nakedType = inputDefinition.Type;
 7678            var inputName = inputDefinition.Name;
 7679            var safeInputName = PropertyNameHelper.GetSafePropertyName(typeof(WorkflowDefinitionActivity), inputName);
 87380
 7681            return new InputDescriptor
 7682            {
 7683                Type = nakedType,
 7684                IsWrapped = true,
 3485                ValueGetter = activity => activity.SyntheticProperties.GetValueOrDefault(safeInputName),
 086                ValueSetter = (activity, value) => activity.SyntheticProperties[safeInputName] = value!,
 7687                Name = safeInputName,
 7688                DisplayName = inputDefinition.DisplayName,
 7689                Description = inputDefinition.Description,
 7690                Category = inputDefinition.Category,
 7691                UIHint = inputDefinition.UIHint,
 7692                StorageDriverType = inputDefinition.StorageDriverType,
 7693                IsSynthetic = true
 7694            };
 87395        });
 96
 189897        foreach (var input in inputs)
 7698            yield return input;
 87399    }
 100
 101    private static IEnumerable<OutputDescriptor> DescribeOutputs(WorkflowDefinition definition)
 102    {
 873103        return definition.Outputs.Select(outputDefinition =>
 873104        {
 228105            var nakedType = outputDefinition.Type;
 228106            var outputName = outputDefinition.Name;
 228107            var safeOutputName = PropertyNameHelper.GetSafePropertyName(typeof(WorkflowDefinitionActivity), outputName);
 873108
 228109            return new OutputDescriptor
 228110            {
 228111                Type = nakedType,
 9112                ValueGetter = activity => activity.SyntheticProperties.GetValueOrDefault(safeOutputName),
 0113                ValueSetter = (activity, value) => activity.SyntheticProperties[safeOutputName] = value!,
 228114                Name = safeOutputName,
 228115                DisplayName = outputDefinition.DisplayName,
 228116                Description = outputDefinition.Description,
 228117                IsSynthetic = true
 228118            };
 873119        });
 120    }
 121}