Add test for detecting stale workflows and enhance handler

Added a new test to check if workflows are stale in EntityWorkflowTest. Enhanced CancelStaleWorkflowHandler to handle stale workflows more accurately, including checking if workflows have transitioned recently. Updated EntityWorkflow entity to cascade remove workflow steps.

Refactor tests for handler, to avoid using $kernel during tests
This commit is contained in:
2024-09-09 14:59:26 +02:00
parent d152efe084
commit f4356ac249
5 changed files with 226 additions and 107 deletions

View File

@@ -138,4 +138,31 @@ final class EntityWorkflowTest extends TestCase
self::assertContains($person1, $persons);
self::assertContains($person2, $persons);
}
public function testIsStaledAt(): void
{
$creationDate = new \DateTimeImmutable('2024-01-01');
$firstStepDate = new \DateTimeImmutable('2024-01-02');
$afterFistStep = new \DateTimeImmutable('2024-01-03');
$entityWorkflow = new EntityWorkflow();
self::assertFalse($entityWorkflow->isStaledAt($creationDate), 'an entityWorkflow with null createdAt date should never be staled at initial step');
self::assertFalse($entityWorkflow->isStaledAt($firstStepDate), 'an entityWorkflow with null createdAt date should never be staled at initial step');
self::assertFalse($entityWorkflow->isStaledAt($afterFistStep), 'an entityWorkflow with null createdAt date should never be staled at initial step');
$entityWorkflow->setCreatedAt($creationDate);
self::assertFalse($entityWorkflow->isStaledAt($creationDate), 'an entityWorkflow with no step after initial should be staled');
self::assertTrue($entityWorkflow->isStaledAt($firstStepDate), 'an entityWorkflow with no step after initial should be staled');
self::assertTrue($entityWorkflow->isStaledAt($afterFistStep), 'an entityWorkflow with no step after initial should be staled');
// apply a first step
$dto = new WorkflowTransitionContextDTO($entityWorkflow);
$entityWorkflow->setStep('new_step', $dto, 'to_new_step', $firstStepDate);
self::assertFalse($entityWorkflow->isStaledAt($creationDate));
self::assertFalse($entityWorkflow->isStaledAt($firstStepDate));
self::assertTrue($entityWorkflow->isStaledAt($afterFistStep));
}
}