Skip to content

Commit e66ea69

Browse files
authored
Merge pull request #15 from MyDigitalLife/events
Events
2 parents be4bc58 + d16750b commit e66ea69

File tree

3 files changed

+115
-41
lines changed

3 files changed

+115
-41
lines changed

src/Events/CompletedEvent.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?php
2+
3+
namespace Brexis\LaravelWorkflow\Events;
4+
5+
class CompletedEvent extends BaseEvent
6+
{
7+
8+
}

src/Events/WorkflowSubscriber.php

Lines changed: 46 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,39 +11,70 @@
1111
*/
1212
class WorkflowSubscriber implements EventSubscriberInterface
1313
{
14-
public function guardEvent(SymfonyGuardEvent $event) {
14+
public function guardEvent(SymfonyGuardEvent $event)
15+
{
1516
event(new GuardEvent($event));
16-
event('workflow.'.$event->getWorkflowName().'.guard', $event);
17+
event('workflow.guard', $event);
18+
event('workflow.' . $event->getWorkflowName() . '.guard', $event);
19+
event('workflow.' . $event->getWorkflowName() . '.guard.' . $event->getTransition()->getName(), $event);
1720
}
1821

19-
public function leaveEvent(Event $event) {
22+
public function leaveEvent(Event $event)
23+
{
2024
event(new LeaveEvent($event));
21-
event('workflow.'.$event->getWorkflowName().'.leave', $event);
25+
event('workflow.leave', $event);
26+
event('workflow.' . $event->getWorkflowName() . '.leave', $event);
27+
foreach ($event->getTransition()->getFroms() as $marking) {
28+
event('workflow.' . $event->getWorkflowName() . '.leave.' . $marking, $event);
29+
}
2230
}
2331

24-
public function transitionEvent(Event $event) {
32+
public function transitionEvent(Event $event)
33+
{
2534
event(new TransitionEvent($event));
26-
event('workflow.'.$event->getWorkflowName().'.transition', $event);
35+
event('workflow.transition', $event);
36+
event('workflow.' . $event->getWorkflowName() . '.transition', $event);
37+
event('workflow.' . $event->getWorkflowName() . '.transition.' . $event->getTransition()->getName(), $event);
2738
}
2839

29-
public function enterEvent(Event $event) {
40+
public function enterEvent(Event $event)
41+
{
3042
event(new EnterEvent($event));
31-
event('workflow.'.$event->getWorkflowName().'.enter', $event);
43+
event('workflow.enter', $event);
44+
event('workflow.' . $event->getWorkflowName() . '.enter', $event);
45+
foreach ($event->getTransition()->getTos() as $marking) {
46+
event('workflow.' . $event->getWorkflowName() . '.enter.' . $marking, $event);
47+
}
3248
}
3349

34-
public function enteredEvent(Event $event) {
50+
public function enteredEvent(Event $event)
51+
{
3552
event(new EnteredEvent($event));
36-
event('workflow.'.$event->getWorkflowName().'.entered', $event);
53+
event('workflow.entered', $event);
54+
event('workflow.' . $event->getWorkflowName() . '.entered', $event);
55+
foreach ($event->getTransition()->getTos() as $marking) {
56+
event('workflow.' . $event->getWorkflowName() . '.entered.' . $marking, $event);
57+
}
3758
}
3859

60+
public function completedEvent(Event $event)
61+
{
62+
event(new CompletedEvent($event));
63+
event('workflow.completed', $event);
64+
event('workflow.' . $event->getWorkflowName() . '.completed', $event);
65+
event('workflow.' . $event->getWorkflowName() . '.completed.' . $event->getTransition()->getName(), $event);
66+
}
67+
68+
3969
public static function getSubscribedEvents()
4070
{
4171
return [
42-
'workflow.guard' => ['guardEvent'],
43-
'workflow.leave' => ['leaveEvent'],
44-
'workflow.transition' => ['transitionEvent'],
45-
'workflow.enter' => ['enterEvent'],
46-
'workflow.entered' => ['enteredEvent'],
72+
'workflow.guard' => ['guardEvent'],
73+
'workflow.leave' => ['leaveEvent'],
74+
'workflow.transition' => ['transitionEvent'],
75+
'workflow.enter' => ['enterEvent'],
76+
'workflow.entered' => ['enteredEvent'],
77+
'workflow.completed' => ['completedEvent'],
4778
];
4879
}
4980
}

tests/WorkflowSubscriberTest.php

Lines changed: 61 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
11
<?php
2+
23
namespace Tests {
34

5+
use Brexis\LaravelWorkflow\Events\AnnounceEvent;
6+
use Brexis\LaravelWorkflow\Events\CompletedEvent;
7+
use Brexis\LaravelWorkflow\Events\EnteredEvent;
8+
use Brexis\LaravelWorkflow\Events\EnterEvent;
9+
use Brexis\LaravelWorkflow\Events\GuardEvent;
10+
use Brexis\LaravelWorkflow\Events\LeaveEvent;
11+
use Brexis\LaravelWorkflow\Events\TransitionEvent;
412
use PHPUnit\Framework\TestCase;
513
use Brexis\LaravelWorkflow\WorkflowRegistry;
614
use Tests\Fixtures\TestObject;
@@ -13,44 +21,71 @@ public function testIfWorkflowEmitsEvents()
1321

1422
$events = [];
1523

16-
$config = [
17-
'straight' => [
18-
'supports' => ['Tests\Fixtures\TestObject'],
19-
'places' => ['a', 'b', 'c'],
20-
'transitions' => [
21-
't1' => [
22-
'from' => 'a',
23-
'to' => 'b',
24+
$config = [
25+
'straight' => [
26+
'supports' => [TestObject::class],
27+
'places' => ['a', 'b', 'c'],
28+
'transitions' => [
29+
't1' => [
30+
'from' => 'a',
31+
'to' => 'b',
32+
],
33+
't2' => [
34+
'from' => 'b',
35+
'to' => 'c',
36+
],
2437
],
25-
't2' => [
26-
'from' => 'b',
27-
'to' => 'c',
28-
]
2938
],
30-
]
3139
];
3240

33-
$registry = new WorkflowRegistry($config);
34-
$object = new TestObject;
35-
$workflow = $registry->get($object);
41+
$registry = new WorkflowRegistry($config);
42+
$object = new TestObject;
43+
$workflow = $registry->get($object);
3644

3745
$workflow->apply($object, 't1');
3846

39-
$this->assertTrue($events[0] instanceof \Brexis\LaravelWorkflow\Events\GuardEvent);
40-
$this->assertTrue($events[1] == "workflow.straight.guard");
41-
$this->assertTrue($events[2] instanceof \Brexis\LaravelWorkflow\Events\LeaveEvent);
42-
$this->assertTrue($events[3] == "workflow.straight.leave");
43-
$this->assertTrue($events[4] instanceof \Brexis\LaravelWorkflow\Events\TransitionEvent);
44-
$this->assertTrue($events[5] == "workflow.straight.transition");
45-
$this->assertTrue($events[6] instanceof \Brexis\LaravelWorkflow\Events\EnterEvent);
46-
$this->assertTrue($events[7] == "workflow.straight.enter");
47-
$this->assertTrue($events[8] instanceof \Brexis\LaravelWorkflow\Events\EnteredEvent);
48-
$this->assertTrue($events[9] == "workflow.straight.entered");
47+
$this->assertCount(28, $events);
48+
49+
$this->assertInstanceOf(GuardEvent::class, $events[0]);
50+
$this->assertEquals('workflow.guard', $events[1]);
51+
$this->assertEquals('workflow.straight.guard', $events[2]);
52+
$this->assertEquals('workflow.straight.guard.t1', $events[3]);
53+
54+
$this->assertInstanceOf(LeaveEvent::class, $events[4]);
55+
$this->assertEquals('workflow.leave', $events[5]);
56+
$this->assertEquals('workflow.straight.leave', $events[6]);
57+
$this->assertEquals('workflow.straight.leave.a', $events[7]);
58+
59+
$this->assertInstanceOf(TransitionEvent::class, $events[8]);
60+
$this->assertEquals('workflow.transition', $events[9]);
61+
$this->assertEquals('workflow.straight.transition', $events[10]);
62+
$this->assertEquals('workflow.straight.transition.t1', $events[11]);
63+
64+
$this->assertInstanceOf(EnterEvent::class, $events[12]);
65+
$this->assertEquals('workflow.enter', $events[13]);
66+
$this->assertEquals('workflow.straight.enter', $events[14]);
67+
$this->assertEquals('workflow.straight.enter.b', $events[15]);
68+
69+
$this->assertInstanceOf(EnteredEvent::class, $events[16]);
70+
$this->assertEquals('workflow.entered', $events[17]);
71+
$this->assertEquals('workflow.straight.entered', $events[18]);
72+
$this->assertEquals('workflow.straight.entered.b', $events[19]);
73+
74+
$this->assertInstanceOf(CompletedEvent::class, $events[20]);
75+
$this->assertEquals('workflow.completed', $events[21]);
76+
$this->assertEquals('workflow.straight.completed', $events[22]);
77+
$this->assertEquals('workflow.straight.completed.t1', $events[23]);
78+
79+
$this->assertInstanceOf(GuardEvent::class, $events[24]);
80+
$this->assertEquals('workflow.guard', $events[25]);
81+
$this->assertEquals('workflow.straight.guard', $events[26]);
82+
$this->assertEquals('workflow.straight.guard.t2', $events[27]);
4983
}
5084
}
5185
}
5286

5387
namespace {
88+
5489
$events = null;
5590

5691
function event($ev)

0 commit comments

Comments
 (0)