Passed
Push — master ( b2b84f...109e7c )
by Thomas Mauro
03:02
created

EventDispatcherFactoryTest   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 130
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 5
dl 0
loc 130
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace TMV\Laminas\Messenger\Test\Factory;
6
7
use PHPUnit\Framework\TestCase;
8
use Prophecy\PhpUnit\ProphecyTrait;
9
use Psr\Container\ContainerInterface;
10
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
11
use Symfony\Component\Messenger\EventListener\DispatchPcntlSignalListener;
12
use Symfony\Component\Messenger\EventListener\SendFailedMessageForRetryListener;
13
use Symfony\Component\Messenger\EventListener\SendFailedMessageToFailureTransportListener;
14
use Symfony\Component\Messenger\EventListener\StopWorkerOnRestartSignalListener;
15
use Symfony\Component\Messenger\EventListener\StopWorkerOnSigtermSignalListener;
16
use TMV\Laminas\Messenger\Factory\EventDispatcherFactory;
17
18
class EventDispatcherFactoryTest extends TestCase
19
{
20
    use ProphecyTrait;
21
22
    private function getListeners(): array
23
    {
24
        return [
25
            'event1' => new class implements EventSubscriberInterface {
26
                public static function getSubscribedEvents(): array
27
                {
28
                    return ['event1' => ['bar', -100]];
29
                }
30
            },
31
            'event2' => new class implements EventSubscriberInterface {
32
                public static function getSubscribedEvents(): array
33
                {
34
                    return ['event2' => ['bar', -100]];
35
                }
36
            },
37
            'event3' => new class implements EventSubscriberInterface {
38
                public static function getSubscribedEvents(): array
39
                {
40
                    return ['event3' => ['bar', -100]];
41
                }
42
            },
43
            'event4' => new class implements EventSubscriberInterface {
44
                public static function getSubscribedEvents(): array
45
                {
46
                    return ['event4' => ['bar', -100]];
47
                }
48
            },
49
            'event5' => new class implements EventSubscriberInterface {
50
                public static function getSubscribedEvents(): array
51
                {
52
                    return ['event5' => ['bar', -100]];
53
                }
54
            },
55
        ];
56
    }
57
58
    public function testFactoryWithDefaults(): void
59
    {
60
        $container = $this->prophesize(ContainerInterface::class);
61
62
        $container->has('config')->willReturn(true);
63
        $container->get('config')->shouldBeCalled()->willReturn([
64
            'messenger' => [
65
            ],
66
        ]);
67
68
        $container->get(StopWorkerOnSigtermSignalListener::class)
69
            ->shouldBeCalled()
70
            ->willReturn($this->getListeners()['event1']);
71
        $container->get(DispatchPcntlSignalListener::class)
72
            ->shouldBeCalled()
73
            ->willReturn($this->getListeners()['event2']);
74
        $container->get(SendFailedMessageForRetryListener::class)
75
            ->shouldBeCalled()
76
            ->willReturn($this->getListeners()['event3']);
77
78
        $container->get(SendFailedMessageToFailureTransportListener::class)
79
            ->shouldNotBeCalled();
80
81
        $factory = new EventDispatcherFactory();
82
83
        $instance = $factory($container->reveal());
84
85
        $this->assertCount(3, $instance->getListeners());
86
    }
87
88
    public function testFactoryWithFailureTransport(): void
89
    {
90
        $container = $this->prophesize(ContainerInterface::class);
91
92
        $container->has('config')->willReturn(true);
93
        $container->get('config')->shouldBeCalled()->willReturn([
94
            'messenger' => [
95
                'failure_transport' => 'failure-transport-name',
96
            ],
97
        ]);
98
99
        $container->get(StopWorkerOnSigtermSignalListener::class)
100
            ->shouldBeCalled()
101
            ->willReturn($this->getListeners()['event1']);
102
        $container->get(DispatchPcntlSignalListener::class)
103
            ->shouldBeCalled()
104
            ->willReturn($this->getListeners()['event2']);
105
        $container->get(SendFailedMessageForRetryListener::class)
106
            ->shouldBeCalled()
107
            ->willReturn($this->getListeners()['event3']);
108
        $container->get(SendFailedMessageToFailureTransportListener::class)
109
            ->shouldBeCalled()
110
            ->willReturn($this->getListeners()['event4']);
111
112
        $factory = new EventDispatcherFactory();
113
114
        $instance = $factory($container->reveal());
115
116
        $this->assertCount(4, $instance->getListeners());
117
    }
118
119
    public function testFactoryWithStopWorkerListener(): void
120
    {
121
        $container = $this->prophesize(ContainerInterface::class);
122
123
        $container->has('config')->willReturn(true);
124
        $container->get('config')->shouldBeCalled()->willReturn([
125
            'messenger' => [
126
                'cache_pool_for_restart_signal' => 'cache-service',
127
            ],
128
        ]);
129
130
        $container->get(StopWorkerOnSigtermSignalListener::class)
131
            ->shouldBeCalled()
132
            ->willReturn($this->getListeners()['event1']);
133
        $container->get(DispatchPcntlSignalListener::class)
134
            ->shouldBeCalled()
135
            ->willReturn($this->getListeners()['event2']);
136
        $container->get(SendFailedMessageForRetryListener::class)
137
            ->shouldBeCalled()
138
            ->willReturn($this->getListeners()['event3']);
139
        $container->get(StopWorkerOnRestartSignalListener::class)
140
            ->shouldBeCalled()
141
            ->willReturn($this->getListeners()['event4']);
142
143
        $factory = new EventDispatcherFactory();
144
145
        $instance = $factory($container->reveal());
146
147
        $this->assertCount(4, $instance->getListeners());
148
    }
149
}
150