ProviderTest   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 140
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 7
eloc 48
dl 0
loc 140
rs 10
c 0
b 0
f 0

20 Methods

Rating   Name   Duplication   Size   Complexity  
testBadProperty() 0 3 ?
A testNotFound() 0 3 1
A testToId() 0 6 1
testFindAll() 0 13 ?
A testFindReturnsSameInstance() 0 6 1
testBadClass() 0 3 ?
testFindIds() 0 5 ?
A hp$0 ➔ testFindAssociative() 0 17 1
A hp$0 ➔ testGetAllTwice() 0 6 1
A hp$0 ➔ testBadClassToId() 0 3 1
A hp$0 ➔ testBadClass() 0 3 1
A hp$0 ➔ testBadProperty() 0 3 1
testGetAllTwice() 0 6 ?
A hp$0 ➔ testFindAll() 0 13 1
testFindAssociative() 0 17 ?
A testBadIdToId() 0 3 1
testBadClassToId() 0 3 ?
A hp$0 ➔ testFindIds() 0 5 1
A testFind() 0 17 1
A testExists() 0 8 1
1
<?php
2
3
namespace Byscripts\StaticEntity\Tests;
4
5
use Byscripts\StaticEntity\Provider;
6
use Byscripts\StaticEntity\Tests\Fixtures\BadClass;
7
use Byscripts\StaticEntity\Tests\Fixtures\BadProperty;
8
use Byscripts\StaticEntity\Tests\Fixtures\Civility;
9
use Byscripts\StaticEntity\Tests\Fixtures\WebBrowser;
10
use PHPUnit\Framework\TestCase;
11
12
/**
13
 * Class ProviderTest
14
 *
15
 * @author Thierry Goettelmann <[email protected]>
16
 */
17
class ProviderTest extends TestCase
18
{
19
    public function testFind()
20
    {
21
        /** @var Civility $civility */
22
        $civility = Provider::get(Civility::class, Civility::MR);
23
24
        /** @var WebBrowser $webBrowser */
25
        $webBrowser = Provider::get(WebBrowser::class, WebBrowser::CHROME);
26
27
        $this->assertInstanceOf(Civility::class, $civility);
28
        $this->assertEquals(Civility::MR, $civility->getId());
29
        $this->assertEquals('Male', $civility->getGender());
30
        $this->assertEquals('Mr.', $civility->getShortName());
31
32
        $this->assertInstanceOf(WebBrowser::class, $webBrowser);
33
        $this->assertEquals(WebBrowser::CHROME, $webBrowser->getId());
34
        $this->assertEquals('Chrome', $webBrowser->getName());
35
        $this->assertEquals('Google', $webBrowser->getVendor());
36
    }
37
38
    /**
39
     * @expectedException \InvalidArgumentException
40
     * @expectedExceptionMessage Unable to find data
41
     */
42
    public function testNotFound()
43
    {
44
        Provider::get(WebBrowser::class, 'bad-id');
45
    }
46
47
    public function testFindReturnsSameInstance()
48
    {
49
        $civility1 = Provider::get(Civility::class, Civility::MR);
50
        $civility2 = Provider::get(Civility::class, Civility::MR);
51
52
        $this->assertSame($civility1, $civility2);
53
    }
54
55
    public function testExists()
56
    {
57
        $this->assertTrue(
58
            Provider::hasId(WebBrowser::class, WebBrowser::CHROME)
59
        );
60
61
        $this->assertFalse(
62
            Provider::hasId(WebBrowser::class, 'bad-id')
63
        );
64
    }
65
66
    public function testToId()
67
    {
68
        $civility = Provider::get(Civility::class, Civility::MR);
69
70
        $this->assertEquals(Civility::MR, Provider::toId(Civility::class, $civility));
71
        $this->assertEquals(Civility::MR, Provider::toId(Civility::class, Civility::MR));
72
    }
73
74
    /**
75
     * @expectedException \InvalidArgumentException
76
     * @expectedExceptionMessage Unable to find ID
77
     */
78
    public function testBadIdToId()
79
    {
80
        Provider::toId(Civility::class, 'bad-id');
81
    }
82
83
    /**
84
     * @expectedException \InvalidArgumentException
85
     * @expectedExceptionMessage does not implement
86
     */
87
    public function testBadClassToId()
88
    {
89
        Provider::toId(Civility::class, new class {});
90
    }
91
92
    public function testFindAll()
93
    {
94
        /** @var $all Civility[] */
95
        $all = Provider::getAll(Civility::class);
96
97
        $this->assertArrayHasKey(Civility::MR, $all);
98
        $this->assertArrayHasKey(Civility::MRS, $all);
99
100
        $this->assertInstanceOf(Civility::class, $all[Civility::MR]);
101
        $this->assertInstanceOf(Civility::class, $all[Civility::MRS]);
102
103
        $this->assertEquals('Male', $all[Civility::MR]->getGender());
104
        $this->assertEquals('Female', $all[Civility::MRS]->getGender());
105
    }
106
107
    public function testGetAllTwice()
108
    {
109
        $all1 = Provider::getAll(Civility::class);
110
        $all2 = Provider::getAll(Civility::class);
111
112
        $this->assertSame($all1, $all2);
113
    }
114
115
    public function testFindAssociative()
116
    {
117
        $associative = Provider::getAssociative(Civility::class, 'gender');
118
119
        $this->assertArrayHasKey(Civility::MR, $associative);
120
        $this->assertArrayHasKey(Civility::MRS, $associative);
121
122
        $this->assertEquals('Male', $associative[Civility::MR]);
123
        $this->assertEquals('Female', $associative[Civility::MRS]);
124
125
        $associative = Provider::getAssociative(Civility::class, 'shortName');
126
127
        $this->assertArrayHasKey(Civility::MR, $associative);
128
        $this->assertArrayHasKey(Civility::MRS, $associative);
129
130
        $this->assertEquals('Mr.', $associative[Civility::MR]);
131
        $this->assertEquals('Mrs', $associative[Civility::MRS]);
132
    }
133
134
    public function testFindIds()
135
    {
136
        $ids = Provider::getIds(Civility::class);
137
138
        $this->assertEquals([Civility::MR, Civility::MRS], $ids);
139
    }
140
141
    /**
142
     * @expectedException \InvalidArgumentException
143
     * @expectedExceptionMessage has no property
144
     */
145
    public function testBadProperty()
146
    {
147
        Provider::getAll(BadProperty::class);
148
    }
149
150
    /**
151
     * @expectedException \InvalidArgumentException
152
     * @expectedExceptionMessage must implements
153
     */
154
    public function testBadClass()
155
    {
156
        Provider::getAll(BadClass::class);
157
    }
158
}
159