Add entity workflow title to notification

Introduced `EntityWorkflowManager` to `NotificationOnTransition` to fetch and include the entity workflow title in notifications. Updated relevant tests to support the new functionality and verify the entity title retrieval process.
This commit is contained in:
Julien Fastré 2024-11-19 12:01:31 +01:00
parent 9012e68b70
commit 3a1947df9e
Signed by: julienfastre
GPG Key ID: BDE2190974723FCB
2 changed files with 14 additions and 1 deletions

View File

@ -16,6 +16,8 @@ use Chill\MainBundle\Entity\User;
use Chill\MainBundle\Entity\UserGroup; use Chill\MainBundle\Entity\UserGroup;
use Chill\MainBundle\Entity\Workflow\EntityWorkflow; use Chill\MainBundle\Entity\Workflow\EntityWorkflow;
use Chill\MainBundle\Entity\Workflow\EntityWorkflowStep; use Chill\MainBundle\Entity\Workflow\EntityWorkflowStep;
use Chill\MainBundle\Workflow\EntityWorkflowHandlerInterface;
use Chill\MainBundle\Workflow\EntityWorkflowManager;
use Chill\MainBundle\Workflow\EventSubscriber\NotificationOnTransition; use Chill\MainBundle\Workflow\EventSubscriber\NotificationOnTransition;
use Chill\MainBundle\Workflow\Helper\MetadataExtractor; use Chill\MainBundle\Workflow\Helper\MetadataExtractor;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
@ -91,12 +93,18 @@ final class NotificationOnTransitionTest extends TestCase
$security = $this->prophesize(Security::class); $security = $this->prophesize(Security::class);
$security->getUser()->willReturn($currentUser); $security->getUser()->willReturn($currentUser);
$entityWorkflowHandler = $this->prophesize(EntityWorkflowHandlerInterface::class);
$entityWorkflowHandler->getEntityTitle($entityWorkflow)->willReturn('workflow title');
$entityWorkflowManager = $this->prophesize(EntityWorkflowManager::class);
$entityWorkflowManager->getHandler($entityWorkflow)->willReturn($entityWorkflowHandler->reveal());
$notificationOnTransition = new NotificationOnTransition( $notificationOnTransition = new NotificationOnTransition(
$em->reveal(), $em->reveal(),
$engine->reveal(), $engine->reveal(),
$extractor->reveal(), $extractor->reveal(),
$security->reveal(), $security->reveal(),
$registry->reveal() $registry->reveal(),
$entityWorkflowManager->reveal(),
); );
$event = new Event($entityWorkflow, new Marking(), new Transition('dummy_transition', ['from_state'], ['to_state']), $workflow); $event = new Event($entityWorkflow, new Marking(), new Transition('dummy_transition', ['from_state'], ['to_state']), $workflow);

View File

@ -15,6 +15,7 @@ use Chill\MainBundle\Entity\Notification;
use Chill\MainBundle\Entity\User; use Chill\MainBundle\Entity\User;
use Chill\MainBundle\Entity\UserGroup; use Chill\MainBundle\Entity\UserGroup;
use Chill\MainBundle\Entity\Workflow\EntityWorkflow; use Chill\MainBundle\Entity\Workflow\EntityWorkflow;
use Chill\MainBundle\Workflow\EntityWorkflowManager;
use Chill\MainBundle\Workflow\Helper\MetadataExtractor; use Chill\MainBundle\Workflow\Helper\MetadataExtractor;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface;
@ -30,6 +31,7 @@ class NotificationOnTransition implements EventSubscriberInterface
private readonly MetadataExtractor $metadataExtractor, private readonly MetadataExtractor $metadataExtractor,
private readonly Security $security, private readonly Security $security,
private readonly Registry $registry, private readonly Registry $registry,
private EntityWorkflowManager $entityWorkflowManager,
) {} ) {}
public static function getSubscribedEvents(): array public static function getSubscribedEvents(): array
@ -62,6 +64,8 @@ class NotificationOnTransition implements EventSubscriberInterface
/** @var array<string, User> $dests array of unique values, where keys is the object's hash */ /** @var array<string, User> $dests array of unique values, where keys is the object's hash */
$dests = []; $dests = [];
$title = $this->entityWorkflowManager->getHandler($entityWorkflow)->getEntityTitle($entityWorkflow);
foreach (array_merge( foreach (array_merge(
// the subscriber to each step // the subscriber to each step
$entityWorkflow->getSubscriberToStep()->toArray(), $entityWorkflow->getSubscriberToStep()->toArray(),
@ -112,6 +116,7 @@ class NotificationOnTransition implements EventSubscriberInterface
static fn (User $u) => $u->getId(), static fn (User $u) => $u->getId(),
$entityWorkflow->getCurrentStep()->getDestUser()->toArray() $entityWorkflow->getCurrentStep()->getDestUser()->toArray()
), true), ), true),
'title' => $title,
]; ];
$notification = new Notification(); $notification = new Notification();