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

LogicalAndTest::getPayloads()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 69

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 0
dl 0
loc 69
rs 8.6763
c 0
b 0
f 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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 LogicalAndTest 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 ContentTypeIdentifierCriterion Tag to appear as one-element
25
     * (type numeric array) and two criteria configuration inside. The logical AND parser will take
26
     * care of this and return a flat LogicalAnd criterion with 3 criteria inside for the following
27
     * payload:
28
     *
29
     * ```
30
     * <AND>
31
     *   <ContentTypeIdentifierCriterion>author</ContentTypeIdentifierCriterion>
32
     *   <ContentTypeIdentifierCriterion>book</ContentTypeIdentifierCriterion>
33
     *   <Field>
34
     *     <name>title</name>
35
     *     <operator>EQ</operator>
36
     *     <value>Contributing to projects</value>
37
     *   </Field>
38
     * </AND>
39
     * ```
40
     */
41
    public function getPayloads()
42
    {
43
        return [
44
            'Simple AND Criterion' => [
45
                [
46
                    'AND' => [
47
                        'ContentTypeIdentifierCriterion' => [
48
                            0 => 'author',
49
                            1 => 'book',
50
                        ],
51
                        'Field' => [
52
                            'name' => 'title',
53
                            'operator' => 'EQ',
54
                            'value' => 'Contributing to projects',
55
                        ],
56
                    ],
57
                ],
58
                3,
59
            ],
60
            'Combined AND with nested OR Criterion' => [
61
                [
62
                    'AND' => [
63
                        [
64
                            'OR' => [
65
                                'ContentTypeIdentifierCriterion' => [
66
                                    'article',
67
                                    'folder',
68
                                ],
69
                            ],
70
                        ],
71
                        [
72
                            'OR' => [
73
                                'ContentTypeIdentifierCriterion' => [
74
                                    'forum',
75
                                    'board',
76
                                ],
77
                            ],
78
                        ],
79
                    ],
80
                ],
81
                2,
82
            ],
83
            'Combined AND with nested OR Criterion using old format' => [
84
                [
85
                    'AND' => [
86
                        [
87
                            'OR' => [
88
                                [
89
                                    'ContentTypeIdentifierCriterion' => [
90
                                        'article',
91
                                        'folder',
92
                                    ],
93
                                ],
94
                            ],
95
                        ],
96
                        [
97
                            'OR' => [
98
                                'ContentTypeIdentifierCriterion' => [
99
                                    'forum',
100
                                    'board',
101
                                ],
102
                            ],
103
                        ],
104
                    ],
105
                ],
106
                2,
107
            ],
108
        ];
109
    }
110
111
    public function testThrowsExceptionOnInvalidAndStatement()
112
    {
113
        $this->expectException(ParserException::class);
114
        $this->internalGetParser()->parse(['AND' => 'Should be an array'], new ParsingDispatcher());
115
    }
116
117
    /**
118
     * @return \eZ\Publish\Core\REST\Server\Input\Parser\Criterion\LogicalAnd
119
     */
120
    protected function internalGetParser()
121
    {
122
        return new Parser\Criterion\LogicalAnd();
123
    }
124
125
    protected function getCriterionClass()
126
    {
127
        return Content\Query\Criterion\LogicalAnd::class;
128
    }
129
}
130