Completed
Push — master ( 5cbb35...7c6931 )
by Tomasz
02:28
created

MultipleQueueManagerTest::testInterfaceCommandRoute()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 17
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 15
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 17
c 0
b 0
f 0
ccs 15
cts 15
cp 1
rs 9.4285
cc 1
eloc 14
nc 1
nop 0
crap 1
1
<?php
2
3
namespace Gendoria\CommandQueue\Tests;
4
5
use Gendoria\CommandQueue\Command\CommandInterface;
6
use Gendoria\CommandQueue\QueueManager\MultipleQueueManager;
7
use Gendoria\CommandQueue\SendDriver\SendDriverInterface;
8
use Gendoria\CommandQueue\Tests\Fixtures\DummyChildCommand;
9
use Gendoria\CommandQueue\Tests\Fixtures\DummyCommand;
10
use PHPUnit_Framework_TestCase;
11
use RuntimeException;
12
13
/**
14
 * Description of MultipleQueueManagerTest
15
 *
16
 * @author Tomasz Struczyński <[email protected]>
17
 * @group CommandQueue
18
 */
19
class MultipleQueueManagerTest extends PHPUnit_Framework_TestCase
20
{
21
    public function testNoPool()
22
    {
23
        $this->setExpectedException(RuntimeException::class);
24
        $manager = new MultipleQueueManager();
25
        $manager->sendCommand($this->getMockBuilder(CommandInterface::class)->getMock());
26
    }
27
    
28
    public function testDefaultPool()
29
    {
30
        $command = new DummyCommand();
31
        $sendDriver = $this->getMockBuilder(SendDriverInterface::class)->getMock();
32
        $sendDriver->expects($this->once())
33
            ->method('send')
34
            ->with($command);
35
        $manager = new MultipleQueueManager();
36
        $manager->addSendDriver('default', $sendDriver, true);
37
        $manager->sendCommand($command);
38
    }
39
    
40
    public function testSimpleCommandRoute()
41
    {
42
        $command = new DummyCommand();
43
        $sendDriver1 = $this->getMockBuilder(SendDriverInterface::class)->getMock();
44
        $sendDriver1->expects($this->never())
45
            ->method('send');
46
        $sendDriver2 = $this->getMockBuilder(SendDriverInterface::class)->getMock();
47
        $sendDriver2->expects($this->once())
48
            ->method('send')
49
            ->with($command);
50
        $manager = new MultipleQueueManager();
51
        $manager->addSendDriver('default', $sendDriver1, true);
52
        $manager->addSendDriver('manager2', $sendDriver2);
53
        $manager->addCommandRoute(get_class($command), 'manager2');
54
        $manager->sendCommand($command);
55
    }
56
    
57
    public function testRegexpCommandRoute()
58
    {
59
        $command = new DummyCommand();
60
        $sendDriver1 = $this->getMockBuilder(SendDriverInterface::class)->getMock();
61
        $sendDriver1->expects($this->never())
62
            ->method('send');
63
        $sendDriver2 = $this->getMockBuilder(SendDriverInterface::class)->getMock();
64
        $sendDriver2->expects($this->once())
65
            ->method('send')
66
            ->with($command);
67
        $manager = new MultipleQueueManager();
68
        $manager->addSendDriver('default', $sendDriver1, true);
69
        $manager->addSendDriver('manager2', $sendDriver2);
70
        $manager->addCommandRoute(substr(get_class($command), 5).'*', 'manager2');
71
        $manager->sendCommand($command);
72
    }    
73
    
74
    public function testBaseClassCommandRoute()
75
    {
76
        $command = new DummyChildCommand();
77
        $sendDriver1 = $this->getMockBuilder(SendDriverInterface::class)->getMock();
78
        $sendDriver1->expects($this->never())
79
            ->method('send')
80
            ;
81
        $sendDriver2 = $this->getMockBuilder(SendDriverInterface::class)->getMock();
82
        $sendDriver2->expects($this->once())
83
            ->method('send')
84
            ->with($command);
85
        $manager = new MultipleQueueManager();
86
        $manager->addSendDriver('default', $sendDriver1, true);
87
        $manager->addSendDriver('manager2', $sendDriver2);
88
        $manager->addCommandRoute(DummyCommand::class, 'manager2');
89
        $manager->sendCommand($command);
90
    }    
91
    
92
    public function testInterfaceCommandRoute()
93
    {
94
        $command = new DummyCommand();
95
        $sendDriver1 = $this->getMockBuilder(SendDriverInterface::class)->getMock();
96
        $sendDriver1->expects($this->never())
97
            ->method('send')
98
            ;
99
        $sendDriver2 = $this->getMockBuilder(SendDriverInterface::class)->getMock();
100
        $sendDriver2->expects($this->once())
101
            ->method('send')
102
            ->with($command);
103
        $manager = new MultipleQueueManager();
104
        $manager->addSendDriver('default', $sendDriver1, true);
105
        $manager->addSendDriver('manager2', $sendDriver2);
106
        $manager->addCommandRoute(CommandInterface::class, 'manager2');
107
        $manager->sendCommand($command);
108
    }
109
    
110
    public function testBaseClassPrecedenceOverInterface()
111
    {
112
        $command = new DummyChildCommand();
113
        $sendDriver1 = $this->getMockBuilder(SendDriverInterface::class)->getMock();
114
        $sendDriver1->expects($this->never())
115
            ->method('send')
116
            ;
117
        $sendDriver2 = $this->getMockBuilder(SendDriverInterface::class)->getMock();
118
        $sendDriver2->expects($this->once())
119
            ->method('send')
120
            ->with($command);
121
        $sendDriver3 = $this->getMockBuilder(SendDriverInterface::class)->getMock();
122
        $sendDriver3->expects($this->never())
123
            ->method('send')
124
            ;
125
        $manager = new MultipleQueueManager();
126
        $manager->addSendDriver('manager1', $sendDriver1, true);
127
        $manager->addSendDriver('manager2', $sendDriver2);
128
        $manager->addSendDriver('manager3', $sendDriver3);
129
        $manager->addCommandRoute(DummyCommand::class, 'manager2');
130
        $manager->addCommandRoute(CommandInterface::class, 'manager3');
131
        $manager->sendCommand($command);
132
    }
133
    
134
    public function testClassInterfacePrecedenceOverBaseClassInterface()
135
    {
136
        $command = new DummyChildCommand();
137
        $sendDriver1 = $this->getMockBuilder(SendDriverInterface::class)->getMock();
138
        $sendDriver1->expects($this->never())
139
            ->method('send')
140
            ;
141
        $sendDriver2 = $this->getMockBuilder(SendDriverInterface::class)->getMock();
142
        $sendDriver2->expects($this->once())
143
            ->method('send')
144
            ->with($command);
145
        $sendDriver3 = $this->getMockBuilder(SendDriverInterface::class)->getMock();
146
        $sendDriver3->expects($this->never())
147
            ->method('send')
148
            ;
149
        $manager = new MultipleQueueManager();
150
        $manager->addSendDriver('manager1', $sendDriver1, true);
151
        $manager->addSendDriver('manager2', $sendDriver2);
152
        $manager->addSendDriver('manager3', $sendDriver3);
153
        $manager->addCommandRoute(Fixtures\DummyChildInterface::class, 'manager2');
154
        $manager->addCommandRoute(Fixtures\DummyInterface::class, 'manager3');
155
        $manager->sendCommand($command);
156
    }    
157
}
158