< Summary

Information
Class: Elsa.Workflows.Api.Endpoints.WorkflowDefinitions.Execute.PostEndpoint
Assembly: Elsa.Workflows.Api
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Api/Endpoints/WorkflowDefinitions/Execute/PostEndpoint.cs
Line coverage
85%
Covered lines: 36
Uncovered lines: 6
Coverable lines: 42
Total lines: 80
Line coverage: 85.7%
Branch coverage
83%
Covered branches: 10
Total branches: 12
Branch coverage: 83.3%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
Configure()100%11100%
HandleAsync()83.33%131281.25%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Api/Endpoints/WorkflowDefinitions/Execute/PostEndpoint.cs

#LineLine coverage
 1using System.Text.Json;
 2using Elsa.Abstractions;
 3using Elsa.Workflows.Api.Security;
 4using Elsa.Workflows.Management;
 5using Elsa.Workflows.Runtime;
 6using JetBrains.Annotations;
 7
 8namespace Elsa.Workflows.Api.Endpoints.WorkflowDefinitions.Execute;
 9
 10/// <summary>
 11/// An API endpoint that executes a given workflow definition through POST method.
 12/// </summary>
 13[PublicAPI]
 1214internal class PostEndpoint(
 1215    IWorkflowDefinitionService workflowDefinitionService,
 1216    IWorkflowRuntime workflowRuntime,
 1217    IWorkflowStarter workflowStarter,
 1218    IApiSerializer apiSerializer,
 1219    WorkflowDefinitionScriptAuthorizationService scriptAuthorizationService)
 20    : ElsaEndpointWithoutRequest<Response>
 21{
 22    /// <inheritdoc />
 23    public override void Configure()
 24    {
 325        Routes("/workflow-definitions/{definitionId}/execute");
 326        ConfigurePermissions("exec:workflow-definitions");
 327        Verbs(FastEndpoints.Http.POST);
 328    }
 29    /// <inheritdoc />
 30    public override async Task HandleAsync(CancellationToken cancellationToken)
 31    {
 932        PostRequest? request = null;
 33
 934        if (HttpContext.Request.ContentType?.Contains("application/json") ?? false)
 35        {
 836            using var reader = new StreamReader(HttpContext.Request.Body);
 837            var body = await reader.ReadToEndAsync(cancellationToken);
 38
 839            if (!string.IsNullOrWhiteSpace(body))
 40            {
 41                try
 42                {
 743                    request = JsonSerializer.Deserialize<PostRequest>(body, new JsonSerializerOptions
 744                    {
 745                        PropertyNameCaseInsensitive = true
 746                    });
 747                }
 048                catch
 49                {
 050                    AddError("Invalid request body.");
 051                }
 52            }
 853        }
 54
 955        request ??= new();
 56
 957        var definitionId = Route<string>("definitionId");
 58
 959        if (string.IsNullOrWhiteSpace(definitionId))
 060            AddError("Missing workflow definition ID.");
 61        else
 962            request.DefinitionId = definitionId;
 63
 964        if (ValidationFailed)
 65        {
 066            await Send.ErrorsAsync(cancellation: cancellationToken);
 067            return;
 68        }
 69
 970        await WorkflowExecutionHelper.ExecuteWorkflowAsync(
 971            request,
 972            workflowDefinitionService,
 973            workflowRuntime,
 974            workflowStarter,
 975            apiSerializer,
 976            scriptAuthorizationService,
 977            HttpContext,
 978            cancellationToken);
 979    }
 80}