Completed
Push — master ( 15e155...5cbb35 )
by Tomasz
02:52
created

RouteDetectorTest::testMultipleTimesSameRoute()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 8
rs 9.4285
cc 1
eloc 6
nc 1
nop 0
1
<?php
2
3
namespace Gendoria\CommandQueue\Tests\RouteDetection;
4
5
use Gendoria\CommandQueue\RouteDetection\Detector\RouteDetector;
6
use Gendoria\CommandQueue\Tests\RouteDetection\Fixtures\DummyBaseClass;
7
use Gendoria\CommandQueue\Tests\RouteDetection\Fixtures\DummyChildClass;
8
use Gendoria\CommandQueue\Tests\RouteDetection\Fixtures\DummyChildInterface;
9
use Gendoria\CommandQueue\Tests\RouteDetection\Fixtures\DummyClass;
10
use Gendoria\CommandQueue\Tests\RouteDetection\Fixtures\DummyInterface;
11
use InvalidArgumentException;
12
use PHPUnit_Framework_TestCase;
13
14
/**
15
 * Description of RouteDetectorTest.
16
 *
17
 * @author Tomasz Struczyński <[email protected]>
18
 * @group RouteDetection
19
 */
20
class RouteDetectorTest extends PHPUnit_Framework_TestCase
21
{
22
    public function testExceptionForNonClass()
23
    {
24
        $this->setExpectedException(InvalidArgumentException::class);
25
        $detector = new RouteDetector();
26
        $detector->detect('notaclass');
27
    }
28
29
    public function testDefaultRoute()
30
    {
31
        $detector = new RouteDetector();
32
        $detector->setDefault('test');
33
        $this->assertEquals('test', $detector->detect(DummyClass::class));
34
    }
35
36
    public function testSimpleRoute()
37
    {
38
        $detector = new RouteDetector();
39
        $detector->setDefault('default');
40
        $detector->addRoute(DummyClass::class, 'test');
41
        $this->assertEquals('test', $detector->detect(DummyClass::class));
42
    }
43
    
44
    public function testMultipleTimesSameRoute()
45
    {
46
        $detector = new RouteDetector();
47
        $detector->setDefault('default');
48
        $detector->addRoute(DummyClass::class, 'test');
49
        $this->assertFalse($detector->addRoute(DummyClass::class, 'test'));
50
        $this->assertEquals('test', $detector->detect(DummyClass::class));
51
    }
52
53
    public function testRegexpRoute()
54
    {
55
        $detector = new RouteDetector();
56
        $detector->setDefault('default');
57
        $detector->addRoute(substr(DummyClass::class, 5).'*', 'test');
58
        $this->assertEquals('test', $detector->detect(DummyClass::class));
59
    }
60
61
    public function testBaseClassRoute()
62
    {
63
        $detector = new RouteDetector();
64
        $detector->setDefault('default');
65
        $detector->addRoute(DummyClass::class, 'test');
66
        $this->assertEquals('test', $detector->detect(DummyChildClass::class));
67
    }
68
69
    public function testClassRoutePrecedenceOverBaseClassRoute()
70
    {
71
        $detector = new RouteDetector();
72
        $detector->setDefault('default');
73
        $detector->addRoute(DummyClass::class, 'test2');
74
        $detector->addRoute(DummyChildClass::class, 'test');
75
        $this->assertEquals('test', $detector->detect(DummyChildClass::class));
76
    }
77
78
    public function testInterfaceRoute()
79
    {
80
        $detector = new RouteDetector();
81
        $detector->setDefault('default');
82
        $detector->addRoute(DummyChildInterface::class, 'test');
83
        $this->assertEquals('test', $detector->detect(DummyChildClass::class));
84
    }
85
86
    public function testBaseClassInterfaceRoute()
87
    {
88
        $detector = new RouteDetector();
89
        $detector->setDefault('default');
90
        $detector->addRoute(DummyInterface::class, 'test');
91
        $this->assertEquals('test', $detector->detect(DummyChildClass::class));
92
    }
93
94
    public function testBaseClassPrecedenceOverInterface()
95
    {
96
        $detector = new RouteDetector();
97
        $detector->setDefault('default');
98
        $detector->addRoute(DummyInterface::class, 'test2');
99
        $detector->addRoute(DummyClass::class, 'test');
100
        $this->assertEquals('test', $detector->detect(DummyChildClass::class));
101
    }
102
103
    public function testClassInterfacePrecedenceOverBaseClassInterface()
104
    {
105
        $detector = new RouteDetector();
106
        $detector->setDefault('default');
107
        $detector->addRoute(DummyChildInterface::class, 'test');
108
        $detector->addRoute(DummyInterface::class, 'test2');
109
        $this->assertEquals('test', $detector->detect(DummyChildClass::class));
110
    }
111
    
112
    public function testInterfaceDetectionOnClassWithoutInterfaces()
113
    {
114
        $detector = new RouteDetector();
115
        $detector->setDefault('default');
116
        $this->assertEquals('default', $detector->detect(DummyBaseClass::class));
117
    }    
118
}
119