1
|
|
|
<?php |
2
|
|
|
/** |
3
|
|
|
* translator tests |
4
|
|
|
*/ |
5
|
|
|
|
6
|
|
|
namespace Graviton\RestBundle\Service; |
7
|
|
|
|
8
|
|
|
use Graviton\Rql\Node\SearchNode; |
9
|
|
|
use Xiag\Rql\Parser\Node\Query\LogicOperator\AndNode; |
10
|
|
|
use Xiag\Rql\Parser\Node\Query\LogicOperator\OrNode; |
11
|
|
|
use Xiag\Rql\Parser\Node\Query\ScalarOperator\EqNode; |
12
|
|
|
use Xiag\Rql\Parser\Node\Query\ScalarOperator\GeNode; |
13
|
|
|
use Xiag\Rql\Parser\Node\Query\ScalarOperator\LeNode; |
14
|
|
|
use Xiag\Rql\Parser\Node\Query\ScalarOperator\LikeNode; |
15
|
|
|
use Xiag\Rql\Parser\Query; |
16
|
|
|
|
17
|
|
|
/** |
18
|
|
|
* Class RqlTranslatorTest |
19
|
|
|
* @package Graviton\RestBundle\Service |
20
|
|
|
* @author List of contributors <https://github.com/libgraviton/graviton/graphs/contributors> |
21
|
|
|
* @license http://opensource.org/licenses/gpl-license.php GNU Public License |
22
|
|
|
* @link http://swisscom.ch |
23
|
|
|
*/ |
24
|
|
|
class RqlTranslatorTest extends \PHPUnit_Framework_TestCase |
25
|
|
|
{ |
26
|
|
|
/** @var RqlTranslator */ |
27
|
|
|
protected $sut; |
28
|
|
|
|
29
|
|
|
/** |
30
|
|
|
* PHPUnit set up |
31
|
|
|
* |
32
|
|
|
* @return void |
33
|
|
|
*/ |
34
|
|
|
protected function setUp() |
35
|
|
|
{ |
36
|
|
|
$this->sut = new RqlTranslator(); |
37
|
|
|
} |
38
|
|
|
|
39
|
|
|
/** |
40
|
|
|
* Test for correct node translation with search terms |
41
|
|
|
* |
42
|
|
|
* @return void |
43
|
|
|
*/ |
44
|
|
View Code Duplication |
public function testSearchNodeTranslation() |
|
|
|
|
45
|
|
|
{ |
46
|
|
|
$searchNode = new SearchNode(array('searchTerm1', 'searchTerm2')); |
47
|
|
|
|
48
|
|
|
$resultingOrNode = $this->sut->translateSearchNode($searchNode, array('testField')); |
49
|
|
|
|
50
|
|
|
$this->assertTrue($resultingOrNode instanceof OrNode); |
51
|
|
|
$this->assertEquals(2, sizeof($resultingOrNode->getQueries())); |
|
|
|
|
52
|
|
|
} |
53
|
|
|
|
54
|
|
|
/** |
55
|
|
|
* test for correct not translation without searches |
56
|
|
|
* |
57
|
|
|
* @return void |
58
|
|
|
*/ |
59
|
|
View Code Duplication |
public function testEmptySearch() |
|
|
|
|
60
|
|
|
{ |
61
|
|
|
$searchNode = new SearchNode(); |
62
|
|
|
|
63
|
|
|
$resultingOrNode = $this->sut->translateSearchNode($searchNode, array('testField')); |
64
|
|
|
|
65
|
|
|
$this->assertTrue($resultingOrNode instanceof SearchNode); |
66
|
|
|
$this->assertEquals(0, sizeof($resultingOrNode->getSearchTerms())); |
|
|
|
|
67
|
|
|
} |
68
|
|
|
|
69
|
|
|
/** |
70
|
|
|
* Test correct translation with already existing queries |
71
|
|
|
* |
72
|
|
|
* @return void |
73
|
|
|
*/ |
74
|
|
|
public function testQueryTranslation() |
75
|
|
|
{ |
76
|
|
|
// Construct scenario: |
77
|
|
|
$query = new Query(); |
78
|
|
|
$andQuery = new AndNode(); |
79
|
|
|
$andQuery->addQuery(new LikeNode("firstName", "TestFirstName")); |
80
|
|
|
$andQuery->addQuery(new LikeNode("lastName", "TestLastName")); |
81
|
|
|
$andQuery->addQuery(new SearchNode(array("searchTerm1", "searchTerm2"))); |
82
|
|
|
$query->setQuery($andQuery); |
83
|
|
|
|
84
|
|
|
$searchFields = array('field1', 'field2'); |
85
|
|
|
|
86
|
|
|
/** @var Query $resultQuery */ |
87
|
|
|
$resultQuery = $this->sut->translateSearchQuery($query, $searchFields); |
88
|
|
|
|
89
|
|
|
/** @var AndNode $resultInnerQuery */ |
90
|
|
|
$resultInnerQuery = $resultQuery->getQuery(); |
91
|
|
|
|
92
|
|
|
$this->assertTrue($resultInnerQuery instanceof AndNode); |
93
|
|
|
$this->assertEquals(3, sizeof($resultInnerQuery->getQueries())); |
94
|
|
|
|
95
|
|
|
$subNodes = $resultInnerQuery->getQueries(); |
96
|
|
|
|
97
|
|
|
$this->assertTrue($subNodes[0] instanceof LikeNode); |
98
|
|
|
$this->assertTrue($subNodes[1] instanceof LikeNode); |
99
|
|
|
$this->assertTrue($subNodes[2] instanceof OrNode); |
100
|
|
|
|
101
|
|
|
} |
102
|
|
|
|
103
|
|
|
/** |
104
|
|
|
* Test for correct translations with numeric fields |
105
|
|
|
* |
106
|
|
|
* @return void |
107
|
|
|
*/ |
108
|
|
|
public function testNumericSearchNode() |
109
|
|
|
{ |
110
|
|
|
// Construct scenario: |
111
|
|
|
$query = new Query(); |
112
|
|
|
$andQuery = new AndNode(); |
113
|
|
|
$andQuery->addQuery(new LikeNode("lastName", "TestLastName")); |
114
|
|
|
$andQuery->addQuery(new SearchNode(array(10023))); |
115
|
|
|
$query->setQuery($andQuery); |
116
|
|
|
|
117
|
|
|
$searchFields = array('field1'); |
118
|
|
|
|
119
|
|
|
/** @var Query $resultQuery */ |
120
|
|
|
$resultQuery = $this->sut->translateSearchQuery($query, $searchFields); |
121
|
|
|
|
122
|
|
|
/** @var AndNode $resultInnerQuery */ |
123
|
|
|
$resultInnerQuery = $resultQuery->getQuery(); |
124
|
|
|
|
125
|
|
|
$this->assertTrue($resultInnerQuery instanceof AndNode); |
126
|
|
|
$this->assertEquals(2, sizeof($resultInnerQuery->getQueries())); |
127
|
|
|
|
128
|
|
|
$subNodes = $resultInnerQuery->getQueries(); |
129
|
|
|
|
130
|
|
|
$this->assertTrue($subNodes[0] instanceof LikeNode); |
131
|
|
|
$this->assertTrue($subNodes[1] instanceof OrNode); |
132
|
|
|
|
133
|
|
|
/** @var OrNode $searchOrNode */ |
134
|
|
|
$searchOrNode = $subNodes[1]; |
135
|
|
|
|
136
|
|
|
$orSubNotes = $searchOrNode->getQueries(); |
137
|
|
|
|
138
|
|
|
$this->assertTrue($orSubNotes[0] instanceof LikeNode); |
139
|
|
|
$this->assertTrue($orSubNotes[1] instanceof EqNode); |
140
|
|
|
} |
141
|
|
|
|
142
|
|
|
/** |
143
|
|
|
* Test for correct translations with dates |
144
|
|
|
* |
145
|
|
|
* @return void |
146
|
|
|
*/ |
147
|
|
|
public function testDateSearchNode() |
148
|
|
|
{ |
149
|
|
|
// Construct scenario: |
150
|
|
|
$query = new Query(); |
151
|
|
|
$andQuery = new AndNode(); |
152
|
|
|
$andQuery->addQuery(new LikeNode("lastName", "TestLastName")); |
153
|
|
|
$andQuery->addQuery(new SearchNode(array('29.12.1981'))); |
154
|
|
|
$query->setQuery($andQuery); |
155
|
|
|
|
156
|
|
|
$searchFields = array('field1'); |
157
|
|
|
|
158
|
|
|
/** @var Query $resultQuery */ |
159
|
|
|
$resultQuery = $this->sut->translateSearchQuery($query, $searchFields); |
160
|
|
|
|
161
|
|
|
/** @var AndNode $resultInnerQuery */ |
162
|
|
|
$resultInnerQuery = $resultQuery->getQuery(); |
163
|
|
|
|
164
|
|
|
$this->assertTrue($resultInnerQuery instanceof AndNode); |
165
|
|
|
$this->assertEquals(2, sizeof($resultInnerQuery->getQueries())); |
166
|
|
|
|
167
|
|
|
$subNodes = $resultInnerQuery->getQueries(); |
168
|
|
|
|
169
|
|
|
$this->assertTrue($subNodes[0] instanceof LikeNode); |
170
|
|
|
$this->assertTrue($subNodes[1] instanceof OrNode); |
171
|
|
|
|
172
|
|
|
/** @var OrNode $searchOrNode */ |
173
|
|
|
$searchOrNode = $subNodes[1]; |
174
|
|
|
|
175
|
|
|
$orSubNotes = $searchOrNode->getQueries(); |
176
|
|
|
|
177
|
|
|
$this->assertTrue($orSubNotes[0] instanceof LikeNode); |
178
|
|
|
$this->assertTrue($orSubNotes[1] instanceof AndNode); |
179
|
|
|
|
180
|
|
|
/** @var AndNode $searchOrNode */ |
181
|
|
|
$dateAndNode = $orSubNotes[1]; |
182
|
|
|
$dateAndSubNodes = $dateAndNode->getQueries(); |
|
|
|
|
183
|
|
|
|
184
|
|
|
$this->assertTrue($dateAndSubNodes[0] instanceof GeNode); |
185
|
|
|
$this->assertTrue($dateAndSubNodes[1] instanceof LeNode); |
186
|
|
|
} |
187
|
|
|
} |
188
|
|
|
|
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.