Completed
Push — ezp-30806-tmp-7.5 ( 315c25...501754 )
by
unknown
47:49 queued 29:31
created

LogicalOrTest::getCriterionClass()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 0
dl 0
loc 4
rs 10
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;
10
use eZ\Publish\Core\REST\Common\Exceptions\Parser as ParserException;
11
use eZ\Publish\Core\REST\Common\Input\ParsingDispatcher;
12
use eZ\Publish\Core\REST\Server\Input\Parser;
13
14
class LogicalOrTest extends LogicalOperatorTestCase
15
{
16
    /**
17
     * Data provider for LogicalOr::parse test.
18
     *
19
     * @see testParse
20
     *
21
     * Notice regarding multiple criteria of same type:
22
     *
23
     * The XML decoder of eZ is not creating numeric arrays, instead using the tag as the array key.
24
     * This causes the Field Tag to appear as one-element (type numeric array) and two criteria
25
     * configuration inside. The logical OR parser will take care of this and return a flat
26
     * LogicalOr criterion with 4 criteria inside for the following payload:
27
     *
28
     * ```
29
     * <OR>
30
     *   <ContentTypeIdentifierCriterion>author</ContentTypeIdentifierCriterion>
31
     *   <ContentTypeIdentifierCriterion>book</ContentTypeIdentifierCriterion>
32
     *   <Field>
33
     *     <name>title</name>
34
     *     <operator>EQ</operator>
35
     *     <value>Contributing to projects</value>
36
     *   </Field>
37
     *   <Field>
38
     *     <name>title</name>
39
     *     <operator>EQ</operator>
40
     *     <value>Contributing to projects</value>
41
     *   </Field>
42
     * </OR>
43
     * ```
44
     */
45
    public function getPayloads()
46
    {
47
        return [
48
            'Simple OR with Field and ContentTypeIdentifierCriterion' => [
49
                [
50
                    'OR' => [
51
                        'ContentTypeIdentifierCriterion' => [
52
                            0 => 'author',
53
                            1 => 'book',
54
                        ],
55
                        'Field' => [
56
                            0 => [
57
                                'name' => 'title',
58
                                'operator' => 'EQ',
59
                                'value' => 'Contributing to projects',
60
                            ],
61
                            1 => [
62
                                'name' => 'title',
63
                                'operator' => 'EQ',
64
                                'value' => 'Contributing to projects',
65
                            ],
66
                        ],
67
                    ],
68
                ],
69
                4,
70
            ],
71
            'Simple OR with ContentRemoteIdCriterion' => [
72
                [
73
                    'OR' => [
74
                        [
75
                            'ContentRemoteIdCriterion' => 'remote_id1',
76
                        ],
77
                        [
78
                            'ContentRemoteIdCriterion' => 'remote_id2',
79
                        ],
80
                    ],
81
                ],
82
                2,
83
            ],
84
        ];
85
    }
86
87
    public function testThrowsExceptionOnInvalidAndStatement()
88
    {
89
        $this->expectException(ParserException::class);
90
        $this->internalGetParser()->parse(['OR' => 'Wrong type'], new ParsingDispatcher());
91
    }
92
93
    /**
94
     * @return \eZ\Publish\Core\REST\Server\Input\Parser\Criterion\LogicalOr
95
     */
96
    protected function internalGetParser()
97
    {
98
        return new Parser\Criterion\LogicalOr();
99
    }
100
101
    protected function getCriterionClass()
102
    {
103
        return Content\Query\Criterion\LogicalOr::class;
104
    }
105
}
106