< 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: 97
Uncovered lines: 2
Coverable lines: 99
Total lines: 124
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    {
 171512        var typeName = definition.Name!.Pascalize();
 171513        var tenantId = definition.TenantId;
 14
 171515        var ports = definition.Outcomes.Select(outcome => new Port
 171516        {
 171517            Name = outcome,
 171518            DisplayName = outcome,
 171519            IsBrowsable = true,
 171520            Type = PortType.Flow
 171521        }).ToList();
 22
 171523        var rootPort = new Port
 171524        {
 171525            Name = nameof(WorkflowDefinitionActivity.Root),
 171526            DisplayName = "Root",
 171527            IsBrowsable = false,
 171528            Type = PortType.Embedded
 171529        };
 30
 171531        ports.Insert(0, rootPort);
 32
 171533        return new()
 171534        {
 171535            TenantId = tenantId,
 171536            TypeName = typeName,
 171537            ClrType = typeof(WorkflowDefinitionActivity),
 171538            Name = typeName,
 171539            Version = definition.Version,
 171540            DisplayName = definition.Name,
 171541            Description = definition.Description,
 171542            Category = definition.Options.ActivityCategory ?? "Workflows",
 171543            Kind = ActivityKind.Action,
 171544            IsBrowsable = definition.IsPublished,
 171545            Inputs = DescribeInputs(definition).ToList(),
 171546            Outputs = DescribeOutputs(definition).ToList(),
 171547            Ports = ports,
 171548            CustomProperties =
 171549            {
 171550                ["RootType"] = nameof(WorkflowDefinitionActivity),
 171551                ["WorkflowDefinitionId"] = definition.DefinitionId,
 171552                ["WorkflowDefinitionVersionId"] = definition.Id
 171553            },
 171554            ConstructionProperties = new Dictionary<string, object>
 171555            {
 171556                [nameof(WorkflowDefinitionActivity.WorkflowDefinitionId)] = definition.DefinitionId,
 171557                [nameof(WorkflowDefinitionActivity.WorkflowDefinitionVersionId)] = definition.Id,
 171558                [nameof(WorkflowDefinitionActivity.Version)] = definition.Version,
 171559            },
 171560            Constructor = context =>
 171561            {
 71062                var activityResult = context.CreateActivity<WorkflowDefinitionActivity>();
 71063                var activity = activityResult.Activity;
 71064                activity.Type = typeName;
 71065                activity.WorkflowDefinitionId = definition.DefinitionId;
 71066                activity.WorkflowDefinitionVersionId = definition.Id;
 71067                activity.Version = definition.Version;
 71068                activity.LatestAvailablePublishedVersion = latestPublishedDefinition?.Version ?? definition.Version;
 71069                activity.LatestAvailablePublishedVersionId = latestPublishedDefinition?.Id ?? definition.Id;
 171570
 71071                return activityResult;
 171572            }
 171573        };
 74    }
 75
 76    private static IEnumerable<InputDescriptor> DescribeInputs(WorkflowDefinition definition)
 77    {
 171578        var inputs = definition.Inputs.Select(inputDefinition =>
 171579        {
 12680            var nakedType = inputDefinition.Type;
 12681            var inputName = inputDefinition.Name;
 12682            var safeInputName = PropertyNameHelper.GetSafePropertyName(typeof(WorkflowDefinitionActivity), inputName);
 171583
 12684            return new InputDescriptor
 12685            {
 12686                Type = nakedType,
 12687                IsWrapped = true,
 2988                ValueGetter = activity => activity.SyntheticProperties.GetValueOrDefault(safeInputName),
 089                ValueSetter = (activity, value) => activity.SyntheticProperties[safeInputName] = value!,
 12690                Name = safeInputName,
 12691                DisplayName = inputDefinition.DisplayName,
 12692                Description = inputDefinition.Description,
 12693                Category = inputDefinition.Category,
 12694                UIHint = inputDefinition.UIHint,
 12695                StorageDriverType = inputDefinition.StorageDriverType,
 12696                IsSynthetic = true
 12697            };
 171598        });
 99
 3682100        foreach (var input in inputs)
 126101            yield return input;
 1715102    }
 103
 104    private static IEnumerable<OutputDescriptor> DescribeOutputs(WorkflowDefinition definition)
 105    {
 1715106        return definition.Outputs.Select(outputDefinition =>
 1715107        {
 378108            var nakedType = outputDefinition.Type;
 378109            var outputName = outputDefinition.Name;
 378110            var safeOutputName = PropertyNameHelper.GetSafePropertyName(typeof(WorkflowDefinitionActivity), outputName);
 1715111
 378112            return new OutputDescriptor
 378113            {
 378114                Type = nakedType,
 9115                ValueGetter = activity => activity.SyntheticProperties.GetValueOrDefault(safeOutputName),
 0116                ValueSetter = (activity, value) => activity.SyntheticProperties[safeOutputName] = value!,
 378117                Name = safeOutputName,
 378118                DisplayName = outputDefinition.DisplayName,
 378119                Description = outputDefinition.Description,
 378120                IsSynthetic = true
 378121            };
 1715122        });
 123    }
 124}