Skip to content
Permalink
Browse files

feature #35322 [Workflow] Added a way to not fire the announce event …

…(lyrixx)

This PR was merged into the 5.1-dev branch.

Discussion
----------

[Workflow] Added a way to not fire the announce event

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       | Fix #35286
| License       | MIT
| Doc PR        |

Commits
-------

d31939d [Workflow] Added a way to not fire the annonce event
  • Loading branch information
lyrixx committed Jan 14, 2020
2 parents 0607691 + d31939d commit b350c80fc3572c9affa998f26ebcd1635b7ad32b
@@ -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 @@ public function testApplyWithEventDispatcher()
$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 @@
*/
class Workflow implements WorkflowInterface
{
public const DISABLE_ANNOUNCE_EVENT = 'workflow_disable_announce_event';

private $definition;
private $markingStore;
private $dispatcher;
@@ -207,7 +209,9 @@ public function apply(object $subject, string $transitionName, array $context =

$this->completed($subject, $transition, $marking);

$this->announce($subject, $transition, $marking);
if (!($context[self::DISABLE_ANNOUNCE_EVENT] ?? false)) {
$this->announce($subject, $transition, $marking);
}
}

return $marking;

0 comments on commit b350c80

Please sign in to comment.
You can’t perform that action at this time.