From 641dd664d63cc0314087cb6875db7a0de020cbd5 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Fri, 30 Jan 2026 21:41:27 +0100 Subject: [PATCH] Ensure graceful handling of missing `ParentInstanceId` in `ResumeBulkDispatchWorkflowActivity` and add signal-based wait in `DeleteWorkflowTests`. --- .../Handlers/ResumeBulkDispatchWorkflowActivity.cs | 5 ++++- .../Scenarios/WorkflowActivities/DeleteWorkflowTests.cs | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/modules/Elsa.Workflows.Runtime/Handlers/ResumeBulkDispatchWorkflowActivity.cs b/src/modules/Elsa.Workflows.Runtime/Handlers/ResumeBulkDispatchWorkflowActivity.cs index 7532d376e..5c95a13a4 100644 --- a/src/modules/Elsa.Workflows.Runtime/Handlers/ResumeBulkDispatchWorkflowActivity.cs +++ b/src/modules/Elsa.Workflows.Runtime/Handlers/ResumeBulkDispatchWorkflowActivity.cs @@ -26,7 +26,10 @@ internal class ResumeBulkDispatchWorkflowActivity(IBookmarkQueue bookmarkQueue, if (!waitForCompletion) return; - var parentInstanceId = (string)workflowState.Properties["ParentInstanceId"]; + if (!workflowState.Properties.TryGetValue("ParentInstanceId", out var parentInstanceIdValue)) + return; + + var parentInstanceId = (string)parentInstanceIdValue; var activityTypeName = ActivityTypeNameHelper.GenerateTypeName(); var stimulus = new BulkDispatchWorkflowsStimulus(parentInstanceId); var stimulusHash = stimulusHasher.Hash(activityTypeName, stimulus); diff --git a/test/component/Elsa.Workflows.ComponentTests/Scenarios/WorkflowActivities/DeleteWorkflowTests.cs b/test/component/Elsa.Workflows.ComponentTests/Scenarios/WorkflowActivities/DeleteWorkflowTests.cs index 96fb810be..2a13ec262 100644 --- a/test/component/Elsa.Workflows.ComponentTests/Scenarios/WorkflowActivities/DeleteWorkflowTests.cs +++ b/test/component/Elsa.Workflows.ComponentTests/Scenarios/WorkflowActivities/DeleteWorkflowTests.cs @@ -36,6 +36,9 @@ public class DeleteWorkflowTests : AppComponentTest var workflowDefinitionManager = _scope1.ServiceProvider.GetRequiredService(); await workflowDefinitionManager.DeleteByDefinitionIdAsync(Workflows.DeleteWorkflow.DefinitionId); + // Wait for the event handler to process the deletion from the activity registry + await _signalManager.WaitAsync(WorkflowDeletedSignal, 5000); + WorkflowTypeDeletedFromRegistry(_scope1, Workflows.DeleteWorkflow.Type); }