< Summary

Information
Class: Elsa.Workflows.Api.Endpoints.Tests.Activities.Request
Assembly: Elsa.Workflows.Api
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Api/Endpoints/Tests/Activities/Endpoint.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 2
Coverable lines: 2
Total lines: 84
Line coverage: 0%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_WorkflowDefinitionHandle()100%210%
get_ActivityHandle()100%210%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Api/Endpoints/Tests/Activities/Endpoint.cs

#LineLine coverage
 1using Elsa.Authorization;
 2using Elsa.Abstractions;
 3using Elsa.Workflows.Management;
 4using Elsa.Workflows.Models;
 5using Elsa.Workflows.Runtime;
 6using Elsa.Workflows.State;
 7
 8namespace Elsa.Workflows.Api.Endpoints.Tests.Activities;
 9
 10/// <summary>
 11/// Represents an endpoint for testing activities in workflows. This endpoint is responsible for handling requests
 12/// that test the execution of a specific activity in a workflow and returning the results.
 13/// </summary>
 14/// <remarks>
 15/// This endpoint is used to perform operations such as:
 16/// - Finding a workflow graph based on a provided workflow definition handle.
 17/// - Locating and executing a specific activity within the workflow graph.
 18/// - Capturing the execution results and returning them as a response.
 19/// </remarks>
 20internal class Endpoint(
 21    IWorkflowDefinitionService workflowDefinitionService,
 22    IActivityTestRunner activityTestRunner,
 23    IActivityExecutionMapper activityExecutionMapper)
 24    : ElsaEndpoint<Request>
 25{
 26    /// <inheritdoc />
 27    public override void Configure()
 28    {
 29        Post("/tests/activities");
 30        RequirePermission(Elsa.Workflows.Api.Permissions.WorkflowPermissions.Tests, CoreVerbs.Execute);
 31    }
 32
 33    /// <inheritdoc />
 34    public override async Task HandleAsync(Request request, CancellationToken cancellationToken)
 35    {
 36        var workflowGraph = await workflowDefinitionService.FindWorkflowGraphAsync(request.WorkflowDefinitionHandle, can
 37
 38        if (workflowGraph == null)
 39        {
 40            AddError("Workflow definition not found.");
 41            await Send.ErrorsAsync(cancellation: cancellationToken);
 42            return;
 43        }
 44
 45        var activity = workflowGraph.FindActivity(request.ActivityHandle);
 46
 47        if (activity == null)
 48        {
 49            AddError("Activity not found.");
 50            await Send.ErrorsAsync(cancellation: cancellationToken);
 51            return;
 52        }
 53
 54        var activityExecutionContext = await activityTestRunner.RunAsync(workflowGraph, activity, cancellationToken);
 55        var record = await activityExecutionMapper.MapAsync(activityExecutionContext);
 56        var activityState = record.ActivityState ?? new Dictionary<string, object?>();
 57
 58        var response = new Response
 59        {
 60            ActivityState = activityState,
 61            Outputs = record.Outputs,
 62            Payload = record.Payload,
 63            Exception = record.Exception,
 64            Status = record.Status
 65        };
 66
 67        await Send.OkAsync(response, cancellationToken);
 68    }
 69}
 70
 71public class Request
 72{
 073    public WorkflowDefinitionHandle WorkflowDefinitionHandle { get; set; } = null!;
 074    public ActivityHandle ActivityHandle { get; set; } = null!;
 75}
 76
 77public class Response
 78{
 79    public IDictionary<string, object?> ActivityState { get; set; } = null!;
 80    public IDictionary<string, object?>? Outputs { get; set; }
 81    public IDictionary<string, object>? Payload { get; set; }
 82    public ExceptionState? Exception { get; set; }
 83    public ActivityStatus Status { get; set; }
 84}