|
1
|
|
|
<?php |
|
2
|
|
|
|
|
3
|
|
|
/** |
|
4
|
|
|
* File containing a test 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\REST\Server\Tests\Input\Parser\Criterion; |
|
10
|
|
|
|
|
11
|
|
|
use eZ\Publish\API\Repository\Values\Content; |
|
12
|
|
|
use eZ\Publish\Core\REST\Common\Input\ParsingDispatcher; |
|
13
|
|
|
use eZ\Publish\Core\REST\Server\Input\Parser; |
|
14
|
|
|
use eZ\Publish\Core\REST\Server\Tests\Input\Parser\BaseTest; |
|
15
|
|
|
|
|
16
|
|
|
class LogicalAndTest extends BaseTest |
|
17
|
|
|
{ |
|
18
|
|
|
/** |
|
19
|
|
|
* Logical parsing of AND statement. |
|
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. See |
|
24
|
|
|
* variable $logicalAndParsedFromXml. This causes the ContentTypeIdentifierCriterion-Tag to appear as one-element |
|
25
|
|
|
* (type numeric array) and two criteria configuration inside. The logical or parser will take care |
|
26
|
|
|
* of this and return a flatt LogicalAnd criterion with 3 criteria inside. |
|
27
|
|
|
* |
|
28
|
|
|
* ``` |
|
29
|
|
|
* <AND> |
|
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
|
|
|
* </AND> |
|
38
|
|
|
* ``` |
|
39
|
|
|
*/ |
|
40
|
|
|
public function testParseLogicalAnd() |
|
41
|
|
|
{ |
|
42
|
|
|
$logicalAndParsedFromXml = [ |
|
43
|
|
|
'AND' => [ |
|
44
|
|
|
'ContentTypeIdentifierCriterion' => [ |
|
45
|
|
|
0 => 'author', |
|
46
|
|
|
1 => 'book', |
|
47
|
|
|
], |
|
48
|
|
|
'Field' => [ |
|
49
|
|
|
'name' => 'title', |
|
50
|
|
|
'operator' => 'EQ', |
|
51
|
|
|
'value' => 'Contributing to projects', |
|
52
|
|
|
], |
|
53
|
|
|
], |
|
54
|
|
|
]; |
|
55
|
|
|
|
|
56
|
|
|
$criterionMock = $this->getMock(Content\Query\Criterion::class, [], [], '', false); |
|
|
|
|
|
|
57
|
|
|
|
|
58
|
|
|
$parserMock = $this->getMock(\eZ\Publish\Core\REST\Common\Input\Parser::class); |
|
|
|
|
|
|
59
|
|
|
$parserMock->method('parse')->willReturn($criterionMock); |
|
60
|
|
|
|
|
61
|
|
|
$result = $this->internalGetParser()->parse($logicalAndParsedFromXml, new ParsingDispatcher([ |
|
62
|
|
|
'application/vnd.ez.api.internal.criterion.ContentTypeIdentifier' => $parserMock, |
|
63
|
|
|
'application/vnd.ez.api.internal.criterion.Field' => $parserMock, |
|
64
|
|
|
])); |
|
65
|
|
|
|
|
66
|
|
|
self::assertInstanceOf(Content\Query\Criterion\LogicalAnd::class, $result); |
|
67
|
|
|
self::assertCount(3, (array)$result->criteria); |
|
68
|
|
|
} |
|
69
|
|
|
|
|
70
|
|
|
/** |
|
71
|
|
|
* @expectedException \eZ\Publish\Core\REST\Common\Exceptions\Parser |
|
72
|
|
|
*/ |
|
73
|
|
|
public function testThrowsExceptionOnInvalidAndStatement() |
|
74
|
|
|
{ |
|
75
|
|
|
$this->internalGetParser()->parse(['AND' => 'Should be an array'], new ParsingDispatcher()); |
|
76
|
|
|
} |
|
77
|
|
|
|
|
78
|
|
|
/** |
|
79
|
|
|
* @return Parser\Criterion\LogicalAnd |
|
80
|
|
|
*/ |
|
81
|
|
|
protected function internalGetParser() |
|
82
|
|
|
{ |
|
83
|
|
|
return new Parser\Criterion\LogicalAnd(); |
|
|
|
|
|
|
84
|
|
|
} |
|
85
|
|
|
} |
|
86
|
|
|
|
This method has been deprecated. The supplier of the class has supplied an explanatory message.
The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.