Passed
Pull Request — master (#57)
by Matthew
08:10
created

WorkerCompilerPassTest   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 118
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Importance

Changes 1
Bugs 1 Features 0
Metric Value
wmc 8
lcom 1
cbo 4
dl 0
loc 118
rs 10
c 1
b 1
f 0
1
<?php
2
3
namespace Dtc\QueueBundle\Tests\DependencyInjection\Compiler;
4
5
use Dtc\GridBundle\Manager\GridSourceManager;
6
use Dtc\QueueBundle\DependencyInjection\Compiler\WorkerCompilerPass;
7
use Dtc\QueueBundle\EventDispatcher\EventDispatcher;
8
use Dtc\QueueBundle\Manager\WorkerManager;
9
use Dtc\QueueBundle\ODM\JobManager;
10
use Dtc\QueueBundle\ODM\JobTimingManager;
11
use Dtc\QueueBundle\ODM\LiveJobsGridSource;
12
use Dtc\QueueBundle\ODM\RunManager;
13
use Dtc\QueueBundle\Tests\FibonacciWorker;
14
use PHPUnit\Framework\TestCase;
15
use Symfony\Component\DependencyInjection\ContainerBuilder;
16
use Symfony\Component\DependencyInjection\Definition;
17
18
class WorkerCompilerPassTest extends TestCase
19
{
20
    protected function getBaseContainer($type = 'odm', $runManagerType = 'odm', $jobTimingManagerType = 'odm')
21
    {
22
        $container = new ContainerBuilder();
23
24
        $count = count($container->getDefinitions());
25
        $compilerPass = new WorkerCompilerPass();
26
        $compilerPass->process($container);
27
        self::assertEquals($count, count($container->getDefinitions()));
28
29
        $container = new ContainerBuilder();
30
        $definition1 = new Definition();
31
        $definition1->setClass(WorkerManager::class);
32
        $container->setParameter('dtc_queue.manager.job', $type);
33
        $container->setParameter('dtc_queue.manager.run', $runManagerType);
34
        $container->setParameter('dtc_queue.manager.job_timing', $jobTimingManagerType);
35
        $container->setParameter('dtc_queue.class.job', null);
36
        $container->setParameter('dtc_queue.class.job_archive', null);
37
        $container->setParameter('dtc_queue.odm.document_manager', 'default');
38
        $container->setParameter('dtc_queue.orm.entity_manager', 'default');
39
        $definition2 = new Definition();
40
        $definition2->setClass(JobManager::class);
41
        $definition3 = new Definition();
42
        $definition3->setClass(RunManager::class);
43
        $definition4 = new Definition();
44
        $definition4->setClass(EventDispatcher::class);
45
        $definition5 = new Definition();
46
        $definition5->setClass(JobTimingManager::class);
47
        $definition6 = new Definition();
48
        $definition6->setClass(GridSourceManager::class);
49
        $definition7 = new Definition();
50
        $definition7->setClass(LiveJobsGridSource::class);
51
        $definition8 = new Definition();
52
        $definition8->setClass(LiveJobsGridSource::class);
53
        $container->addDefinitions([
54
            'dtc_queue.manager.worker' => $definition1,
55
            'dtc_queue.manager.job.'.$type => $definition2,
56
            'dtc_queue.manager.job_timing.'.$jobTimingManagerType => $definition5,
57
            'dtc_queue.manager.run.'.$runManagerType => $definition3,
58
            'dtc_queue.event_dispatcher' => $definition4,
59
            'dtc_grid.manager.source' => $definition6,
60
            'dtc_queue.grid_source.jobs_waiting.odm' => $definition7,
61
            'dtc_queue.grid_source.jobs_waiting.orm' => $definition8,
62
            'dtc_queue.grid_source.jobs_running.odm' => $definition7,
63
            'dtc_queue.grid_source.jobs_running.orm' => $definition8,
64
        ]);
65
66
        return $container;
67
    }
68
69
    public function testProcess()
70
    {
71
        $container = $this->getBaseContainer();
72
        $count = count($container->getAliases());
73
        $compilerPass = new WorkerCompilerPass();
74
        $compilerPass->process($container);
75
76
        self::assertNotEquals($count, count($container->getAliases()));
77
    }
78
79
    public function testProcessInvalidWorker()
80
    {
81
        $container = $this->getBaseContainer();
82
        $definition5 = new Definition();
83
        $definition5->setClass(JobManager::class);
84
        $definition5->addTag('dtc_queue.worker');
85
        $container->addDefinitions(['some.worker' => $definition5]);
86
87
        $count = count($container->getAliases());
88
        $compilerPass = new WorkerCompilerPass();
89
        $failed = false;
90
        try {
91
            $compilerPass->process($container);
92
            $failed = true;
93
        } catch (\Exception $e) {
94
            self::assertTrue(true);
95
        }
96
        self::assertFalse($failed);
97
        self::assertNotEquals($count, count($container->getAliases()));
98
    }
99
100
    public function testProcessValidWorker()
101
    {
102
        $this->runProcessValidWorker('odm');
103
        $this->runProcessValidWorker('odm', 'orm', 'orm');
104
        $this->runProcessValidWorker('orm');
105
        $this->runProcessValidWorker('orm', 'odm', 'orm');
106
        $this->runProcessValidWorker('beanstalkd');
107
        $this->runProcessValidWorker('rabbit_mq');
108
        $this->runProcessValidWorker('redis');
109
    }
110
111
    public function testBadManagerType()
112
    {
113
        $failure = false;
114
        try {
115
            $this->runProcessValidWorker('bad');
116
        } catch (\Exception $e) {
117
            $failure = true;
118
        }
119
        self::assertTrue($failure);
120
    }
121
122
    public function runProcessValidWorker($type, $runManagerType = 'odm', $jobTimingManagerType = 'odm')
123
    {
124
        $container = $this->getBaseContainer($type, $runManagerType, $jobTimingManagerType);
125
        $definition5 = new Definition();
126
        $definition5->setClass(FibonacciWorker::class);
127
        $definition5->addTag('dtc_queue.worker');
128
        $container->addDefinitions(['some.worker' => $definition5]);
129
130
        $count = count($container->getAliases());
131
        $compilerPass = new WorkerCompilerPass();
132
        $compilerPass->process($container);
133
        self::assertNotEquals($count, count($container->getAliases()));
134
    }
135
}
136