Completed
Push — master ( 122dc2...fa7a2a )
by Matthew
09:15
created

RabbitMQCompilerPassTest::setupContainer()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 12
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 12
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 9
nc 1
nop 1
1
<?php
2
3
namespace Dtc\QueueBundle\Tests\DependencyInjection\Compiler;
4
5
use Dtc\QueueBundle\RabbitMQ\JobManager;
6
use Dtc\QueueBundle\DependencyInjection\Compiler\RabbitMQCompilerPass;
7
use PhpAmqpLib\Connection\AMQPSSLConnection;
8
use PhpAmqpLib\Connection\AMQPStreamConnection;
9
use PHPUnit\Framework\TestCase;
10
use Symfony\Component\DependencyInjection\ContainerBuilder;
11
use Symfony\Component\DependencyInjection\Definition;
12
13
class RabbitMQCompilerPassTest extends TestCase
14
{
15
    public function testProcess()
16
    {
17
        $container = new ContainerBuilder();
18
19
        $count = count($container->getDefinitions());
20
        $compilerPass = new RabbitMQCompilerPass();
21
        $compilerPass->process($container);
22
        self::assertEquals($count, count($container->getDefinitions()));
23
24
        $rabbitMQOptions = [
25
            'host' => 'somehost',
26
            'port' => 1234,
27
            'user' => 'asdf',
28
            'password' => 'pass',
29
            'vhost' => 'vhoster',
30
            'queue_args' => [],
31
            'exchange_args' => [],
32
        ];
33
        $container = $this->setupContainer($rabbitMQOptions);
34
35
        self::assertGreaterThan(0, count($container->getDefinitions()));
36
        self::assertTrue($container->hasDefinition('dtc_queue.rabbit_mq'));
37
        self::assertEquals(AMQPStreamConnection::class, $container->getDefinition('dtc_queue.rabbit_mq')->getClass());
38
        self::assertCount(5, $container->getDefinition('dtc_queue.rabbit_mq')->getArguments());
39
40
        $rabbitMQOptions['ssl'] = true;
41
        $container = $this->setupContainer($rabbitMQOptions);
42
        self::assertEquals(AMQPSSLConnection::class, $container->getDefinition('dtc_queue.rabbit_mq')->getClass());
43
        self::assertCount(6, $container->getDefinition('dtc_queue.rabbit_mq')->getArguments());
44
45
        $rabbitMQOptions['ssl_options']['verify_peer'] = false;
46
        $container = $this->setupContainer($rabbitMQOptions);
47
        self::assertEquals(AMQPSSLConnection::class, $container->getDefinition('dtc_queue.rabbit_mq')->getClass());
48
        $arguments = $container->getDefinition('dtc_queue.rabbit_mq')->getArguments();
49
        self::assertCount(6, $arguments);
50
        self::assertArrayHasKey('verify_peer', $arguments[5]);
51
52
        $rabbitMQOptions['options']['insist'] = true;
53
        $container = $this->setupContainer($rabbitMQOptions);
54
        self::assertEquals(AMQPSSLConnection::class, $container->getDefinition('dtc_queue.rabbit_mq')->getClass());
55
        $arguments = $container->getDefinition('dtc_queue.rabbit_mq')->getArguments();
56
        self::assertCount(7, $arguments);
57
        self::assertArrayHasKey('insist', $arguments[6]);
58
59
        $rabbitMQOptions['ssl'] = false;
60
        $container = $this->setupContainer($rabbitMQOptions);
61
        $arguments = $container->getDefinition('dtc_queue.rabbit_mq')->getArguments();
62
        self::assertCount(14, $arguments);
63
        self::assertTrue($arguments[5]);
64
    }
65
66
    public function setupContainer(array $options)
67
    {
68
        $container = new ContainerBuilder();
69
        $container->setParameter('dtc_queue.rabbit_mq', $options);
70
        $definition = new Definition();
71
        $definition->setClass(JobManager::class);
72
        $container->addDefinitions(['dtc_queue.job_manager.rabbit_mq' => $definition]);
73
        $compilerPass = new RabbitMQCompilerPass();
74
        $compilerPass->process($container);
75
76
        return $container;
77
    }
78
}
79