From 0a9ece71dcc5f77d0c9e2ef3375347cf63607a53 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Fri, 18 Jul 2025 21:46:53 +0200 Subject: [PATCH] Remove unused TestRun endpoint and update activity execution logic Eliminated the TestRun endpoint and related functionality from the API. Enhanced activity execution by leveraging pre-serialized snapshots and refactored mapping operations to use asynchronous methods. Also updated package versions to align with the latest dependencies. --- .../Endpoints/Activities/TestRun/Endpoint.cs | 80 ------------------- .../Endpoints/Tests/Activities/Endpoint.cs | 2 +- 2 files changed, 1 insertion(+), 81 deletions(-) delete mode 100644 src/modules/Elsa.Workflows.Api/Endpoints/Activities/TestRun/Endpoint.cs diff --git a/src/modules/Elsa.Workflows.Api/Endpoints/Activities/TestRun/Endpoint.cs b/src/modules/Elsa.Workflows.Api/Endpoints/Activities/TestRun/Endpoint.cs deleted file mode 100644 index a3f9764b9..000000000 --- a/src/modules/Elsa.Workflows.Api/Endpoints/Activities/TestRun/Endpoint.cs +++ /dev/null @@ -1,80 +0,0 @@ -using Elsa.Abstractions; -using Elsa.Extensions; -using Elsa.Workflows.Management; -using Elsa.Workflows.Models; -using Elsa.Workflows.Runtime; -using Elsa.Workflows.Runtime.Entities; -using Elsa.Workflows.State; - -namespace Elsa.Workflows.Api.Endpoints.Activities.TestRun; - -/// -/// This abstract class provides the necessary infrastructure to handle the execution of workflows, including setup of routes, permissions, -/// and processing of HTTP requests to execute workflows. -/// -internal class Endpoint( - IWorkflowDefinitionService workflowDefinitionService, - IActivityInvoker activityInvoker, - IActivityExecutionMapper activityExecutionMapper, - IIdentityGenerator identityGenerator, - IServiceProvider serviceProvider) - : ElsaEndpoint -{ - /// - public override void Configure() - { - Post("/activities/test-run"); - ConfigurePermissions("exec:activities"); - } - - /// - public override async Task HandleAsync(Request request, CancellationToken cancellationToken) - { - var workflowGraph = await workflowDefinitionService.FindWorkflowGraphAsync(request.WorkflowDefinitionHandle, cancellationToken); - - if (workflowGraph == null) - { - AddError("Workflow definition not found."); - await SendErrorsAsync(cancellation: cancellationToken); - return; - } - - var workflowInstanceId = identityGenerator.GenerateId(); - var workflowExecutionContext = await WorkflowExecutionContext.CreateAsync(serviceProvider, workflowGraph, workflowInstanceId, cancellationToken: cancellationToken); - var activity = workflowExecutionContext.FindActivity(request.ActivityHandle); - - if (activity == null) - { - AddError("Activity not found."); - await SendErrorsAsync(cancellation: cancellationToken); - return; - } - - var activityExecutionContext = await activityInvoker.InvokeAsync(workflowExecutionContext, activity); - var record = activityExecutionMapper.Map(activityExecutionContext); - var outcomes = record.Payload != null && record.Payload.TryGetValue("Outcomes", out var outcomesObj) ? outcomesObj as ICollection : null; - var response = new Response - { - Outputs = record.Outputs, - Outcomes = outcomes, - Exception = record.Exception, - Status = record.Status - }; - - await SendOkAsync(response, cancellationToken); - } -} - -public class Request -{ - public WorkflowDefinitionHandle WorkflowDefinitionHandle { get; set; } = null!; - public ActivityHandle ActivityHandle { get; set; } = null!; -} - -public class Response -{ - public IDictionary? Outputs { get; set; } - public ICollection? Outcomes { get; set; } - public ExceptionState? Exception { get; set; } - public ActivityStatus Status { get; set; } -} \ No newline at end of file diff --git a/src/modules/Elsa.Workflows.Api/Endpoints/Tests/Activities/Endpoint.cs b/src/modules/Elsa.Workflows.Api/Endpoints/Tests/Activities/Endpoint.cs index 12311231f..49494c043 100644 --- a/src/modules/Elsa.Workflows.Api/Endpoints/Tests/Activities/Endpoint.cs +++ b/src/modules/Elsa.Workflows.Api/Endpoints/Tests/Activities/Endpoint.cs @@ -51,7 +51,7 @@ internal class Endpoint( } var activityExecutionContext = await activityTestRunner.RunAsync(workflowGraph, activity, cancellationToken); - var record = activityExecutionMapper.Map(activityExecutionContext); + var record = await activityExecutionMapper.MapAsync(activityExecutionContext); var activityState = record.ActivityState ?? new Dictionary(); var response = new Response