Completed
Push — 7.5 ( 05f391...b433d9 )
by
unknown
19:31 queued 10s
created

LogicalOperatorTestCase::testParse()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 2
dl 0
loc 15
rs 9.7666
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * @copyright Copyright (C) eZ Systems AS. All rights reserved.
5
 * @license For full copyright and license information view LICENSE file distributed with this source code.
6
 */
7
namespace eZ\Publish\Core\REST\Server\Tests\Input\Parser\Criterion;
8
9
use eZ\Publish\API\Repository\Values\Content\Query\Criterion;
10
use eZ\Publish\Core\REST\Common\Input\Parser as InputParser;
11
use eZ\Publish\Core\REST\Common\Input\ParsingDispatcher;
12
use eZ\Publish\Core\REST\Server\Input\Parser;
13
use eZ\Publish\Core\REST\Server\Tests\Input\Parser\BaseTest;
14
use PHPUnit_Framework_MockObject_MockObject;
15
16
/**
17
 * @internal for internal use by tests
18
 */
19
abstract class LogicalOperatorTestCase extends BaseTest
20
{
21
    /**
22
     * Data provider for testParse.
23
     *
24
     * @see testParse
25
     *
26
     * @return array data sets
27
     */
28
    abstract public function getPayloads();
29
30
    /**
31
     * @return string
32
     */
33
    abstract protected function getCriterionClass();
34
35
    /**
36
     * @covers \eZ\Publish\Core\REST\Server\Input\Parser\Criterion\LogicalOperator::parse
37
     *
38
     * @dataProvider getPayloads
39
     *
40
     * @param array $payload
41
     * @param int $expectedNumberOfCriteria
42
     */
43
    public function testParse($payload, $expectedNumberOfCriteria)
44
    {
45
        $criterionMock = $this->createMock(Criterion::class);
46
47
        $parserMock = $this->createMock(InputParser::class);
48
        $parserMock->method('parse')->willReturn($criterionMock);
49
50
        $result = $this->internalGetParser()->parse(
51
            $payload,
52
            $this->buildParsingDispatcher($parserMock)
53
        );
54
55
        self::assertInstanceOf($this->getCriterionClass(), $result);
56
        self::assertCount($expectedNumberOfCriteria, (array)$result->criteria);
57
    }
58
59
    /**
60
     * @return \eZ\Publish\Core\REST\Common\Input\ParsingDispatcher
61
     */
62
    protected function buildParsingDispatcher(PHPUnit_Framework_MockObject_MockObject $parserMock)
63
    {
64
        return new ParsingDispatcher(
65
            [
66
                // to test parsing nested combined logical criteria
67
                'application/vnd.ez.api.internal.criterion.LogicalOr' => new Parser\Criterion\LogicalOr(),
68
                'application/vnd.ez.api.internal.criterion.LogicalAnd' => new Parser\Criterion\LogicalAnd(),
69
                'application/vnd.ez.api.internal.criterion.ContentTypeIdentifier' => $parserMock,
70
                'application/vnd.ez.api.internal.criterion.ContentRemoteId' => new Parser\Criterion\ContentRemoteId(),
71
                'application/vnd.ez.api.internal.criterion.Field' => $parserMock,
72
            ]
73
        );
74
    }
75
}
76