Fix Canceling of stale workflow cronjob

Refactor workflow cancellation logic to encapsulate transition checks in a dedicated method, and update CronJob handling to use entity workflows instead of IDs. Enhance test coverage to ensure proper handling and instantiate mocks for EntityManagerInterface.
This commit is contained in:
2024-10-21 17:39:31 +02:00
parent 1d708a481d
commit 527cf23d4f
6 changed files with 73 additions and 29 deletions

View File

@@ -131,18 +131,22 @@ class CancelStaleWorkflowHandlerTest extends TestCase
->setInitialPlaces('initial')
->addPlaces(['initial', 'step1', 'canceled', 'final'])
->addTransition(new Transition('to_step1', 'initial', 'step1'))
->addTransition($cancelInit = new Transition('cancel', 'initial', 'canceled'))
->addTransition($finalizeInit = new Transition('finalize', 'initial', 'final'))
->addTransition($cancelStep1 = new Transition('cancel', 'step1', 'canceled'))
->addTransition($finalizeStep1 = new Transition('finalize', 'step1', 'final'));
->addTransition(new Transition('cancel', 'initial', 'canceled'))
->addTransition(new Transition('finalize', 'initial', 'final'))
->addTransition(new Transition('cancel', 'step1', 'canceled'))
->addTransition(new Transition('finalize', 'step1', 'final'));
$transitionStorage = new \SplObjectStorage();
$transitionStorage->attach($finalizeInit, ['isFinal' => true, 'isFinalPositive' => true]);
$transitionStorage->attach($cancelInit, ['isFinal' => true, 'isFinalPositive' => false]);
$transitionStorage->attach($finalizeStep1, ['isFinal' => true, 'isFinalPositive' => true]);
$transitionStorage->attach($cancelStep1, ['isFinal' => true, 'isFinalPositive' => false]);
$definitionBuilder->setMetadataStore(new InMemoryMetadataStore(placesMetadata: [
'canceled' => [
'isFinal' => true,
'isFinalPositive' => false,
],
'final' => [
'isFinal' => true,
'isFinalPositive', true,
],
]));
$definitionBuilder->setMetadataStore(new InMemoryMetadataStore([], [], $transitionStorage));
$workflow = new Workflow($definitionBuilder->build(), new EntityWorkflowMarkingStore(), null, 'dummy_workflow');
$supports =
new class () implements WorkflowSupportStrategyInterface {