< Summary

Information
Class: Elsa.Workflows.Runtime.Handlers.DispatchWorkflowCommandHandler
Assembly: Elsa.Workflows.Runtime
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Runtime/Handlers/DispatchWorkflowRequestHandler.cs
Line coverage
79%
Covered lines: 49
Uncovered lines: 13
Coverable lines: 62
Total lines: 100
Line coverage: 79%
Branch coverage
100%
Covered branches: 14
Total branches: 14
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
HandleAsync()100%11100%
HandleAsync()100%1414100%
HandleAsync()100%11100%
HandleAsync()100%210%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Runtime/Handlers/DispatchWorkflowRequestHandler.cs

#LineLine coverage
 1using Elsa.Mediator.Contracts;
 2using Elsa.Mediator.Models;
 3using Elsa.Workflows.Models;
 4using Elsa.Workflows.Runtime.Commands;
 5using Elsa.Workflows.Runtime.Messages;
 6using Elsa.Workflows.Runtime.Notifications;
 7using JetBrains.Annotations;
 8
 9namespace Elsa.Workflows.Runtime.Handlers;
 10
 11// ReSharper disable once UnusedType.Global
 12[UsedImplicitly]
 9013internal class DispatchWorkflowCommandHandler(IStimulusSender stimulusSender, IWorkflowRuntime workflowRuntime, INotific
 14    ICommandHandler<DispatchTriggerWorkflowsCommand>,
 15    ICommandHandler<DispatchWorkflowDefinitionCommand>,
 16    ICommandHandler<DispatchWorkflowInstanceCommand>,
 17    ICommandHandler<DispatchResumeWorkflowsCommand>
 18{
 19    public virtual async Task<Unit> HandleAsync(DispatchTriggerWorkflowsCommand command, CancellationToken cancellationT
 20    {
 721        var activityTypeName = command.ActivityTypeName;
 722        var stimulus = command.Stimulus;
 723        var metadata = new StimulusMetadata
 724        {
 725            CorrelationId = command.CorrelationId,
 726            ActivityInstanceId = command.ActivityInstanceId,
 727            WorkflowInstanceId = command.WorkflowInstanceId,
 728            Input = command.Input,
 729            Properties = command.Properties,
 730        };
 731        await stimulusSender.SendAsync(activityTypeName, stimulus, metadata, cancellationToken);
 32
 733        return Unit.Instance;
 734    }
 35
 36    public virtual async Task<Unit> HandleAsync(DispatchWorkflowDefinitionCommand command, CancellationToken cancellatio
 37    {
 4338        var client = await workflowRuntime.CreateClientAsync(command.InstanceId, cancellationToken);
 39
 4340        if (command.SkipIfInstanceExists && !string.IsNullOrWhiteSpace(command.InstanceId) && await client.InstanceExist
 141            return Unit.Instance;
 42
 4243        var properties = DispatchWorkflowActivationDeniedRoute.SanitizeAndRead(command.Properties, out var denialRoute);
 44
 4245        var createRequest = new CreateAndRunWorkflowInstanceRequest
 4246        {
 4247            WorkflowDefinitionHandle = WorkflowDefinitionHandle.ByDefinitionVersionId(command.DefinitionVersionId),
 4248            CorrelationId = command.CorrelationId,
 4249            Input = command.Input,
 4250            Properties = properties,
 4251            ParentId = command.ParentWorkflowInstanceId,
 4252            TriggerActivityId = command.TriggerActivityId,
 4253            SchedulingActivityExecutionId = command.SchedulingActivityExecutionId,
 4254            SchedulingWorkflowInstanceId = command.SchedulingWorkflowInstanceId,
 4255            SchedulingCallStackDepth = command.SchedulingCallStackDepth
 4256        };
 4257        var response = await client.CreateAndRunInstanceAsync(createRequest, cancellationToken);
 4158        if (response.CannotStart &&
 4159            denialRoute is { } route &&
 4160            !string.IsNullOrWhiteSpace(command.ParentWorkflowInstanceId) &&
 4161            !string.IsNullOrWhiteSpace(command.InstanceId))
 62        {
 363            await notificationSender.SendAsync(new DispatchWorkflowActivationDenied(command.ParentWorkflowInstanceId, co
 64        }
 65
 4166        return Unit.Instance;
 4267    }
 68
 69    public virtual async Task<Unit> HandleAsync(DispatchWorkflowInstanceCommand command, CancellationToken cancellationT
 70    {
 171        var runRequest = new RunWorkflowInstanceRequest
 172        {
 173            BookmarkId = command.BookmarkId,
 174            ActivityHandle = command.ActivityHandle,
 175            Input = command.Input,
 176            Properties = command.Properties
 177        };
 178        var client = await workflowRuntime.CreateClientAsync(command.InstanceId, cancellationToken);
 179        await client.RunInstanceAsync(runRequest, cancellationToken);
 80
 181        return Unit.Instance;
 182    }
 83
 84    public virtual async Task<Unit> HandleAsync(DispatchResumeWorkflowsCommand command, CancellationToken cancellationTo
 85    {
 086        var activityTypeName = command.ActivityTypeName;
 087        var stimulus = command.Stimulus;
 088        var metadata = new StimulusMetadata
 089        {
 090            CorrelationId = command.CorrelationId,
 091            WorkflowInstanceId = command.WorkflowInstanceId,
 092            ActivityInstanceId = command.ActivityInstanceId,
 093            Properties = command.Properties,
 094            Input = command.Input
 095        };
 096        await stimulusSender.SendAsync(activityTypeName, stimulus, metadata, cancellationToken);
 97
 098        return Unit.Instance;
 099    }
 100}