< 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: 81
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 Elsa.Authorization;
 2using System.Text.Json;
 3using Elsa.Abstractions;
 4using Elsa.Workflows.Api.Security;
 5using Elsa.Workflows.Management;
 6using Elsa.Workflows.Runtime;
 7using JetBrains.Annotations;
 8
 9namespace Elsa.Workflows.Api.Endpoints.WorkflowDefinitions.Execute;
 10
 11/// <summary>
 12/// An API endpoint that executes a given workflow definition through POST method.
 13/// </summary>
 14[PublicAPI]
 1215internal class PostEndpoint(
 1216    IWorkflowDefinitionService workflowDefinitionService,
 1217    IWorkflowRuntime workflowRuntime,
 1218    IWorkflowStarter workflowStarter,
 1219    IApiSerializer apiSerializer,
 1220    WorkflowDefinitionScriptAuthorizationService scriptAuthorizationService)
 21    : ElsaEndpointWithoutRequest<Response>
 22{
 23    /// <inheritdoc />
 24    public override void Configure()
 25    {
 326        Routes("/workflow-definitions/{definitionId}/execute");
 327        RequirePermission(Elsa.Workflows.Api.Permissions.WorkflowPermissions.Definitions, CoreVerbs.Execute);
 328        Verbs(FastEndpoints.Http.POST);
 329    }
 30    /// <inheritdoc />
 31    public override async Task HandleAsync(CancellationToken cancellationToken)
 32    {
 933        PostRequest? request = null;
 34
 935        if (HttpContext.Request.ContentType?.Contains("application/json") ?? false)
 36        {
 837            using var reader = new StreamReader(HttpContext.Request.Body);
 838            var body = await reader.ReadToEndAsync(cancellationToken);
 39
 840            if (!string.IsNullOrWhiteSpace(body))
 41            {
 42                try
 43                {
 744                    request = JsonSerializer.Deserialize<PostRequest>(body, new JsonSerializerOptions
 745                    {
 746                        PropertyNameCaseInsensitive = true
 747                    });
 748                }
 049                catch
 50                {
 051                    AddError("Invalid request body.");
 052                }
 53            }
 854        }
 55
 956        request ??= new();
 57
 958        var definitionId = Route<string>("definitionId");
 59
 960        if (string.IsNullOrWhiteSpace(definitionId))
 061            AddError("Missing workflow definition ID.");
 62        else
 963            request.DefinitionId = definitionId;
 64
 965        if (ValidationFailed)
 66        {
 067            await Send.ErrorsAsync(cancellation: cancellationToken);
 068            return;
 69        }
 70
 971        await WorkflowExecutionHelper.ExecuteWorkflowAsync(
 972            request,
 973            workflowDefinitionService,
 974            workflowRuntime,
 975            workflowStarter,
 976            apiSerializer,
 977            scriptAuthorizationService,
 978            HttpContext,
 979            cancellationToken);
 980    }
 81}