Completed
Push — master ( 705382...26033e )
by Tomasz
02:41
created

MultipleQueueManagerTest::testRegexpCommandRoute()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 16
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 15
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 16
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 1
    public function testNoPool()
22
    {
23 1
        $this->setExpectedException(RuntimeException::class);
24 1
        $manager = new MultipleQueueManager();
25 1
        $manager->sendCommand($this->getMockBuilder(CommandInterface::class)->getMock());
26
    }
27
    
28 1
    public function testDefaultPool()
29
    {
30 1
        $command = new DummyCommand();
31 1
        $sendDriver = $this->getMockBuilder(SendDriverInterface::class)->getMock();
32 1
        $sendDriver->expects($this->once())
33 1
            ->method('send')
34 1
            ->with($command);
35 1
        $manager = new MultipleQueueManager();
36 1
        $manager->addSendDriver('default', $sendDriver, true);
37 1
        $manager->sendCommand($command);
38 1
    }
39
    
40 1
    public function testSimpleCommandRoute()
41
    {
42 1
        $command = new DummyCommand();
43 1
        $sendDriver1 = $this->getMockBuilder(SendDriverInterface::class)->getMock();
44 1
        $sendDriver1->expects($this->never())
45 1
            ->method('send');
46 1
        $sendDriver2 = $this->getMockBuilder(SendDriverInterface::class)->getMock();
47 1
        $sendDriver2->expects($this->once())
48 1
            ->method('send')
49 1
            ->with($command);
50 1
        $manager = new MultipleQueueManager();
51 1
        $manager->addSendDriver('default', $sendDriver1, true);
52 1
        $manager->addSendDriver('manager2', $sendDriver2);
53 1
        $manager->addCommandRoute(get_class($command), 'manager2');
54 1
        $manager->sendCommand($command);
55 1
    }
56
    
57 1
    public function testRegexpCommandRoute()
58
    {
59 1
        $command = new DummyCommand();
60 1
        $sendDriver1 = $this->getMockBuilder(SendDriverInterface::class)->getMock();
61 1
        $sendDriver1->expects($this->never())
62 1
            ->method('send');
63 1
        $sendDriver2 = $this->getMockBuilder(SendDriverInterface::class)->getMock();
64 1
        $sendDriver2->expects($this->once())
65 1
            ->method('send')
66 1
            ->with($command);
67 1
        $manager = new MultipleQueueManager();
68 1
        $manager->addSendDriver('default', $sendDriver1, true);
69 1
        $manager->addSendDriver('manager2', $sendDriver2);
70 1
        $manager->addCommandRoute(substr(get_class($command), 5).'*', 'manager2');
71 1
        $manager->sendCommand($command);
72 1
    }    
73
    
74 1
    public function testBaseClassCommandRoute()
75
    {
76 1
        $command = new DummyChildCommand();
77 1
        $sendDriver1 = $this->getMockBuilder(SendDriverInterface::class)->getMock();
78 1
        $sendDriver1->expects($this->never())
79 1
            ->method('send')
80
            ;
81 1
        $sendDriver2 = $this->getMockBuilder(SendDriverInterface::class)->getMock();
82 1
        $sendDriver2->expects($this->once())
83 1
            ->method('send')
84 1
            ->with($command);
85 1
        $manager = new MultipleQueueManager();
86 1
        $manager->addSendDriver('default', $sendDriver1, true);
87 1
        $manager->addSendDriver('manager2', $sendDriver2);
88 1
        $manager->addCommandRoute(DummyCommand::class, 'manager2');
89 1
        $manager->sendCommand($command);
90 1
    }    
91
    
92 1
    public function testInterfaceCommandRoute()
93
    {
94 1
        $command = new DummyCommand();
95 1
        $sendDriver1 = $this->getMockBuilder(SendDriverInterface::class)->getMock();
96 1
        $sendDriver1->expects($this->never())
97 1
            ->method('send')
98
            ;
99 1
        $sendDriver2 = $this->getMockBuilder(SendDriverInterface::class)->getMock();
100 1
        $sendDriver2->expects($this->once())
101 1
            ->method('send')
102 1
            ->with($command);
103 1
        $manager = new MultipleQueueManager();
104 1
        $manager->addSendDriver('default', $sendDriver1, true);
105 1
        $manager->addSendDriver('manager2', $sendDriver2);
106 1
        $manager->addCommandRoute(CommandInterface::class, 'manager2');
107 1
        $manager->sendCommand($command);
108 1
    }
109
    
110 1
    public function testBaseClassPrecedenceOverInterface()
111
    {
112 1
        $command = new DummyChildCommand();
113 1
        $sendDriver1 = $this->getMockBuilder(SendDriverInterface::class)->getMock();
114 1
        $sendDriver1->expects($this->never())
115 1
            ->method('send')
116
            ;
117 1
        $sendDriver2 = $this->getMockBuilder(SendDriverInterface::class)->getMock();
118 1
        $sendDriver2->expects($this->once())
119 1
            ->method('send')
120 1
            ->with($command);
121 1
        $sendDriver3 = $this->getMockBuilder(SendDriverInterface::class)->getMock();
122 1
        $sendDriver3->expects($this->never())
123 1
            ->method('send')
124
            ;
125 1
        $manager = new MultipleQueueManager();
126 1
        $manager->addSendDriver('manager1', $sendDriver1, true);
127 1
        $manager->addSendDriver('manager2', $sendDriver2);
128 1
        $manager->addSendDriver('manager3', $sendDriver3);
129 1
        $manager->addCommandRoute(DummyCommand::class, 'manager2');
130 1
        $manager->addCommandRoute(CommandInterface::class, 'manager3');
131 1
        $manager->sendCommand($command);
132 1
    }
133
    
134 1
    public function testClassInterfacePrecedenceOverBaseClassInterface()
135
    {
136 1
        $command = new DummyChildCommand();
137 1
        $sendDriver1 = $this->getMockBuilder(SendDriverInterface::class)->getMock();
138 1
        $sendDriver1->expects($this->never())
139 1
            ->method('send')
140
            ;
141 1
        $sendDriver2 = $this->getMockBuilder(SendDriverInterface::class)->getMock();
142 1
        $sendDriver2->expects($this->once())
143 1
            ->method('send')
144 1
            ->with($command);
145 1
        $sendDriver3 = $this->getMockBuilder(SendDriverInterface::class)->getMock();
146 1
        $sendDriver3->expects($this->never())
147 1
            ->method('send')
148
            ;
149 1
        $manager = new MultipleQueueManager();
150 1
        $manager->addSendDriver('manager1', $sendDriver1, true);
151 1
        $manager->addSendDriver('manager2', $sendDriver2);
152 1
        $manager->addSendDriver('manager3', $sendDriver3);
153 1
        $manager->addCommandRoute(Fixtures\DummyChildInterface::class, 'manager2');
154 1
        $manager->addCommandRoute(Fixtures\DummyInterface::class, 'manager3');
155 1
        $manager->sendCommand($command);
156 1
    }    
157
}
158