Passed
Push — master ( 3d65e1...7ada39 )
by Peter
03:24
created

UserLanguageSqlDataMapperTest::testDelete()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 19
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 13
dl 0
loc 19
rs 9.8333
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace AbterPhp\Admin\Orm\DataMappers;
6
7
use AbterPhp\Admin\Domain\Entities\UserLanguage;
8
use AbterPhp\Admin\TestCase\Orm\DataMapperTestCase;
9
use AbterPhp\Framework\Domain\Entities\IStringerEntity;
10
use AbterPhp\Framework\TestDouble\Database\MockStatementFactory;
11
use PHPUnit\Framework\MockObject\MockObject;
12
13
class UserLanguageSqlDataMapperTest extends DataMapperTestCase
14
{
15
    /** @var UserLanguageSqlDataMapper */
16
    protected $sut;
17
18
    public function setUp(): void
19
    {
20
        parent::setUp();
21
22
        $this->sut = new UserLanguageSqlDataMapper($this->readConnectionMock, $this->writeConnectionMock);
23
    }
24
25
    public function testAdd()
26
    {
27
        $nextId     = '9b6ae58b-1aff-4344-a2ae-cda43a40674e';
28
        $identifier = 'foo';
29
        $name       = 'Foo';
30
31
        $sql0       = 'INSERT INTO user_languages (id, identifier, name) VALUES (?, ?, ?)'; // phpcs:ignore
32
        $values     = [[$nextId, \PDO::PARAM_STR], [$identifier, \PDO::PARAM_STR], [$name, \PDO::PARAM_STR]];
33
        $statement0 = MockStatementFactory::createWriteStatement($this, $values);
34
35
        $this->writeConnectionMock
36
            ->expects($this->once())
37
            ->method('prepare')
38
            ->with($sql0)
39
            ->willReturn($statement0);
40
41
        $entity = new UserLanguage($nextId, $identifier, $name);
42
43
        $this->sut->add($entity);
44
45
        $this->assertSame($nextId, $entity->getId());
46
    }
47
48
    public function testDelete()
49
    {
50
        $id         = '8fe2f659-dbe5-4995-9e07-f49fb018cfe7';
51
        $identifier = 'foo';
52
        $name       = 'Foo';
53
54
        $sql0       = 'UPDATE user_languages AS user_languages SET deleted_at = NOW() WHERE (id = ?)'; // phpcs:ignore
55
        $values     = [[$id, \PDO::PARAM_STR]];
56
        $statement0 = MockStatementFactory::createWriteStatement($this, $values);
57
58
        $this->writeConnectionMock
59
            ->expects($this->once())
60
            ->method('prepare')
61
            ->with($sql0)
62
            ->willReturn($statement0);
63
64
        $entity = new UserLanguage($id, $identifier, $name);
65
66
        $this->sut->delete($entity);
67
    }
68
69
    public function testGetAll()
70
    {
71
        $id0         = '24bd4165-1229-4a6e-a679-76bf90743ee1';
72
        $identifier0 = 'foo';
73
        $name0       = 'Foo';
74
        $id1         = '51eac0fc-2b26-4231-9559-469e59fae694';
75
        $identifier1 = 'bar';
76
        $name1       = 'Bar';
77
78
        $sql0         = 'SELECT user_languages.id, user_languages.identifier, user_languages.name FROM user_languages WHERE (user_languages.deleted_at IS NULL)'; // phpcs:ignore
79
        $values       = [];
80
        $expectedData = [
81
            ['id' => $id0, 'identifier' => $identifier0, 'name' => $name0],
82
            ['id' => $id1, 'identifier' => $identifier1, 'name' => $name1],
83
        ];
84
        $statement0   = MockStatementFactory::createReadStatement($this, $values, $expectedData);
85
86
        $this->readConnectionMock
87
            ->expects($this->once())
88
            ->method('prepare')
89
            ->with($sql0)
90
            ->willReturn($statement0);
91
92
        $actualResult = $this->sut->getAll();
93
94
        $this->assertCollection($expectedData, $actualResult);
95
    }
96
97
    public function testGetPageWithOrdersAndConditions()
98
    {
99
        $id0         = '24bd4165-1229-4a6e-a679-76bf90743ee1';
100
        $identifier0 = 'foo';
101
        $name0       = 'Foo';
102
        $id1         = '51eac0fc-2b26-4231-9559-469e59fae694';
103
        $identifier1 = 'bar';
104
        $name1       = 'Bar';
105
106
        $orders     = ['ac.description ASC'];
107
        $conditions = ['ac.description LIKE \'abc%\'', 'abc.description LIKE \'%bca\''];
108
109
        $sql0         = 'SELECT SQL_CALC_FOUND_ROWS user_languages.id, user_languages.identifier, user_languages.name FROM user_languages WHERE (user_languages.deleted_at IS NULL) AND (ac.description LIKE \'abc%\') AND (abc.description LIKE \'%bca\') ORDER BY ac.description ASC LIMIT 10 OFFSET 0'; // phpcs:ignore
110
        $values       = [];
111
        $expectedData = [
112
            ['id' => $id0, 'identifier' => $identifier0, 'name' => $name0],
113
            ['id' => $id1, 'identifier' => $identifier1, 'name' => $name1],
114
        ];
115
        $statement0   = MockStatementFactory::createReadStatement($this, $values, $expectedData);
116
117
        $this->readConnectionMock
118
            ->expects($this->once())
119
            ->method('prepare')
120
            ->with($sql0)
121
            ->willReturn($statement0);
122
123
        $actualResult = $this->sut->getPage(0, 10, $orders, $conditions, []);
124
125
        $this->assertCollection($expectedData, $actualResult);
126
    }
127
128
    public function testGetById()
129
    {
130
        $id         = '24bd4165-1229-4a6e-a679-76bf90743ee1';
131
        $identifier = 'foo';
132
        $name       = 'Foo';
133
134
        $sql0         = 'SELECT user_languages.id, user_languages.identifier, user_languages.name FROM user_languages WHERE (user_languages.deleted_at IS NULL) AND (user_languages.id = :user_language_id)'; // phpcs:ignore
135
        $values       = ['user_language_id' => [$id, \PDO::PARAM_STR]];
136
        $expectedData = [['id' => $id, 'identifier' => $identifier, 'name' => $name]];
137
        $statement0   = MockStatementFactory::createReadStatement($this, $values, $expectedData);
138
139
        $this->readConnectionMock
140
            ->expects($this->once())
141
            ->method('prepare')
142
            ->with($sql0)
143
            ->willReturn($statement0);
144
145
        $actualResult = $this->sut->getById($id);
146
147
        $this->assertEntity($expectedData[0], $actualResult);
148
    }
149
150
    public function testGetByIdentifier()
151
    {
152
        $id         = '24bd4165-1229-4a6e-a679-76bf90743ee1';
153
        $identifier = 'foo';
154
        $name       = 'Foo';
155
156
        $sql0         = 'SELECT user_languages.id, user_languages.identifier, user_languages.name FROM user_languages WHERE (user_languages.deleted_at IS NULL) AND (identifier = :identifier)'; // phpcs:ignore
157
        $values       = ['identifier' => [$identifier, \PDO::PARAM_STR]];
158
        $expectedData = [['id' => $id, 'identifier' => $identifier, 'name' => $name]];
159
        $statement0   = MockStatementFactory::createReadStatement($this, $values, $expectedData);
160
161
        $this->readConnectionMock
162
            ->expects($this->once())
163
            ->method('prepare')
164
            ->with($sql0)
165
            ->willReturn($statement0);
166
167
        $actualResult = $this->sut->getByIdentifier($identifier);
168
169
        $this->assertEntity($expectedData[0], $actualResult);
170
    }
171
172
    public function testUpdate()
173
    {
174
        $id         = '24bd4165-1229-4a6e-a679-76bf90743ee1';
175
        $identifier = 'foo';
176
        $name       = 'Foo';
177
178
        $sql0       = 'UPDATE user_languages AS user_languages SET identifier = ?, name = ? WHERE (id = ?) AND (deleted_at IS NULL)'; // phpcs:ignore
179
        $values     = [[$identifier, \PDO::PARAM_STR], [$name, \PDO::PARAM_STR], [$id, \PDO::PARAM_STR]];
180
        $statement0 = MockStatementFactory::createWriteStatement($this, $values);
181
182
        $this->writeConnectionMock
183
            ->expects($this->once())
184
            ->method('prepare')
185
            ->with($sql0)
186
            ->willReturn($statement0);
187
188
        $entity = new UserLanguage($id, $identifier, $name);
189
190
        $this->sut->update($entity);
191
    }
192
193
    public function testAddThrowsExceptionIfCalledWithInvalidEntity()
194
    {
195
        $this->expectException(\InvalidArgumentException::class);
196
197
        /** @var IStringerEntity|MockObject $entity */
198
        $entity = $this->createMock(IStringerEntity::class);
199
200
        $this->sut->add($entity);
201
    }
202
203
    public function testDeleteThrowsExceptionIfCalledWithInvalidEntity()
204
    {
205
        $this->expectException(\InvalidArgumentException::class);
206
207
        /** @var IStringerEntity|MockObject $entity */
208
        $entity = $this->createMock(IStringerEntity::class);
209
210
        $this->sut->delete($entity);
211
    }
212
213
    public function testUpdateThrowsExceptionIfCalledWithInvalidEntity()
214
    {
215
        $this->expectException(\InvalidArgumentException::class);
216
217
        /** @var IStringerEntity|MockObject $entity */
218
        $entity = $this->createMock(IStringerEntity::class);
219
220
        $this->sut->update($entity);
221
    }
222
223
    /**
224
     * @param array        $expectedData
225
     * @param UserLanguage $entity
226
     */
227
    protected function assertEntity(array $expectedData, $entity)
228
    {
229
        $this->assertInstanceOf(UserLanguage::class, $entity);
230
    }
231
}
232