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

MessageBusFactoryTest::testFactoryWithNoDefaultMiddlewares()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 35

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 35
rs 9.36
c 0
b 0
f 0
cc 1
nc 1
nop 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\EventDispatcherInterface;
11
use Symfony\Component\Messenger\MessageBus;
12
use Symfony\Component\Messenger\Middleware\MiddlewareInterface;
13
use TMV\Laminas\Messenger\Exception\InvalidArgumentException;
14
use TMV\Laminas\Messenger\Factory\MessageBusFactory;
15
16
class MessageBusFactoryTest extends TestCase
17
{
18
    use ProphecyTrait;
19
20
    public function testFactory(): void
21
    {
22
        $container = $this->prophesize(ContainerInterface::class);
23
        $container->has('config')->willReturn(true);
24
        $container->get('config')->willReturn([
25
            'messenger' => [
26
                'event_dispatcher' => 'messenger.event_dispatcher',
27
                'buses' => [
28
                    'bus_name' => [
29
                        'middleware' => [
30
                            'middleware_name',
31
                        ],
32
                    ],
33
                ],
34
            ],
35
        ]);
36
37
        $eventDispatcher = $this->prophesize(EventDispatcherInterface::class);
38
        $middleware = $this->prophesize(MiddlewareInterface::class);
39
40
        $container->get('messenger.event_dispatcher')
41
            ->shouldBeCalled()
42
            ->willReturn($eventDispatcher->reveal());
43
44
        $container->get('middleware_name')
45
            ->shouldBeCalled()
46
            ->willReturn($middleware->reveal());
47
48
        $factory = [MessageBusFactory::class, 'bus_name'];
49
        /** @var MessageBus $service */
50
        $service = $factory($container->reveal());
51
52
        $this->assertInstanceOf(MessageBus::class, $service);
53
    }
54
55
    public function testFactoryWithNoDefaultMiddlewares(): void
56
    {
57
        $container = $this->prophesize(ContainerInterface::class);
58
        $container->has('config')->willReturn(true);
59
        $container->get('config')->willReturn([
60
            'messenger' => [
61
                'event_dispatcher' => 'messenger.event_dispatcher',
62
                'buses' => [
63
                    'bus_name' => [
64
                        'default_middleware' => false,
65
                        'middleware' => [
66
                            'middleware_name',
67
                        ],
68
                    ],
69
                ],
70
            ],
71
        ]);
72
73
        $eventDispatcher = $this->prophesize(EventDispatcherInterface::class);
74
        $middleware = $this->prophesize(MiddlewareInterface::class);
75
76
        $container->get('messenger.event_dispatcher')
77
            ->shouldNotBeCalled()
78
            ->willReturn($eventDispatcher->reveal());
79
80
        $container->get('middleware_name')
81
            ->shouldBeCalled()
82
            ->willReturn($middleware->reveal());
83
84
        $factory = [MessageBusFactory::class, 'bus_name'];
85
        /** @var MessageBus $service */
86
        $service = $factory($container->reveal());
87
88
        $this->assertInstanceOf(MessageBus::class, $service);
89
    }
90
91
    public function testInvalidCall(): void
92
    {
93
        $this->expectException(InvalidArgumentException::class);
94
95
        $factory = [MessageBusFactory::class, 'foo'];
96
        $factory('foo');
97
    }
98
}
99