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

DirectProcessingDriverTest::testSendProcessorException()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 26
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 22
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 26
c 0
b 0
f 0
ccs 22
cts 22
cp 1
rs 8.8571
cc 1
eloc 21
nc 1
nop 0
crap 1
1
<?php
2
3
namespace Gendoria\CommandQueue\Tests;
4
5
use Exception;
6
use Gendoria\CommandQueue\Command\CommandInterface;
7
use Gendoria\CommandQueue\CommandProcessor\CommandProcessorInterface;
8
use Gendoria\CommandQueue\ProcessorFactory;
9
use Gendoria\CommandQueue\ProcessorNotFoundException;
10
use Gendoria\CommandQueue\SendDriver\DirectProcessingDriver;
11
use PHPUnit_Framework_TestCase;
12
use Psr\Log\LoggerInterface;
13
14
/**
15
 * Description of DirectProcessingDriverTest
16
 *
17
 * @author Tomasz Struczyński <[email protected]>
18
 * @group CommandQueue
19
 */
20
class DirectProcessingDriverTest extends PHPUnit_Framework_TestCase
21
{
22
    public function testSend()
23
    {
24
        $command = $this->getMockBuilder(CommandInterface::class)->getMock();
25
        $service = $this->getMockBuilder(CommandProcessorInterface::class)->getMock();
26
        $service->expects($this->any())
27
            ->method('supports')
28
            ->with($command)
29
            ->will($this->returnValue(true));
30
        
31
        $logger = $this->getMockBuilder(LoggerInterface::class)->getMock();
32
        $logger->expects($this->never())
33
            ->method('error');
34
        $processorFactory = new ProcessorFactory();
35
        $processorFactory->registerProcessorForCommand(get_class($command), $service);
36
        $driver = new DirectProcessingDriver();
37
        $driver->setProcessorFactory($processorFactory);
38
        $driver->setLogger($logger);
39
        
40
        $driver->send($command);
41
    }
42
    
43
    public function testSendNoProcessor()
44
    {
45
        $command = $this->getMockBuilder(CommandInterface::class)->getMock();
46
        $logger = $this->getMockBuilder(LoggerInterface::class)->getMock();
47
        $logger->expects($this->once())
48
            ->method('error')
49
            ->with('Exception while sending command: No processor registered for given command class: '.get_class($command));
50
        
51
        $processorFactory = new ProcessorFactory();
52
        $driver = new DirectProcessingDriver();
53
        $driver->setProcessorFactory($processorFactory);
54
        $driver->setLogger($logger);
55
        
56
        $driver->send($command);
57
    }    
58
    
59
    public function testSendProcessorException()
60
    {
61
        $command = $this->getMockBuilder(CommandInterface::class)->getMock();
62
        $service = $this->getMockBuilder(CommandProcessorInterface::class)->getMock();
63
        $service->expects($this->any())
64
            ->method('supports')
65
            ->with($command)
66
            ->will($this->returnValue(true));
67
        
68
        $logger = $this->getMockBuilder(LoggerInterface::class)->getMock();
69
        $logger->expects($this->once())
70
            ->method('error')
71
            ->with('Exception while sending command: Dummy exception');
72
        $service->expects($this->once())
73
            ->method('process')
74
            ->with($command)
75
            ->willThrowException(new Exception("Dummy exception"));
76
            ;
77
        $processorFactory = new ProcessorFactory();
78
        $processorFactory->registerProcessorForCommand(get_class($command), $service);
79
        $driver = new DirectProcessingDriver();
80
        $driver->setProcessorFactory($processorFactory);
81
        $driver->setLogger($logger);
82
        
83
        $driver->send($command);
84
    }    
85
    
86
    public function testNoProcessor()
87
    {
88
        $this->setExpectedException(ProcessorNotFoundException::class);
89
        $processorFactory = new ProcessorFactory();
90
        $driver = new DirectProcessingDriver();
91
        $driver->setProcessorFactory($processorFactory);
92
        $command = $this->getMockBuilder(CommandInterface::class)->getMock();
93
        
94
        $driver->process($command);
95
    }    
96
}
97