< Summary

Information
Class: Elsa.Workflows.Management.Services.WorkflowDefinitionImporter
Assembly: Elsa.Workflows.Management
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Management/Services/WorkflowDefinitionImporter.cs
Line coverage
97%
Covered lines: 41
Uncovered lines: 1
Coverable lines: 42
Total lines: 84
Line coverage: 97.6%
Branch coverage
82%
Covered branches: 23
Total branches: 28
Branch coverage: 82.1%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
ImportAsync()82.14%282897.05%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Management/Services/WorkflowDefinitionImporter.cs

#LineLine coverage
 1using Elsa.Common.Models;
 2using Elsa.Workflows.Activities;
 3using Elsa.Workflows.Management.Mappers;
 4using Elsa.Workflows.Management.Materializers;
 5using Elsa.Workflows.Management.Models;
 6using Elsa.Workflows.Models;
 7
 8namespace Elsa.Workflows.Management.Services
 9{
 10    /// <inheritdoc />
 11    public class WorkflowDefinitionImporter : IWorkflowDefinitionImporter
 12    {
 13        private readonly IActivitySerializer _serializer;
 14        private readonly IWorkflowDefinitionPublisher _workflowDefinitionPublisher;
 15        private readonly VariableDefinitionMapper _variableDefinitionMapper;
 16
 17        /// <summary>
 18        /// Initializes a new instance of the <see cref="WorkflowDefinitionImporter"/> class.
 19        /// </summary>
 1320        public WorkflowDefinitionImporter(
 1321            IActivitySerializer serializer,
 1322            IWorkflowDefinitionPublisher workflowDefinitionPublisher,
 1323            VariableDefinitionMapper variableDefinitionMapper)
 24        {
 1325            _serializer = serializer;
 1326            _workflowDefinitionPublisher = workflowDefinitionPublisher;
 1327            _variableDefinitionMapper = variableDefinitionMapper;
 1328        }
 29
 30        /// <inheritdoc />
 31        public async Task<ImportWorkflowResult> ImportAsync(SaveWorkflowDefinitionRequest request, CancellationToken can
 32        {
 1033            var model = request.Model;
 1034            var definitionId = model.DefinitionId;
 35
 36            // Get a workflow draft version.
 1037            var draft = !string.IsNullOrWhiteSpace(definitionId)
 1038                ? await _workflowDefinitionPublisher.GetDraftAsync(definitionId, VersionOptions.Latest, cancellationToke
 1039                : null;
 40
 1041            var isNew = draft == null;
 42
 43            // Create a new workflow in case no existing definition was found.
 1044            if (isNew)
 45            {
 846                draft = await _workflowDefinitionPublisher.NewAsync(cancellationToken: cancellationToken);
 47
 848                if (!string.IsNullOrWhiteSpace(definitionId))
 849                    draft.DefinitionId = definitionId;
 50
 851                if (!string.IsNullOrWhiteSpace(model.Id))
 052                    draft.Id = model.Id;
 53            }
 54
 55            // Update the draft with the received model.
 1056            var root = model.Root ?? new Sequence();
 1057            var stringData = _serializer.Serialize(root);
 1058            var variables = _variableDefinitionMapper.Map(model.Variables).ToList();
 59
 1060            draft!.StringData = stringData;
 1061            draft.OriginalSource = null; // The imported model replaces any previous file snapshot.
 1062            draft.MaterializerName = JsonWorkflowMaterializer.MaterializerName;
 1063            draft.Name = model.Name?.Trim();
 1064            draft.Description = model.Description?.Trim();
 1065            draft.CustomProperties = model.CustomProperties ?? new Dictionary<string, object>();
 1066            draft.Variables = variables;
 1067            draft.Inputs = model.Inputs ?? new List<InputDefinition>();
 1068            draft.Outputs = model.Outputs ?? new List<OutputDefinition>();
 1069            draft.Outcomes = model.Outcomes ?? new List<string>();
 1070            draft.IsReadonly = model.IsReadonly;
 1071            draft.Options = model.Options ?? new WorkflowOptions();
 1072            draft.ToolVersion = model.ToolVersion;
 73
 1074            if (request.Publish ?? model.IsPublished)
 75            {
 576                var result = await _workflowDefinitionPublisher.PublishAsync(draft, cancellationToken);
 577                return new ImportWorkflowResult(result.Succeeded, draft, result.ValidationErrors);
 78            }
 79
 580            await _workflowDefinitionPublisher.SaveDraftAsync(draft, cancellationToken);
 581            return new ImportWorkflowResult(true, draft, new List<WorkflowValidationError>());
 1082        }
 83    }
 84}