< Summary

Information
Class: Elsa.Workflows.Api.Services.StaticWorkflowDefinitionLinker
Assembly: Elsa.Workflows.Api
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Api/Services/StaticWorkflowDefinitionLinker.cs
Line coverage
40%
Covered lines: 46
Uncovered lines: 69
Coverable lines: 115
Total lines: 168
Line coverage: 40%
Branch coverage
40%
Covered branches: 4
Total branches: 10
Branch coverage: 40%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
MapAsync()100%11100%
MapAsync(...)0%620%
MapAsync()0%620%
GenerateLinksForPagedList()0%620%
GenerateLinksForSingleEntry(...)100%44100%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Api/Services/StaticWorkflowDefinitionLinker.cs

#LineLine coverage
 1using Elsa.Models;
 2using Elsa.Workflows.Api.Models;
 3using Elsa.Workflows.Management;
 4using Elsa.Workflows.Management.Entities;
 5using Elsa.Workflows.Management.Mappers;
 6using Elsa.Workflows.Management.Models;
 7using Elsa.Workflows.Management.Options;
 8using Microsoft.Extensions.Options;
 9
 10namespace Elsa.Workflows.Api.Services;
 11
 12///  <inheritdoc/>
 813public class StaticWorkflowDefinitionLinker(
 814    IOptions<ManagementOptions> managementOptions,
 815    WorkflowDefinitionMapper workflowDefinitionMapper,
 816    IMaterializerRegistry materializerRegistry)
 17    : IWorkflowDefinitionLinker
 18{
 19    /// <inheritdoc />
 20    public async Task<LinkedWorkflowDefinitionModel> MapAsync(WorkflowDefinition definition, CancellationToken cancellat
 21    {
 122        var workflowDefinitionModel = await workflowDefinitionMapper.MapAsync(definition, cancellationToken);
 123        var linkedModel = new LinkedWorkflowDefinitionModel(GenerateLinksForSingleEntry(definition.DefinitionId, definit
 124        {
 125            Id = workflowDefinitionModel.Id,
 126            DefinitionId = workflowDefinitionModel.DefinitionId,
 127            Name = workflowDefinitionModel.Name,
 128            Description = workflowDefinitionModel.Description,
 129            CreatedAt = workflowDefinitionModel.CreatedAt,
 130            Version = workflowDefinitionModel.Version,
 131            ToolVersion = workflowDefinitionModel.ToolVersion,
 132            Variables = workflowDefinitionModel.Variables,
 133            Inputs = workflowDefinitionModel.Inputs,
 134            Outputs = workflowDefinitionModel.Outputs,
 135            Outcomes = workflowDefinitionModel.Outcomes,
 136            CustomProperties = workflowDefinitionModel.CustomProperties,
 137            IsReadonly = workflowDefinitionModel.IsReadonly,
 138            IsSystem = workflowDefinitionModel.IsSystem,
 139            IsLatest = workflowDefinitionModel.IsLatest,
 140            IsPublished = workflowDefinitionModel.IsPublished,
 141            Options = workflowDefinitionModel.Options,
 142            UsableAsActivity = workflowDefinitionModel.UsableAsActivity,
 143            Root = workflowDefinitionModel.Root
 144        };
 45
 146        return linkedModel;
 147    }
 48
 49    /// <inheritdoc />
 50    public PagedListResponse<LinkedWorkflowDefinitionSummary> MapAsync(PagedListResponse<WorkflowDefinitionSummary> list
 51    {
 052        var items = new List<LinkedWorkflowDefinitionSummary>();
 53
 054        foreach (var item in list.Items)
 55        {
 056            items.Add(new()
 057            {
 058                Links = GenerateLinksForSingleEntry(item.DefinitionId, item.IsReadonly),
 059                Id = item.Id,
 060                DefinitionId = item.DefinitionId,
 061                Name = item.Name,
 062                Description = item.Description,
 063                Version = item.Version,
 064                ToolVersion = item.ToolVersion,
 065                IsLatest = item.IsLatest,
 066                IsPublished = item.IsPublished,
 067                ProviderName = item.ProviderName,
 068                MaterializerName = item.MaterializerName,
 069                CreatedAt = item.CreatedAt,
 070                IsReadonly = item.IsReadonly,
 071                IsMaterializerAvailable = materializerRegistry.IsMaterializerAvailable(item.MaterializerName)
 072            });
 73        }
 74
 075        return new()
 076        {
 077            TotalCount = list.TotalCount,
 078            Items = items,
 079            Links = GenerateLinksForPagedList().ToArray()
 080        };
 81    }
 82
 83    /// <inheritdoc />
 84    public async Task<List<LinkedWorkflowDefinitionModel>> MapAsync(List<WorkflowDefinition> definitions, CancellationTo
 85    {
 086        var models = (await workflowDefinitionMapper.MapAsync(definitions, cancellationToken)).ToList();
 087        var result = new List<LinkedWorkflowDefinitionModel>();
 88
 089        foreach (var item in models)
 90        {
 091            var linkedModel = new LinkedWorkflowDefinitionModel(GenerateLinksForSingleEntry(item.DefinitionId, item.IsRe
 092            {
 093                Id = item.Id,
 094                DefinitionId = item.DefinitionId,
 095                Name = item.Name,
 096                Description = item.Description,
 097                CreatedAt = item.CreatedAt,
 098                Version = item.Version,
 099                ToolVersion = item.ToolVersion,
 0100                Variables = item.Variables,
 0101                Inputs = item.Inputs,
 0102                Outputs = item.Outputs,
 0103                Outcomes = item.Outcomes,
 0104                CustomProperties = item.CustomProperties,
 0105                IsReadonly = item.IsReadonly,
 0106                IsSystem = item.IsSystem,
 0107                IsLatest = item.IsLatest,
 0108                IsPublished = item.IsPublished,
 0109                Options = item.Options,
 0110                UsableAsActivity = item.UsableAsActivity,
 0111                Root = item.Root
 0112            };
 113
 0114            result.Add(linkedModel);
 115        }
 116
 0117        return result;
 0118    }
 119
 120    private Link[] GenerateLinksForPagedList()
 121    {
 0122        var linksList = new List<Link>
 0123        {
 0124            new($"/workflow-definitions", "self", "GET"),
 0125            new($"/workflow-definitions/validation/is-name-unique", "is-name-unique", "GET"),
 0126            new($"/workflow-definitions/query/count", "count", "GET"),
 0127            new($"/workflow-definitions/many-by-id", "many-by-id", "GET")
 0128        };
 129
 0130        if (!managementOptions.Value.IsReadOnlyMode)
 131        {
 0132            linksList.Add(new($"/bulk-actions/delete/workflow-definitions/by-definition-id", "bulk-delete-by-definition-
 0133            linksList.Add(new($"/bulk-actions/delete/workflow-definitions/by-id", "bulk-delete-by-id", "POST"));
 0134            linksList.Add(new($"/bulk-actions/publish/workflow-definitions/by-definition-ids", "bulk-publish", "POST"));
 0135            linksList.Add(new($"/bulk-actions/retract/workflow-definitions/by-definition-ids", "bulk-retract", "POST"));
 0136            linksList.Add(new($"/workflow-definitions/import", "import", "POST"));
 0137            linksList.Add(new($"/workflow-definitions/import-files", "import-files", "POST"));
 0138            linksList.Add(new($"/workflow-definitions", "create", "POST"));
 139        }
 140
 0141        return linksList.ToArray();
 142    }
 143
 144    private Link[] GenerateLinksForSingleEntry(string definitionId, bool definitionIsReadonly)
 145    {
 1146        var links = new List<Link>
 1147        {
 1148            new($"/workflow-definitions/{definitionId}", "self", "GET"),
 1149            new($"/workflow-definitions/by-definition-id/{definitionId}", "self", "GET"),
 1150            new($"/workflow-definitions/{definitionId}/versions", "versions", "GET"),
 1151            new($"/workflow-definitions/{definitionId}/bulk-dispatch", "bulk-dispatch", "POST"),
 1152            new($"/workflow-definitions/{definitionId}/dispatch", "dispatch", "POST"),
 1153            new($"/workflow-definitions/{definitionId}/execute", "execute", "POST"),
 1154            new($"/workflow-definitions/{definitionId}/export", "export", "POST")
 1155        };
 156
 1157        if (!managementOptions.Value.IsReadOnlyMode && !definitionIsReadonly)
 158        {
 1159            links.Add(new($"/workflow-definitions/{definitionId}/publish", "publish", "POST"));
 1160            links.Add(new($"/workflow-definitions/{definitionId}/retract", "retract", "POST"));
 1161            links.Add(new($"/workflow-definitions/{definitionId}", "delete", "DELETE"));
 1162            links.Add(new($"/workflow-definitions/{definitionId}/import", "import", "PUT"));
 1163            links.Add(new($"/workflow-definitions/{definitionId}/update-references", "update-references", "POST"));
 164        }
 165
 1166        return links.ToArray();
 167    }
 168}