Completed
Push — master ( 6a9705...322f11 )
by
unknown
27:56
created

PermissionsCriterionHandlerTest::testConstructor()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 17

Duplication

Lines 17
Ratio 100 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 0
dl 17
loc 17
rs 9.7
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * File contains: eZ\Publish\Core\Repository\Tests\Service\Mock\PermissionCriterionHandlerTest class.
5
 *
6
 * @copyright Copyright (C) eZ Systems AS. All rights reserved.
7
 * @license For full copyright and license information view LICENSE file distributed with this source code.
8
 */
9
namespace eZ\Publish\Core\Repository\Tests\Service\Mock;
10
11
use eZ\Publish\Core\Repository\Tests\Service\Mock\Base as BaseServiceMockTest;
12
use eZ\Publish\Core\Repository\PermissionsCriterionHandler;
13
use eZ\Publish\API\Repository\Values\Content\Query\Criterion;
14
use eZ\Publish\API\Repository\PermissionResolver;
15
use eZ\Publish\API\Repository\Values\User\Limitation as APILimitation;
16
use eZ\Publish\Core\Repository\Values\User\Policy;
17
use eZ\Publish\Core\Repository\Helper\LimitationService;
18
19
/**
20
 * Mock test case for PermissionCriterionHandler.
21
 *
22
 * @deprecated
23
 */
24
class PermissionsCriterionHandlerTest extends BaseServiceMockTest
25
{
26
    public function providerForTestAddPermissionsCriterionWithBooleanPermission()
27
    {
28
        return array(
29
            array(true),
30
            array(false),
31
        );
32
    }
33
34
    /**
35
     * Test for the addPermissionsCriterion() method.
36
     *
37
     * @dataProvider providerForTestAddPermissionsCriterionWithBooleanPermission
38
     */
39
    public function testAddPermissionsCriterionWithBooleanPermission($permissionsCriterion)
40
    {
41
        $handler = $this->getPermissionsCriterionHandlerMock(array('getPermissionsCriterion'));
42
        $criterionMock = $this->createMock(Criterion::class);
43
44
        $handler
45
            ->expects($this->once())
46
            ->method('getPermissionsCriterion')
47
            ->will($this->returnValue($permissionsCriterion));
48
49
        /* @var \eZ\Publish\API\Repository\Values\Content\Query\Criterion $criterionMock */
50
        $result = $handler->addPermissionsCriterion($criterionMock);
51
52
        $this->assertSame($permissionsCriterion, $result);
53
    }
54
55
    public function providerForTestAddPermissionsCriterion()
56
    {
57
        $criterionMock = $this->createMock(Criterion::class);
58
59
        return array(
60
            array(
61
                $criterionMock,
62
                new Criterion\LogicalAnd(array()),
63
                new Criterion\LogicalAnd(array($criterionMock)),
64
            ),
65
            array(
66
                $criterionMock,
67
                $criterionMock,
68
                new Criterion\LogicalAnd(array($criterionMock, $criterionMock)),
69
            ),
70
        );
71
    }
72
73
    /**
74
     * Test for the addPermissionsCriterion() method.
75
     *
76
     * @dataProvider providerForTestAddPermissionsCriterion
77
     */
78
    public function testAddPermissionsCriterion($permissionsCriterionMock, $givenCriterion, $expectedCriterion)
79
    {
80
        $handler = $this->getPermissionsCriterionHandlerMock(array('getPermissionsCriterion'));
81
        $handler
82
            ->expects($this->once())
83
            ->method('getPermissionsCriterion')
84
            ->will($this->returnValue($permissionsCriterionMock));
85
86
        /* @var \eZ\Publish\API\Repository\Values\Content\Query\Criterion $criterionMock */
87
        $result = $handler->addPermissionsCriterion($givenCriterion);
88
89
        $this->assertTrue($result);
90
        $this->assertEquals($expectedCriterion, $givenCriterion);
91
    }
92
93
    public function providerForTestGetPermissionsCriterion()
94
    {
95
        $criterionMock = $this->createMock(Criterion::class);
96
        $limitationMock = $this
97
            ->getMockBuilder(APILimitation::class)
98
            ->getMockForAbstractClass();
99
        $limitationMock
100
            ->expects($this->any())
101
            ->method('getIdentifier')
102
            ->will($this->returnValue('limitationIdentifier'));
103
104
        $policy1 = new Policy(array('limitations' => array($limitationMock)));
105
        $policy2 = new Policy(array('limitations' => array($limitationMock, $limitationMock)));
106
107
        return array(
108
            array(
109
                $criterionMock,
110
                1,
111
                array(
112
                    array(
113
                        'limitation' => null,
114
                        'policies' => array($policy1),
115
                    ),
116
                ),
117
                $criterionMock,
118
            ),
119
            array(
120
                $criterionMock,
121
                2,
122
                array(
123
                    array(
124
                        'limitation' => null,
125
                        'policies' => array($policy1, $policy1),
126
                    ),
127
                ),
128
                new Criterion\LogicalOr(array($criterionMock, $criterionMock)),
129
            ),
130
            array(
131
                $criterionMock,
132
                0,
133
                array(
134
                    array(
135
                        'limitation' => null,
136
                        'policies' => array(new Policy(array('limitations' => '*')), $policy1),
137
                    ),
138
                ),
139
                false,
140
            ),
141
            array(
142
                $criterionMock,
143
                0,
144
                array(
145
                    array(
146
                        'limitation' => null,
147
                        'policies' => array(new Policy(array('limitations' => array())), $policy1),
148
                    ),
149
                ),
150
                false,
151
            ),
152
            array(
153
                $criterionMock,
154
                2,
155
                array(
156
                    array(
157
                        'limitation' => null,
158
                        'policies' => array($policy2),
159
                    ),
160
                ),
161
                new Criterion\LogicalAnd(array($criterionMock, $criterionMock)),
162
            ),
163
            array(
164
                $criterionMock,
165
                3,
166
                array(
167
                    array(
168
                        'limitation' => null,
169
                        'policies' => array($policy1, $policy2),
170
                    ),
171
                ),
172
                new Criterion\LogicalOr(
173
                    array(
174
                        $criterionMock,
175
                        new Criterion\LogicalAnd(array($criterionMock, $criterionMock)),
176
                    )
177
                ),
178
            ),
179
            array(
180
                $criterionMock,
181
                2,
182
                array(
183
                    array(
184
                        'limitation' => null,
185
                        'policies' => array($policy1),
186
                    ),
187
                    array(
188
                        'limitation' => null,
189
                        'policies' => array($policy1),
190
                    ),
191
                ),
192
                new Criterion\LogicalOr(array($criterionMock, $criterionMock)),
193
            ),
194
            array(
195
                $criterionMock,
196
                3,
197
                array(
198
                    array(
199
                        'limitation' => null,
200
                        'policies' => array($policy1),
201
                    ),
202
                    array(
203
                        'limitation' => null,
204
                        'policies' => array($policy1, $policy1),
205
                    ),
206
                ),
207
                new Criterion\LogicalOr(array($criterionMock, $criterionMock, $criterionMock)),
208
            ),
209
            array(
210
                $criterionMock,
211
                3,
212
                array(
213
                    array(
214
                        'limitation' => null,
215
                        'policies' => array($policy2),
216
                    ),
217
                    array(
218
                        'limitation' => null,
219
                        'policies' => array($policy1),
220
                    ),
221
                ),
222
                new Criterion\LogicalOr(
223
                    array(
224
                        new Criterion\LogicalAnd(array($criterionMock, $criterionMock)),
225
                        $criterionMock,
226
                    )
227
                ),
228
            ),
229
            array(
230
                $criterionMock,
231
                2,
232
                array(
233
                    array(
234
                        'limitation' => $limitationMock,
235
                        'policies' => array($policy1),
236
                    ),
237
                ),
238
                new Criterion\LogicalAnd(array($criterionMock, $criterionMock)),
239
            ),
240
            array(
241
                $criterionMock,
242
                4,
243
                array(
244
                    array(
245
                        'limitation' => $limitationMock,
246
                        'policies' => array($policy1),
247
                    ),
248
                    array(
249
                        'limitation' => $limitationMock,
250
                        'policies' => array($policy1),
251
                    ),
252
                ),
253
                new Criterion\LogicalOr(
254
                    array(
255
                        new Criterion\LogicalAnd(array($criterionMock, $criterionMock)),
256
                        new Criterion\LogicalAnd(array($criterionMock, $criterionMock)),
257
                    )
258
                ),
259
            ),
260
            array(
261
                $criterionMock,
262
                1,
263
                array(
264
                    array(
265
                        'limitation' => $limitationMock,
266
                        'policies' => array(new Policy(array('limitations' => '*'))),
267
                    ),
268
                ),
269
                $criterionMock,
270
            ),
271
            array(
272
                $criterionMock,
273
                2,
274
                array(
275
                    array(
276
                        'limitation' => $limitationMock,
277
                        'policies' => array(new Policy(array('limitations' => '*'))),
278
                    ),
279
                    array(
280
                        'limitation' => $limitationMock,
281
                        'policies' => array(new Policy(array('limitations' => '*'))),
282
                    ),
283
                ),
284
                new Criterion\LogicalOr(array($criterionMock, $criterionMock)),
285
            ),
286
        );
287
    }
288
289
    protected function mockServices($criterionMock, $limitationCount, $permissionSets)
290
    {
291
        $userMock = $this->createMock('eZ\\Publish\\API\\Repository\\Values\\User\\User');
292
        $limitationTypeMock = $this->createMock('eZ\\Publish\\SPI\\Limitation\\Type');
293
        $limitationServiceMock = $this->getLimitationServiceMock(['getLimitationType']);
294
        $permissionResolverMock = $this->getPermissionResolverMock(
295
            [
296
                'hasAccess',
297
                'getCurrentUserReference',
298
            ]
299
        );
300
301
        $limitationTypeMock
302
            ->expects($this->any())
303
            ->method('getCriterion')
304
            ->with(
305
                $this->isInstanceOf(APILimitation::class),
306
                $this->equalTo($userMock)
307
            )
308
            ->will($this->returnValue($criterionMock));
309
310
        $limitationServiceMock
311
            ->expects($this->exactly($limitationCount))
312
            ->method('getLimitationType')
313
            ->with($this->equalTo('limitationIdentifier'))
314
            ->will($this->returnValue($limitationTypeMock));
315
316
        $permissionResolverMock
317
            ->expects($this->once())
318
            ->method('hasAccess')
319
            ->with($this->equalTo('content'), $this->equalTo('read'))
320
            ->will($this->returnValue($permissionSets));
321
322
        $permissionResolverMock
323
            ->expects($this->once())
324
            ->method('getCurrentUserReference')
325
            ->will($this->returnValue($userMock));
326
    }
327
328
    /**
329
     * Test for the getPermissionsCriterion() method.
330
     *
331
     * @dataProvider providerForTestGetPermissionsCriterion
332
     */
333
    public function testGetPermissionsCriterion(
334
        $criterionMock,
335
        $limitationCount,
336
        $permissionSets,
337
        $expectedCriterion
338
    ) {
339
        $this->mockServices($criterionMock, $limitationCount, $permissionSets);
340
        $handler = $this->getPermissionsCriterionHandlerMock(null);
341
342
        $permissionsCriterion = $handler->getPermissionsCriterion();
343
344
        $this->assertEquals($expectedCriterion, $permissionsCriterion);
345
    }
346
347
    public function providerForTestGetPermissionsCriterionBooleanPermissionSets()
348
    {
349
        return array(
350
            array(true),
351
            array(false),
352
        );
353
    }
354
355
    /**
356
     * Test for the getPermissionsCriterion() method.
357
     *
358
     * @dataProvider providerForTestGetPermissionsCriterionBooleanPermissionSets
359
     */
360 View Code Duplication
    public function testGetPermissionsCriterionBooleanPermissionSets($permissionSets)
361
    {
362
        $permissionResolverMock = $this->getPermissionResolverMock(['hasAccess']);
363
        $permissionResolverMock
364
            ->expects($this->once())
365
            ->method('hasAccess')
366
            ->with($this->equalTo('testModule'), $this->equalTo('testFunction'))
367
            ->will($this->returnValue($permissionSets));
368
        $handler = $this->getPermissionsCriterionHandlerMock(null);
369
370
        $permissionsCriterion = $handler->getPermissionsCriterion('testModule', 'testFunction');
371
372
        $this->assertEquals($permissionSets, $permissionsCriterion);
373
    }
374
375
    /**
376
     * Returns the PermissionsCriterionHandler to test with $methods mocked.
377
     *
378
     * @param string[]|null $methods
379
     *
380
     * @return \PHPUnit\Framework\MockObject\MockObject|\eZ\Publish\Core\Repository\PermissionsCriterionHandler
381
     */
382 View Code Duplication
    protected function getPermissionsCriterionHandlerMock($methods = [])
383
    {
384
        return $this
385
            ->getMockBuilder(PermissionsCriterionHandler::class)
386
            ->setMethods($methods)
387
            ->setConstructorArgs(
388
                [
389
                    $this->getPermissionResolverMock(),
390
                    $this->getLimitationServiceMock(),
391
                ]
392
            )
393
            ->getMock();
394
    }
395
396
    protected $permissionResolverMock;
397
398 View Code Duplication
    protected function getPermissionResolverMock($methods = [])
399
    {
400
        if ($this->permissionResolverMock === null) {
401
            $this->permissionResolverMock = $this
402
                ->getMockBuilder(PermissionResolver::class)
403
                ->setMethods($methods)
404
                ->disableOriginalConstructor()
405
                ->getMockForAbstractClass();
406
        }
407
408
        return $this->permissionResolverMock;
409
    }
410
411
    protected $limitationServiceMock;
412
413 View Code Duplication
    protected function getLimitationServiceMock($methods = [])
414
    {
415
        if ($this->limitationServiceMock === null) {
416
            $this->limitationServiceMock = $this
417
                ->getMockBuilder(LimitationService::class)
418
                ->setMethods($methods)
419
                ->disableOriginalConstructor()
420
                ->getMock();
421
        }
422
423
        return $this->limitationServiceMock;
424
    }
425
}
426