< 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: 40
Uncovered lines: 1
Coverable lines: 41
Total lines: 83
Line coverage: 97.5%
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%282896.96%

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>
 1120        public WorkflowDefinitionImporter(
 1121            IActivitySerializer serializer,
 1122            IWorkflowDefinitionPublisher workflowDefinitionPublisher,
 1123            VariableDefinitionMapper variableDefinitionMapper)
 24        {
 1125            _serializer = serializer;
 1126            _workflowDefinitionPublisher = workflowDefinitionPublisher;
 1127            _variableDefinitionMapper = variableDefinitionMapper;
 1128        }
 29
 30        /// <inheritdoc />
 31        public async Task<ImportWorkflowResult> ImportAsync(SaveWorkflowDefinitionRequest request, CancellationToken can
 32        {
 633            var model = request.Model;
 634            var definitionId = model.DefinitionId;
 35
 36            // Get a workflow draft version.
 637            var draft = !string.IsNullOrWhiteSpace(definitionId)
 638                ? await _workflowDefinitionPublisher.GetDraftAsync(definitionId, VersionOptions.Latest, cancellationToke
 639                : null;
 40
 641            var isNew = draft == null;
 42
 43            // Create a new workflow in case no existing definition was found.
 644            if (isNew)
 45            {
 646                draft = await _workflowDefinitionPublisher.NewAsync(cancellationToken: cancellationToken);
 47
 648                if (!string.IsNullOrWhiteSpace(definitionId))
 649                    draft.DefinitionId = definitionId;
 50
 651                if (!string.IsNullOrWhiteSpace(model.Id))
 052                    draft.Id = model.Id;
 53            }
 54
 55            // Update the draft with the received model.
 656            var root = model.Root ?? new Sequence();
 657            var stringData = _serializer.Serialize(root);
 658            var variables = _variableDefinitionMapper.Map(model.Variables).ToList();
 59
 660            draft!.StringData = stringData;
 661            draft.MaterializerName = JsonWorkflowMaterializer.MaterializerName;
 662            draft.Name = model.Name?.Trim();
 663            draft.Description = model.Description?.Trim();
 664            draft.CustomProperties = model.CustomProperties ?? new Dictionary<string, object>();
 665            draft.Variables = variables;
 666            draft.Inputs = model.Inputs ?? new List<InputDefinition>();
 667            draft.Outputs = model.Outputs ?? new List<OutputDefinition>();
 668            draft.Outcomes = model.Outcomes ?? new List<string>();
 669            draft.IsReadonly = model.IsReadonly;
 670            draft.Options = model.Options ?? new WorkflowOptions();
 671            draft.ToolVersion = model.ToolVersion;
 72
 673            if (request.Publish ?? model.IsPublished)
 74            {
 275                var result = await _workflowDefinitionPublisher.PublishAsync(draft, cancellationToken);
 276                return new ImportWorkflowResult(result.Succeeded, draft, result.ValidationErrors);
 77            }
 78
 479            await _workflowDefinitionPublisher.SaveDraftAsync(draft, cancellationToken);
 480            return new ImportWorkflowResult(true, draft, new List<WorkflowValidationError>());
 681        }
 82    }
 83}