[Workflow] Added a way to not fire the annonce event
This commit is contained in:
parent
ddc016988e
commit
d31939d01d
@ -6,6 +6,7 @@ CHANGELOG
|
||||
|
||||
* Added context to `TransitionException` and its child classes whenever they are thrown in `Workflow::apply()`
|
||||
* Added `Registry::has()` to check if a workflow exists
|
||||
* Added support for `$context[Workflow::DISABLE_ANNOUNCE_EVENT] = true` when calling `workflow->apply()` to not fire the announce event
|
||||
|
||||
5.0.0
|
||||
-----
|
||||
|
@ -426,6 +426,30 @@ class WorkflowTest extends TestCase
|
||||
$this->assertSame($eventNameExpected, $eventDispatcher->dispatchedEvents);
|
||||
}
|
||||
|
||||
public function provideApplyWithEventDispatcherForAnnounceTests()
|
||||
{
|
||||
yield [false, [Workflow::DISABLE_ANNOUNCE_EVENT => true]];
|
||||
yield [true, [Workflow::DISABLE_ANNOUNCE_EVENT => false]];
|
||||
yield [true, []];
|
||||
}
|
||||
|
||||
/** @dataProvider provideApplyWithEventDispatcherForAnnounceTests */
|
||||
public function testApplyWithEventDispatcherForAnnounce(bool $fired, array $context)
|
||||
{
|
||||
$definition = $this->createComplexWorkflowDefinition();
|
||||
$subject = new Subject();
|
||||
$eventDispatcher = new EventDispatcherMock();
|
||||
$workflow = new Workflow($definition, new MethodMarkingStore(), $eventDispatcher, 'workflow_name');
|
||||
|
||||
$workflow->apply($subject, 't1', $context);
|
||||
|
||||
if ($fired) {
|
||||
$this->assertContains('workflow.workflow_name.announce', $eventDispatcher->dispatchedEvents);
|
||||
} else {
|
||||
$this->assertNotContains('workflow.workflow_name.announce', $eventDispatcher->dispatchedEvents);
|
||||
}
|
||||
}
|
||||
|
||||
public function testApplyDoesNotTriggerExtraGuardWithEventDispatcher()
|
||||
{
|
||||
$transitions[] = new Transition('a-b', 'a', 'b');
|
||||
|
@ -33,6 +33,8 @@ use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
||||
*/
|
||||
class Workflow implements WorkflowInterface
|
||||
{
|
||||
public const DISABLE_ANNOUNCE_EVENT = 'workflow_disable_announce_event';
|
||||
|
||||
private $definition;
|
||||
private $markingStore;
|
||||
private $dispatcher;
|
||||
@ -207,8 +209,10 @@ class Workflow implements WorkflowInterface
|
||||
|
||||
$this->completed($subject, $transition, $marking);
|
||||
|
||||
if (!($context[self::DISABLE_ANNOUNCE_EVENT] ?? false)) {
|
||||
$this->announce($subject, $transition, $marking);
|
||||
}
|
||||
}
|
||||
|
||||
return $marking;
|
||||
}
|
||||
|
Reference in New Issue
Block a user