12
12
use Prophecy \Argument ;
13
13
use Prophecy \PhpUnit \ProphecyTrait ;
14
14
use Psr \Log \LoggerInterface ;
15
+ use Symfony \Component \EventDispatcher \EventDispatcher ;
15
16
use Symfony \Component \EventDispatcher \EventDispatcherInterface ;
16
17
17
18
final class DefaultWorkerTest extends TestCase
@@ -20,17 +21,17 @@ final class DefaultWorkerTest extends TestCase
20
21
21
22
public function testRunWorker (): void
22
23
{
23
- $ evenDispatcher = $ this ->prophesize (EventDispatcherInterface::class);
24
- $ evenDispatcher ->dispatch (Argument::type (WorkerStartedEvent::class))->shouldBeCalledTimes (1 );
25
- $ evenDispatcher ->dispatch (Argument::type (WorkerRunningEvent::class))->shouldBeCalledTimes (1 )->will (
24
+ $ eventDispatcher = $ this ->prophesize (EventDispatcherInterface::class);
25
+ $ eventDispatcher ->dispatch (Argument::type (WorkerStartedEvent::class))->shouldBeCalledTimes (1 );
26
+ $ eventDispatcher ->dispatch (Argument::type (WorkerRunningEvent::class))->shouldBeCalledTimes (1 )->will (
26
27
/** @param array{WorkerRunningEvent} $args */
27
28
static function (array $ args ) {
28
29
$ args [0 ]->worker ->stop ();
29
30
30
31
return $ args [0 ];
31
32
},
32
33
);
33
- $ evenDispatcher ->dispatch (Argument::type (WorkerStoppedEvent::class))->shouldBeCalledTimes (1 );
34
+ $ eventDispatcher ->dispatch (Argument::type (WorkerStoppedEvent::class))->shouldBeCalledTimes (1 );
34
35
35
36
$ logger = $ this ->prophesize (LoggerInterface::class);
36
37
$ logger ->debug ('Worker starting ' )->shouldBeCalledTimes (1 );
@@ -40,16 +41,16 @@ static function (array $args) {
40
41
$ logger ->debug ('Worker stopped ' )->shouldBeCalledTimes (1 );
41
42
$ logger ->debug ('Worker terminated ' )->shouldBeCalledTimes (1 );
42
43
43
- $ worker = new DefaultWorker (static fn () => null , $ evenDispatcher ->reveal (), $ logger ->reveal ());
44
+ $ worker = new DefaultWorker (static fn () => null , $ eventDispatcher ->reveal (), $ logger ->reveal ());
44
45
$ worker ->run (200 );
45
46
}
46
47
47
48
public function testJobStopWorker (): void
48
49
{
49
- $ evenDispatcher = $ this ->prophesize (EventDispatcherInterface::class);
50
- $ evenDispatcher ->dispatch (Argument::type (WorkerStartedEvent::class))->shouldBeCalledTimes (1 );
51
- $ evenDispatcher ->dispatch (Argument::type (WorkerRunningEvent::class))->shouldBeCalledTimes (1 );
52
- $ evenDispatcher ->dispatch (Argument::type (WorkerStoppedEvent::class))->shouldBeCalledTimes (1 );
50
+ $ eventDispatcher = $ this ->prophesize (EventDispatcherInterface::class);
51
+ $ eventDispatcher ->dispatch (Argument::type (WorkerStartedEvent::class))->shouldBeCalledTimes (1 );
52
+ $ eventDispatcher ->dispatch (Argument::type (WorkerRunningEvent::class))->shouldBeCalledTimes (1 );
53
+ $ eventDispatcher ->dispatch (Argument::type (WorkerStoppedEvent::class))->shouldBeCalledTimes (1 );
53
54
54
55
$ logger = $ this ->prophesize (LoggerInterface::class);
55
56
$ logger ->debug ('Worker starting ' )->shouldBeCalledTimes (1 );
@@ -63,10 +64,39 @@ public function testJobStopWorker(): void
63
64
static function ($ stop ): void {
64
65
$ stop ();
65
66
},
66
- $ evenDispatcher ->reveal (),
67
+ $ eventDispatcher ->reveal (),
67
68
$ logger ->reveal (),
68
69
);
69
70
70
71
$ worker ->run (0 );
71
72
}
73
+
74
+ public function testCustomEventDispatcher (): void
75
+ {
76
+ $ listener = new class {
77
+ public int $ called = 0 ;
78
+
79
+ public function __invoke (WorkerStartedEvent $ event ): void
80
+ {
81
+ $ this ->called ++;
82
+ }
83
+ };
84
+
85
+ $ eventDispatcher = new EventDispatcher ();
86
+ $ eventDispatcher ->addListener (WorkerStartedEvent::class, $ listener );
87
+
88
+ $ logger = $ this ->prophesize (LoggerInterface::class);
89
+ $ worker = DefaultWorker::create (
90
+ static function ($ stop ): void {
91
+ $ stop ();
92
+ },
93
+ [],
94
+ $ logger ->reveal (),
95
+ $ eventDispatcher ,
96
+ );
97
+
98
+ $ worker ->run (0 );
99
+
100
+ self ::assertEquals (1 , $ listener ->called );
101
+ }
72
102
}
0 commit comments