< 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    {
 88312        var typeName = definition.Name!.Pascalize();
 88313        var tenantId = definition.TenantId;
 14
 88315        var ports = definition.Outcomes.Select(outcome => new Port
 88316        {
 88317            Name = outcome,
 88318            DisplayName = outcome,
 88319            IsBrowsable = true,
 88320            Type = PortType.Flow
 88321        }).ToList();
 22
 88323        var rootPort = new Port
 88324        {
 88325            Name = nameof(WorkflowDefinitionActivity.Root),
 88326            DisplayName = "Root",
 88327            IsBrowsable = false,
 88328            Type = PortType.Embedded
 88329        };
 30
 88331        ports.Insert(0, rootPort);
 32
 88333        return new()
 88334        {
 88335            TenantId = tenantId,
 88336            TypeName = typeName,
 88337            ClrType = typeof(WorkflowDefinitionActivity),
 88338            Name = typeName,
 88339            Version = definition.Version,
 88340            DisplayName = definition.Name,
 88341            Description = definition.Description,
 88342            Category = definition.Options.ActivityCategory ?? "Workflows",
 88343            Kind = ActivityKind.Action,
 88344            IsBrowsable = definition.IsPublished,
 88345            Inputs = DescribeInputs(definition).ToList(),
 88346            Outputs = DescribeOutputs(definition).ToList(),
 88347            Ports = ports,
 88348            CustomProperties =
 88349            {
 88350                ["RootType"] = nameof(WorkflowDefinitionActivity),
 88351                ["WorkflowDefinitionId"] = definition.DefinitionId,
 88352                ["WorkflowDefinitionVersionId"] = definition.Id
 88353            },
 88354            ConstructionProperties = new Dictionary<string, object>
 88355            {
 88356                [nameof(WorkflowDefinitionActivity.WorkflowDefinitionId)] = definition.DefinitionId,
 88357                [nameof(WorkflowDefinitionActivity.WorkflowDefinitionVersionId)] = definition.Id,
 88358                [nameof(WorkflowDefinitionActivity.Version)] = definition.Version,
 88359            },
 88360            Constructor = context =>
 88361            {
 43262                var activityResult = context.CreateActivity<WorkflowDefinitionActivity>();
 43263                var activity = activityResult.Activity;
 43264                activity.Type = typeName;
 43265                activity.WorkflowDefinitionId = definition.DefinitionId;
 43266                activity.WorkflowDefinitionVersionId = definition.Id;
 43267                activity.Version = definition.Version;
 43268                activity.LatestAvailablePublishedVersion = latestPublishedDefinition?.Version ?? definition.Version;
 43269                activity.LatestAvailablePublishedVersionId = latestPublishedDefinition?.Id ?? definition.Id;
 88370
 43271                return activityResult;
 88372            }
 88373        };
 74    }
 75
 76    private static IEnumerable<InputDescriptor> DescribeInputs(WorkflowDefinition definition)
 77    {
 88378        var inputs = definition.Inputs.Select(inputDefinition =>
 88379        {
 7780            var nakedType = inputDefinition.Type;
 7781            var inputName = inputDefinition.Name;
 7782            var safeInputName = PropertyNameHelper.GetSafePropertyName(typeof(WorkflowDefinitionActivity), inputName);
 88383
 7784            return new InputDescriptor
 7785            {
 7786                Type = nakedType,
 7787                IsWrapped = true,
 3488                ValueGetter = activity => activity.SyntheticProperties.GetValueOrDefault(safeInputName),
 089                ValueSetter = (activity, value) => activity.SyntheticProperties[safeInputName] = value!,
 7790                Name = safeInputName,
 7791                DisplayName = inputDefinition.DisplayName,
 7792                Description = inputDefinition.Description,
 7793                Category = inputDefinition.Category,
 7794                UIHint = inputDefinition.UIHint,
 7795                StorageDriverType = inputDefinition.StorageDriverType,
 7796                IsSynthetic = true
 7797            };
 88398        });
 99
 1920100        foreach (var input in inputs)
 77101            yield return input;
 883102    }
 103
 104    private static IEnumerable<OutputDescriptor> DescribeOutputs(WorkflowDefinition definition)
 105    {
 883106        return definition.Outputs.Select(outputDefinition =>
 883107        {
 231108            var nakedType = outputDefinition.Type;
 231109            var outputName = outputDefinition.Name;
 231110            var safeOutputName = PropertyNameHelper.GetSafePropertyName(typeof(WorkflowDefinitionActivity), outputName);
 883111
 231112            return new OutputDescriptor
 231113            {
 231114                Type = nakedType,
 9115                ValueGetter = activity => activity.SyntheticProperties.GetValueOrDefault(safeOutputName),
 0116                ValueSetter = (activity, value) => activity.SyntheticProperties[safeOutputName] = value!,
 231117                Name = safeOutputName,
 231118                DisplayName = outputDefinition.DisplayName,
 231119                Description = outputDefinition.Description,
 231120                IsSynthetic = true
 231121            };
 883122        });
 123    }
 124}