|
1 <?php |
|
2 |
|
3 |
|
4 /** |
|
5 * @file |
|
6 * Unit test file for the entity API. |
|
7 */ |
|
8 |
|
9 /** |
|
10 * Tests EntityFieldQuery. |
|
11 */ |
|
12 class EntityFieldQueryTestCase extends DrupalWebTestCase { |
|
13 |
|
14 public static function getInfo() { |
|
15 return array( |
|
16 'name' => 'Entity query', |
|
17 'description' => 'Test the EntityFieldQuery class.', |
|
18 'group' => 'Entity API', |
|
19 ); |
|
20 } |
|
21 |
|
22 function setUp() { |
|
23 parent::setUp(array('node', 'field_test', 'entity_query_access_test', 'node_access_test')); |
|
24 |
|
25 field_test_create_bundle('bundle1'); |
|
26 field_test_create_bundle('bundle2'); |
|
27 field_test_create_bundle('test_bundle'); |
|
28 field_test_create_bundle('test_entity_bundle'); |
|
29 |
|
30 $instances = array(); |
|
31 $this->fields = array(); |
|
32 $this->field_names[0] = $field_name = drupal_strtolower($this->randomName() . '_field_name'); |
|
33 $field = array('field_name' => $field_name, 'type' => 'test_field', 'cardinality' => 4); |
|
34 $field = field_create_field($field); |
|
35 $this->fields[0] = $field; |
|
36 $instance = array( |
|
37 'field_name' => $field_name, |
|
38 'entity_type' => '', |
|
39 'bundle' => '', |
|
40 'label' => $this->randomName() . '_label', |
|
41 'description' => $this->randomName() . '_description', |
|
42 'weight' => mt_rand(0, 127), |
|
43 'settings' => array( |
|
44 'test_instance_setting' => $this->randomName(), |
|
45 ), |
|
46 'widget' => array( |
|
47 'type' => 'test_field_widget', |
|
48 'label' => 'Test Field', |
|
49 'settings' => array( |
|
50 'test_widget_setting' => $this->randomName(), |
|
51 ) |
|
52 ) |
|
53 ); |
|
54 |
|
55 $instances[0] = $instance; |
|
56 |
|
57 // Add an instance to that bundle. |
|
58 $instances[0]['bundle'] = 'bundle1'; |
|
59 $instances[0]['entity_type'] = 'test_entity_bundle_key'; |
|
60 field_create_instance($instances[0]); |
|
61 $instances[0]['bundle'] = 'bundle2'; |
|
62 field_create_instance($instances[0]); |
|
63 $instances[0]['bundle'] = $instances[0]['entity_type'] = 'test_entity_bundle'; |
|
64 field_create_instance($instances[0]); |
|
65 |
|
66 $this->field_names[1] = $field_name = drupal_strtolower($this->randomName() . '_field_name'); |
|
67 $field = array('field_name' => $field_name, 'type' => 'shape', 'cardinality' => 4); |
|
68 $field = field_create_field($field); |
|
69 $this->fields[1] = $field; |
|
70 $instance = array( |
|
71 'field_name' => $field_name, |
|
72 'entity_type' => '', |
|
73 'bundle' => '', |
|
74 'label' => $this->randomName() . '_label', |
|
75 'description' => $this->randomName() . '_description', |
|
76 'weight' => mt_rand(0, 127), |
|
77 'settings' => array( |
|
78 'test_instance_setting' => $this->randomName(), |
|
79 ), |
|
80 'widget' => array( |
|
81 'type' => 'test_field_widget', |
|
82 'label' => 'Test Field', |
|
83 'settings' => array( |
|
84 'test_widget_setting' => $this->randomName(), |
|
85 ) |
|
86 ) |
|
87 ); |
|
88 |
|
89 $instances[1] = $instance; |
|
90 |
|
91 // Add a field instance to the bundles. |
|
92 $instances[1]['bundle'] = 'bundle1'; |
|
93 $instances[1]['entity_type'] = 'test_entity_bundle_key'; |
|
94 field_create_instance($instances[1]); |
|
95 $instances[1]['bundle'] = $instances[1]['entity_type'] = 'test_entity_bundle'; |
|
96 field_create_instance($instances[1]); |
|
97 |
|
98 $this->instances = $instances; |
|
99 // Write entity base table if there is one. |
|
100 $entities = array(); |
|
101 |
|
102 // Create entities which have a 'bundle key' defined. |
|
103 for ($i = 1; $i < 7; $i++) { |
|
104 $entity = new stdClass(); |
|
105 $entity->ftid = $i; |
|
106 $entity->fttype = ($i < 5) ? 'bundle1' : 'bundle2'; |
|
107 |
|
108 $entity->{$this->field_names[0]}[LANGUAGE_NONE][0]['value'] = $i; |
|
109 drupal_write_record('test_entity_bundle_key', $entity); |
|
110 field_attach_insert('test_entity_bundle_key', $entity); |
|
111 } |
|
112 |
|
113 $entity = new stdClass(); |
|
114 $entity->ftid = 5; |
|
115 $entity->fttype = 'test_entity_bundle'; |
|
116 $entity->{$this->field_names[1]}[LANGUAGE_NONE][0]['shape'] = 'square'; |
|
117 $entity->{$this->field_names[1]}[LANGUAGE_NONE][0]['color'] = 'red'; |
|
118 $entity->{$this->field_names[1]}[LANGUAGE_NONE][1]['shape'] = 'circle'; |
|
119 $entity->{$this->field_names[1]}[LANGUAGE_NONE][1]['color'] = 'blue'; |
|
120 drupal_write_record('test_entity_bundle', $entity); |
|
121 field_attach_insert('test_entity_bundle', $entity); |
|
122 |
|
123 $instances[2] = $instance; |
|
124 $instances[2]['bundle'] = 'test_bundle'; |
|
125 $instances[2]['field_name'] = $this->field_names[0]; |
|
126 $instances[2]['entity_type'] = 'test_entity'; |
|
127 field_create_instance($instances[2]); |
|
128 |
|
129 // Create entities with support for revisions. |
|
130 for ($i = 1; $i < 5; $i++) { |
|
131 $entity = new stdClass(); |
|
132 $entity->ftid = $i; |
|
133 $entity->ftvid = $i; |
|
134 $entity->fttype = 'test_bundle'; |
|
135 $entity->{$this->field_names[0]}[LANGUAGE_NONE][0]['value'] = $i; |
|
136 |
|
137 drupal_write_record('test_entity', $entity); |
|
138 field_attach_insert('test_entity', $entity); |
|
139 drupal_write_record('test_entity_revision', $entity); |
|
140 } |
|
141 |
|
142 // Add two revisions to an entity. |
|
143 for ($i = 100; $i < 102; $i++) { |
|
144 $entity = new stdClass(); |
|
145 $entity->ftid = 4; |
|
146 $entity->ftvid = $i; |
|
147 $entity->fttype = 'test_bundle'; |
|
148 $entity->{$this->field_names[0]}[LANGUAGE_NONE][0]['value'] = $i; |
|
149 |
|
150 drupal_write_record('test_entity', $entity, 'ftid'); |
|
151 drupal_write_record('test_entity_revision', $entity); |
|
152 |
|
153 db_update('test_entity') |
|
154 ->fields(array('ftvid' => $entity->ftvid)) |
|
155 ->condition('ftid', $entity->ftid) |
|
156 ->execute(); |
|
157 |
|
158 field_attach_update('test_entity', $entity); |
|
159 } |
|
160 } |
|
161 |
|
162 /** |
|
163 * Tests EntityFieldQuery. |
|
164 */ |
|
165 function testEntityFieldQuery() { |
|
166 $query = new EntityFieldQuery(); |
|
167 $query |
|
168 ->entityCondition('entity_type', 'test_entity_bundle') |
|
169 ->entityCondition('entity_id', '5'); |
|
170 $this->assertEntityFieldQuery($query, array( |
|
171 array('test_entity_bundle', 5), |
|
172 ), 'Test query on an entity type with a generated bundle.'); |
|
173 |
|
174 // Test entity_type condition. |
|
175 $query = new EntityFieldQuery(); |
|
176 $query->entityCondition('entity_type', 'test_entity_bundle_key'); |
|
177 $this->assertEntityFieldQuery($query, array( |
|
178 array('test_entity_bundle_key', 1), |
|
179 array('test_entity_bundle_key', 2), |
|
180 array('test_entity_bundle_key', 3), |
|
181 array('test_entity_bundle_key', 4), |
|
182 array('test_entity_bundle_key', 5), |
|
183 array('test_entity_bundle_key', 6), |
|
184 ), 'Test entity entity_type condition.'); |
|
185 |
|
186 // Test entity_id condition. |
|
187 $query = new EntityFieldQuery(); |
|
188 $query |
|
189 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
190 ->entityCondition('entity_id', '3'); |
|
191 $this->assertEntityFieldQuery($query, array( |
|
192 array('test_entity_bundle_key', 3), |
|
193 ), 'Test entity entity_id condition.'); |
|
194 |
|
195 $query = new EntityFieldQuery(); |
|
196 $query |
|
197 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
198 ->propertyCondition('ftid', '3'); |
|
199 $this->assertEntityFieldQuery($query, array( |
|
200 array('test_entity_bundle_key', 3), |
|
201 ), 'Test entity entity_id condition and entity_id property condition.'); |
|
202 |
|
203 // Test bundle condition. |
|
204 $query = new EntityFieldQuery(); |
|
205 $query |
|
206 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
207 ->entityCondition('bundle', 'bundle1'); |
|
208 $this->assertEntityFieldQuery($query, array( |
|
209 array('test_entity_bundle_key', 1), |
|
210 array('test_entity_bundle_key', 2), |
|
211 array('test_entity_bundle_key', 3), |
|
212 array('test_entity_bundle_key', 4), |
|
213 ), 'Test entity bundle condition: bundle1.'); |
|
214 |
|
215 $query = new EntityFieldQuery(); |
|
216 $query |
|
217 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
218 ->entityCondition('bundle', 'bundle2'); |
|
219 $this->assertEntityFieldQuery($query, array( |
|
220 array('test_entity_bundle_key', 5), |
|
221 array('test_entity_bundle_key', 6), |
|
222 ), 'Test entity bundle condition: bundle2.'); |
|
223 |
|
224 $query = new EntityFieldQuery(); |
|
225 $query |
|
226 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
227 ->propertyCondition('fttype', 'bundle2'); |
|
228 $this->assertEntityFieldQuery($query, array( |
|
229 array('test_entity_bundle_key', 5), |
|
230 array('test_entity_bundle_key', 6), |
|
231 ), 'Test entity bundle condition and bundle property condition.'); |
|
232 |
|
233 // Test revision_id condition. |
|
234 $query = new EntityFieldQuery(); |
|
235 $query |
|
236 ->entityCondition('entity_type', 'test_entity') |
|
237 ->entityCondition('revision_id', '3'); |
|
238 $this->assertEntityFieldQuery($query, array( |
|
239 array('test_entity', 3), |
|
240 ), 'Test entity revision_id condition.'); |
|
241 |
|
242 $query = new EntityFieldQuery(); |
|
243 $query |
|
244 ->entityCondition('entity_type', 'test_entity') |
|
245 ->propertyCondition('ftvid', '3'); |
|
246 $this->assertEntityFieldQuery($query, array( |
|
247 array('test_entity', 3), |
|
248 ), 'Test entity revision_id condition and revision_id property condition.'); |
|
249 |
|
250 $query = new EntityFieldQuery(); |
|
251 $query |
|
252 ->entityCondition('entity_type', 'test_entity') |
|
253 ->fieldCondition($this->fields[0], 'value', 100, '>=') |
|
254 ->age(FIELD_LOAD_REVISION); |
|
255 $this->assertEntityFieldQuery($query, array( |
|
256 array('test_entity', 100), |
|
257 array('test_entity', 101), |
|
258 ), 'Test revision age.'); |
|
259 |
|
260 // Test that fields attached to the non-revision supporting entity |
|
261 // 'test_entity_bundle_key' are reachable in FIELD_LOAD_REVISION. |
|
262 $query = new EntityFieldQuery(); |
|
263 $query |
|
264 ->fieldCondition($this->fields[0], 'value', 100, '<') |
|
265 ->age(FIELD_LOAD_REVISION); |
|
266 $this->assertEntityFieldQuery($query, array( |
|
267 array('test_entity_bundle_key', 1), |
|
268 array('test_entity_bundle_key', 2), |
|
269 array('test_entity_bundle_key', 3), |
|
270 array('test_entity_bundle_key', 4), |
|
271 array('test_entity_bundle_key', 5), |
|
272 array('test_entity_bundle_key', 6), |
|
273 array('test_entity', 1), |
|
274 array('test_entity', 2), |
|
275 array('test_entity', 3), |
|
276 array('test_entity', 4), |
|
277 ), 'Test that fields are reachable from FIELD_LOAD_REVISION even for non-revision entities.'); |
|
278 |
|
279 // Test entity sort by entity_id. |
|
280 $query = new EntityFieldQuery(); |
|
281 $query |
|
282 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
283 ->entityOrderBy('entity_id', 'ASC'); |
|
284 $this->assertEntityFieldQuery($query, array( |
|
285 array('test_entity_bundle_key', 1), |
|
286 array('test_entity_bundle_key', 2), |
|
287 array('test_entity_bundle_key', 3), |
|
288 array('test_entity_bundle_key', 4), |
|
289 array('test_entity_bundle_key', 5), |
|
290 array('test_entity_bundle_key', 6), |
|
291 ), 'Test sort entity entity_id in ascending order.', TRUE); |
|
292 |
|
293 $query = new EntityFieldQuery(); |
|
294 $query |
|
295 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
296 ->entityOrderBy('entity_id', 'DESC'); |
|
297 $this->assertEntityFieldQuery($query, array( |
|
298 array('test_entity_bundle_key', 6), |
|
299 array('test_entity_bundle_key', 5), |
|
300 array('test_entity_bundle_key', 4), |
|
301 array('test_entity_bundle_key', 3), |
|
302 array('test_entity_bundle_key', 2), |
|
303 array('test_entity_bundle_key', 1), |
|
304 ), 'Test sort entity entity_id in descending order.', TRUE); |
|
305 |
|
306 // Test entity sort by entity_id, with a field condition. |
|
307 $query = new EntityFieldQuery(); |
|
308 $query |
|
309 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
310 ->fieldCondition($this->fields[0], 'value', 0, '>') |
|
311 ->entityOrderBy('entity_id', 'ASC'); |
|
312 $this->assertEntityFieldQuery($query, array( |
|
313 array('test_entity_bundle_key', 1), |
|
314 array('test_entity_bundle_key', 2), |
|
315 array('test_entity_bundle_key', 3), |
|
316 array('test_entity_bundle_key', 4), |
|
317 array('test_entity_bundle_key', 5), |
|
318 array('test_entity_bundle_key', 6), |
|
319 ), 'Test sort entity entity_id in ascending order, with a field condition.', TRUE); |
|
320 |
|
321 $query = new EntityFieldQuery(); |
|
322 $query |
|
323 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
324 ->fieldCondition($this->fields[0], 'value', 0, '>') |
|
325 ->propertyOrderBy('ftid', 'DESC'); |
|
326 $this->assertEntityFieldQuery($query, array( |
|
327 array('test_entity_bundle_key', 6), |
|
328 array('test_entity_bundle_key', 5), |
|
329 array('test_entity_bundle_key', 4), |
|
330 array('test_entity_bundle_key', 3), |
|
331 array('test_entity_bundle_key', 2), |
|
332 array('test_entity_bundle_key', 1), |
|
333 ), 'Test sort entity entity_id property in descending order, with a field condition.', TRUE); |
|
334 |
|
335 // Test property sort by entity id. |
|
336 $query = new EntityFieldQuery(); |
|
337 $query |
|
338 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
339 ->propertyOrderBy('ftid', 'ASC'); |
|
340 $this->assertEntityFieldQuery($query, array( |
|
341 array('test_entity_bundle_key', 1), |
|
342 array('test_entity_bundle_key', 2), |
|
343 array('test_entity_bundle_key', 3), |
|
344 array('test_entity_bundle_key', 4), |
|
345 array('test_entity_bundle_key', 5), |
|
346 array('test_entity_bundle_key', 6), |
|
347 ), 'Test sort entity entity_id property in ascending order.', TRUE); |
|
348 |
|
349 $query = new EntityFieldQuery(); |
|
350 $query |
|
351 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
352 ->propertyOrderBy('ftid', 'DESC'); |
|
353 $this->assertEntityFieldQuery($query, array( |
|
354 array('test_entity_bundle_key', 6), |
|
355 array('test_entity_bundle_key', 5), |
|
356 array('test_entity_bundle_key', 4), |
|
357 array('test_entity_bundle_key', 3), |
|
358 array('test_entity_bundle_key', 2), |
|
359 array('test_entity_bundle_key', 1), |
|
360 ), 'Test sort entity entity_id property in descending order.', TRUE); |
|
361 |
|
362 // Test property sort by entity id, with a field condition. |
|
363 $query = new EntityFieldQuery(); |
|
364 $query |
|
365 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
366 ->fieldCondition($this->fields[0], 'value', 0, '>') |
|
367 ->propertyOrderBy('ftid', 'ASC'); |
|
368 $this->assertEntityFieldQuery($query, array( |
|
369 array('test_entity_bundle_key', 1), |
|
370 array('test_entity_bundle_key', 2), |
|
371 array('test_entity_bundle_key', 3), |
|
372 array('test_entity_bundle_key', 4), |
|
373 array('test_entity_bundle_key', 5), |
|
374 array('test_entity_bundle_key', 6), |
|
375 ), 'Test sort entity entity_id property in ascending order, with a field condition.', TRUE); |
|
376 |
|
377 $query = new EntityFieldQuery(); |
|
378 $query |
|
379 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
380 ->fieldCondition($this->fields[0], 'value', 0, '>') |
|
381 ->propertyOrderBy('ftid', 'DESC'); |
|
382 $this->assertEntityFieldQuery($query, array( |
|
383 array('test_entity_bundle_key', 6), |
|
384 array('test_entity_bundle_key', 5), |
|
385 array('test_entity_bundle_key', 4), |
|
386 array('test_entity_bundle_key', 3), |
|
387 array('test_entity_bundle_key', 2), |
|
388 array('test_entity_bundle_key', 1), |
|
389 ), 'Test sort entity entity_id property in descending order, with a field condition.', TRUE); |
|
390 |
|
391 // Test entity sort by bundle. |
|
392 $query = new EntityFieldQuery(); |
|
393 $query |
|
394 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
395 ->entityOrderBy('bundle', 'ASC') |
|
396 ->propertyOrderBy('ftid', 'DESC'); |
|
397 $this->assertEntityFieldQuery($query, array( |
|
398 array('test_entity_bundle_key', 4), |
|
399 array('test_entity_bundle_key', 3), |
|
400 array('test_entity_bundle_key', 2), |
|
401 array('test_entity_bundle_key', 1), |
|
402 array('test_entity_bundle_key', 6), |
|
403 array('test_entity_bundle_key', 5), |
|
404 ), 'Test sort entity bundle in ascending order, property in descending order.', TRUE); |
|
405 |
|
406 $query = new EntityFieldQuery(); |
|
407 $query |
|
408 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
409 ->entityOrderBy('bundle', 'DESC') |
|
410 ->propertyOrderBy('ftid', 'ASC'); |
|
411 $this->assertEntityFieldQuery($query, array( |
|
412 array('test_entity_bundle_key', 5), |
|
413 array('test_entity_bundle_key', 6), |
|
414 array('test_entity_bundle_key', 1), |
|
415 array('test_entity_bundle_key', 2), |
|
416 array('test_entity_bundle_key', 3), |
|
417 array('test_entity_bundle_key', 4), |
|
418 ), 'Test sort entity bundle in descending order, property in ascending order.', TRUE); |
|
419 |
|
420 // Test entity sort by bundle, with a field condition. |
|
421 $query = new EntityFieldQuery(); |
|
422 $query |
|
423 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
424 ->fieldCondition($this->fields[0], 'value', 0, '>') |
|
425 ->entityOrderBy('bundle', 'ASC') |
|
426 ->propertyOrderBy('ftid', 'DESC'); |
|
427 $this->assertEntityFieldQuery($query, array( |
|
428 array('test_entity_bundle_key', 4), |
|
429 array('test_entity_bundle_key', 3), |
|
430 array('test_entity_bundle_key', 2), |
|
431 array('test_entity_bundle_key', 1), |
|
432 array('test_entity_bundle_key', 6), |
|
433 array('test_entity_bundle_key', 5), |
|
434 ), 'Test sort entity bundle in ascending order, property in descending order, with a field condition.', TRUE); |
|
435 |
|
436 $query = new EntityFieldQuery(); |
|
437 $query |
|
438 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
439 ->fieldCondition($this->fields[0], 'value', 0, '>') |
|
440 ->entityOrderBy('bundle', 'DESC') |
|
441 ->propertyOrderBy('ftid', 'ASC'); |
|
442 $this->assertEntityFieldQuery($query, array( |
|
443 array('test_entity_bundle_key', 5), |
|
444 array('test_entity_bundle_key', 6), |
|
445 array('test_entity_bundle_key', 1), |
|
446 array('test_entity_bundle_key', 2), |
|
447 array('test_entity_bundle_key', 3), |
|
448 array('test_entity_bundle_key', 4), |
|
449 ), 'Test sort entity bundle in descending order, property in ascending order, with a field condition.', TRUE); |
|
450 |
|
451 // Test entity sort by bundle, field. |
|
452 $query = new EntityFieldQuery(); |
|
453 $query |
|
454 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
455 ->entityOrderBy('bundle', 'ASC') |
|
456 ->fieldOrderBy($this->fields[0], 'value', 'DESC'); |
|
457 $this->assertEntityFieldQuery($query, array( |
|
458 array('test_entity_bundle_key', 4), |
|
459 array('test_entity_bundle_key', 3), |
|
460 array('test_entity_bundle_key', 2), |
|
461 array('test_entity_bundle_key', 1), |
|
462 array('test_entity_bundle_key', 6), |
|
463 array('test_entity_bundle_key', 5), |
|
464 ), 'Test sort entity bundle in ascending order, field in descending order.', TRUE); |
|
465 |
|
466 $query = new EntityFieldQuery(); |
|
467 $query |
|
468 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
469 ->entityOrderBy('bundle', 'DESC') |
|
470 ->fieldOrderBy($this->fields[0], 'value', 'ASC'); |
|
471 $this->assertEntityFieldQuery($query, array( |
|
472 array('test_entity_bundle_key', 5), |
|
473 array('test_entity_bundle_key', 6), |
|
474 array('test_entity_bundle_key', 1), |
|
475 array('test_entity_bundle_key', 2), |
|
476 array('test_entity_bundle_key', 3), |
|
477 array('test_entity_bundle_key', 4), |
|
478 ), 'Test sort entity bundle in descending order, field in ascending order.', TRUE); |
|
479 |
|
480 // Test entity sort by revision_id. |
|
481 $query = new EntityFieldQuery(); |
|
482 $query |
|
483 ->entityCondition('entity_type', 'test_entity') |
|
484 ->entityOrderBy('revision_id', 'ASC'); |
|
485 $this->assertEntityFieldQuery($query, array( |
|
486 array('test_entity', 1), |
|
487 array('test_entity', 2), |
|
488 array('test_entity', 3), |
|
489 array('test_entity', 4), |
|
490 ), 'Test sort entity revision_id in ascending order.', TRUE); |
|
491 |
|
492 $query = new EntityFieldQuery(); |
|
493 $query |
|
494 ->entityCondition('entity_type', 'test_entity') |
|
495 ->entityOrderBy('revision_id', 'DESC'); |
|
496 $this->assertEntityFieldQuery($query, array( |
|
497 array('test_entity', 4), |
|
498 array('test_entity', 3), |
|
499 array('test_entity', 2), |
|
500 array('test_entity', 1), |
|
501 ), 'Test sort entity revision_id in descending order.', TRUE); |
|
502 |
|
503 // Test entity sort by revision_id, with a field condition. |
|
504 $query = new EntityFieldQuery(); |
|
505 $query |
|
506 ->entityCondition('entity_type', 'test_entity') |
|
507 ->fieldCondition($this->fields[0], 'value', 0, '>') |
|
508 ->entityOrderBy('revision_id', 'ASC'); |
|
509 $this->assertEntityFieldQuery($query, array( |
|
510 array('test_entity', 1), |
|
511 array('test_entity', 2), |
|
512 array('test_entity', 3), |
|
513 array('test_entity', 4), |
|
514 ), 'Test sort entity revision_id in ascending order, with a field condition.', TRUE); |
|
515 |
|
516 $query = new EntityFieldQuery(); |
|
517 $query |
|
518 ->entityCondition('entity_type', 'test_entity') |
|
519 ->fieldCondition($this->fields[0], 'value', 0, '>') |
|
520 ->entityOrderBy('revision_id', 'DESC'); |
|
521 $this->assertEntityFieldQuery($query, array( |
|
522 array('test_entity', 4), |
|
523 array('test_entity', 3), |
|
524 array('test_entity', 2), |
|
525 array('test_entity', 1), |
|
526 ), 'Test sort entity revision_id in descending order, with a field condition.', TRUE); |
|
527 |
|
528 // Test property sort by revision_id. |
|
529 $query = new EntityFieldQuery(); |
|
530 $query |
|
531 ->entityCondition('entity_type', 'test_entity') |
|
532 ->propertyOrderBy('ftvid', 'ASC'); |
|
533 $this->assertEntityFieldQuery($query, array( |
|
534 array('test_entity', 1), |
|
535 array('test_entity', 2), |
|
536 array('test_entity', 3), |
|
537 array('test_entity', 4), |
|
538 ), 'Test sort entity revision_id property in ascending order.', TRUE); |
|
539 |
|
540 $query = new EntityFieldQuery(); |
|
541 $query |
|
542 ->entityCondition('entity_type', 'test_entity') |
|
543 ->propertyOrderBy('ftvid', 'DESC'); |
|
544 $this->assertEntityFieldQuery($query, array( |
|
545 array('test_entity', 4), |
|
546 array('test_entity', 3), |
|
547 array('test_entity', 2), |
|
548 array('test_entity', 1), |
|
549 ), 'Test sort entity revision_id property in descending order.', TRUE); |
|
550 |
|
551 // Test property sort by revision_id, with a field condition. |
|
552 $query = new EntityFieldQuery(); |
|
553 $query |
|
554 ->entityCondition('entity_type', 'test_entity') |
|
555 ->fieldCondition($this->fields[0], 'value', 0, '>') |
|
556 ->propertyOrderBy('ftvid', 'ASC'); |
|
557 $this->assertEntityFieldQuery($query, array( |
|
558 array('test_entity', 1), |
|
559 array('test_entity', 2), |
|
560 array('test_entity', 3), |
|
561 array('test_entity', 4), |
|
562 ), 'Test sort entity revision_id property in ascending order, with a field condition.', TRUE); |
|
563 |
|
564 $query = new EntityFieldQuery(); |
|
565 $query |
|
566 ->entityCondition('entity_type', 'test_entity') |
|
567 ->fieldCondition($this->fields[0], 'value', 0, '>') |
|
568 ->propertyOrderBy('ftvid', 'DESC'); |
|
569 $this->assertEntityFieldQuery($query, array( |
|
570 array('test_entity', 4), |
|
571 array('test_entity', 3), |
|
572 array('test_entity', 2), |
|
573 array('test_entity', 1), |
|
574 ), 'Test sort entity revision_id property in descending order, with a field condition.', TRUE); |
|
575 |
|
576 $query = new EntityFieldQuery(); |
|
577 $query |
|
578 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
579 ->fieldOrderBy($this->fields[0], 'value', 'ASC'); |
|
580 $this->assertEntityFieldQuery($query, array( |
|
581 array('test_entity_bundle_key', 1), |
|
582 array('test_entity_bundle_key', 2), |
|
583 array('test_entity_bundle_key', 3), |
|
584 array('test_entity_bundle_key', 4), |
|
585 array('test_entity_bundle_key', 5), |
|
586 array('test_entity_bundle_key', 6), |
|
587 ), 'Test sort field in ascending order without field condition.', TRUE); |
|
588 |
|
589 $query = new EntityFieldQuery(); |
|
590 $query |
|
591 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
592 ->fieldOrderBy($this->fields[0], 'value', 'DESC'); |
|
593 $this->assertEntityFieldQuery($query, array( |
|
594 array('test_entity_bundle_key', 6), |
|
595 array('test_entity_bundle_key', 5), |
|
596 array('test_entity_bundle_key', 4), |
|
597 array('test_entity_bundle_key', 3), |
|
598 array('test_entity_bundle_key', 2), |
|
599 array('test_entity_bundle_key', 1), |
|
600 ), 'Test sort field in descending order without field condition.', TRUE); |
|
601 |
|
602 $query = new EntityFieldQuery(); |
|
603 $query |
|
604 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
605 ->fieldCondition($this->fields[0], 'value', 0, '>') |
|
606 ->fieldOrderBy($this->fields[0], 'value', 'ASC'); |
|
607 $this->assertEntityFieldQuery($query, array( |
|
608 array('test_entity_bundle_key', 1), |
|
609 array('test_entity_bundle_key', 2), |
|
610 array('test_entity_bundle_key', 3), |
|
611 array('test_entity_bundle_key', 4), |
|
612 array('test_entity_bundle_key', 5), |
|
613 array('test_entity_bundle_key', 6), |
|
614 ), 'Test sort field in ascending order.', TRUE); |
|
615 |
|
616 $query = new EntityFieldQuery(); |
|
617 $query |
|
618 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
619 ->fieldCondition($this->fields[0], 'value', 0, '>') |
|
620 ->fieldOrderBy($this->fields[0], 'value', 'DESC'); |
|
621 $this->assertEntityFieldQuery($query, array( |
|
622 array('test_entity_bundle_key', 6), |
|
623 array('test_entity_bundle_key', 5), |
|
624 array('test_entity_bundle_key', 4), |
|
625 array('test_entity_bundle_key', 3), |
|
626 array('test_entity_bundle_key', 2), |
|
627 array('test_entity_bundle_key', 1), |
|
628 ), 'Test sort field in descending order.', TRUE); |
|
629 |
|
630 // Test "in" operation with entity entity_type condition and entity_id |
|
631 // property condition. |
|
632 $query = new EntityFieldQuery(); |
|
633 $query |
|
634 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
635 ->propertyCondition('ftid', array(1, 3, 4), 'IN'); |
|
636 $this->assertEntityFieldQuery($query, array( |
|
637 array('test_entity_bundle_key', 1), |
|
638 array('test_entity_bundle_key', 3), |
|
639 array('test_entity_bundle_key', 4), |
|
640 ), 'Test "in" operation with entity entity_type condition and entity_id property condition.'); |
|
641 |
|
642 // Test "in" operation with entity entity_type condition and entity_id |
|
643 // property condition. Sort in descending order by entity_id. |
|
644 $query = new EntityFieldQuery(); |
|
645 $query |
|
646 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
647 ->propertyCondition('ftid', array(1, 3, 4), 'IN') |
|
648 ->propertyOrderBy('ftid', 'DESC'); |
|
649 $this->assertEntityFieldQuery($query, array( |
|
650 array('test_entity_bundle_key', 4), |
|
651 array('test_entity_bundle_key', 3), |
|
652 array('test_entity_bundle_key', 1), |
|
653 ), 'Test "in" operation with entity entity_type condition and entity_id property condition. Sort entity_id in descending order.', TRUE); |
|
654 |
|
655 // Test query count |
|
656 $query = new EntityFieldQuery(); |
|
657 $query_count = $query |
|
658 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
659 ->count() |
|
660 ->execute(); |
|
661 $this->assertEqual($query_count, 6, 'Test query count on entity condition.'); |
|
662 |
|
663 $query = new EntityFieldQuery(); |
|
664 $query_count = $query |
|
665 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
666 ->propertyCondition('ftid', '1') |
|
667 ->count() |
|
668 ->execute(); |
|
669 $this->assertEqual($query_count, 1, 'Test query count on entity and property condition.'); |
|
670 |
|
671 $query = new EntityFieldQuery(); |
|
672 $query_count = $query |
|
673 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
674 ->propertyCondition('ftid', '4', '>') |
|
675 ->count() |
|
676 ->execute(); |
|
677 $this->assertEqual($query_count, 2, 'Test query count on entity and property condition with operator.'); |
|
678 |
|
679 $query = new EntityFieldQuery(); |
|
680 $query_count = $query |
|
681 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
682 ->fieldCondition($this->fields[0], 'value', 3, '=') |
|
683 ->count() |
|
684 ->execute(); |
|
685 $this->assertEqual($query_count, 1, 'Test query count on field condition.'); |
|
686 |
|
687 // First, test without options. |
|
688 $query = new EntityFieldQuery(); |
|
689 $query |
|
690 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
691 ->propertyCondition('fttype', 'und', 'CONTAINS'); |
|
692 $this->assertEntityFieldQuery($query, array( |
|
693 array('test_entity_bundle_key', 1), |
|
694 array('test_entity_bundle_key', 2), |
|
695 array('test_entity_bundle_key', 3), |
|
696 array('test_entity_bundle_key', 4), |
|
697 array('test_entity_bundle_key', 5), |
|
698 array('test_entity_bundle_key', 6), |
|
699 ), 'Test the "contains" operation on a property.'); |
|
700 |
|
701 $query = new EntityFieldQuery(); |
|
702 $query->fieldCondition($this->fields[1], 'shape', 'uar', 'CONTAINS'); |
|
703 $this->assertEntityFieldQuery($query, array( |
|
704 array('test_entity_bundle', 5), |
|
705 ), 'Test the "contains" operation on a field.'); |
|
706 |
|
707 $query = new EntityFieldQuery(); |
|
708 $query |
|
709 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
710 ->propertyCondition('ftid', 1, '='); |
|
711 $this->assertEntityFieldQuery($query, array( |
|
712 array('test_entity_bundle_key', 1), |
|
713 ), 'Test the "equal to" operation on a property.'); |
|
714 |
|
715 $query = new EntityFieldQuery(); |
|
716 $query->fieldCondition($this->fields[0], 'value', 3, '='); |
|
717 $this->assertEntityFieldQuery($query, array( |
|
718 array('test_entity_bundle_key', 3), |
|
719 array('test_entity', 3), |
|
720 ), 'Test the "equal to" operation on a field.'); |
|
721 |
|
722 $query = new EntityFieldQuery(); |
|
723 $query |
|
724 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
725 ->propertyCondition('ftid', 3, '<>'); |
|
726 $this->assertEntityFieldQuery($query, array( |
|
727 array('test_entity_bundle_key', 1), |
|
728 array('test_entity_bundle_key', 2), |
|
729 array('test_entity_bundle_key', 4), |
|
730 array('test_entity_bundle_key', 5), |
|
731 array('test_entity_bundle_key', 6), |
|
732 ), 'Test the "not equal to" operation on a property.'); |
|
733 |
|
734 $query = new EntityFieldQuery(); |
|
735 $query->fieldCondition($this->fields[0], 'value', 3, '<>'); |
|
736 $this->assertEntityFieldQuery($query, array( |
|
737 array('test_entity_bundle_key', 1), |
|
738 array('test_entity_bundle_key', 2), |
|
739 array('test_entity_bundle_key', 4), |
|
740 array('test_entity_bundle_key', 5), |
|
741 array('test_entity_bundle_key', 6), |
|
742 array('test_entity', 1), |
|
743 array('test_entity', 2), |
|
744 array('test_entity', 4), |
|
745 ), 'Test the "not equal to" operation on a field.'); |
|
746 |
|
747 $query = new EntityFieldQuery(); |
|
748 $query |
|
749 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
750 ->propertyCondition('ftid', 3, '!='); |
|
751 $this->assertEntityFieldQuery($query, array( |
|
752 array('test_entity_bundle_key', 1), |
|
753 array('test_entity_bundle_key', 2), |
|
754 array('test_entity_bundle_key', 4), |
|
755 array('test_entity_bundle_key', 5), |
|
756 array('test_entity_bundle_key', 6), |
|
757 ), 'Test the "not equal to" operation on a property.'); |
|
758 |
|
759 $query = new EntityFieldQuery(); |
|
760 $query->fieldCondition($this->fields[0], 'value', 3, '!='); |
|
761 $this->assertEntityFieldQuery($query, array( |
|
762 array('test_entity_bundle_key', 1), |
|
763 array('test_entity_bundle_key', 2), |
|
764 array('test_entity_bundle_key', 4), |
|
765 array('test_entity_bundle_key', 5), |
|
766 array('test_entity_bundle_key', 6), |
|
767 array('test_entity', 1), |
|
768 array('test_entity', 2), |
|
769 array('test_entity', 4), |
|
770 ), 'Test the "not equal to" operation on a field.'); |
|
771 |
|
772 $query = new EntityFieldQuery(); |
|
773 $query |
|
774 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
775 ->propertyCondition('ftid', 2, '<'); |
|
776 $this->assertEntityFieldQuery($query, array( |
|
777 array('test_entity_bundle_key', 1), |
|
778 ), 'Test the "less than" operation on a property.'); |
|
779 |
|
780 $query = new EntityFieldQuery(); |
|
781 $query->fieldCondition($this->fields[0], 'value', 2, '<'); |
|
782 $this->assertEntityFieldQuery($query, array( |
|
783 array('test_entity_bundle_key', 1), |
|
784 array('test_entity', 1), |
|
785 ), 'Test the "less than" operation on a field.'); |
|
786 |
|
787 $query = new EntityFieldQuery(); |
|
788 $query |
|
789 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
790 ->propertyCondition('ftid', 2, '<='); |
|
791 $this->assertEntityFieldQuery($query, array( |
|
792 array('test_entity_bundle_key', 1), |
|
793 array('test_entity_bundle_key', 2), |
|
794 ), 'Test the "less than or equal to" operation on a property.'); |
|
795 |
|
796 $query = new EntityFieldQuery(); |
|
797 $query->fieldCondition($this->fields[0], 'value', 2, '<='); |
|
798 $this->assertEntityFieldQuery($query, array( |
|
799 array('test_entity_bundle_key', 1), |
|
800 array('test_entity_bundle_key', 2), |
|
801 array('test_entity', 1), |
|
802 array('test_entity', 2), |
|
803 ), 'Test the "less than or equal to" operation on a field.'); |
|
804 |
|
805 $query = new EntityFieldQuery(); |
|
806 $query |
|
807 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
808 ->propertyCondition('ftid', 4, '>'); |
|
809 $this->assertEntityFieldQuery($query, array( |
|
810 array('test_entity_bundle_key', 5), |
|
811 array('test_entity_bundle_key', 6), |
|
812 ), 'Test the "greater than" operation on a property.'); |
|
813 |
|
814 $query = new EntityFieldQuery(); |
|
815 $query->fieldCondition($this->fields[0], 'value', 2, '>'); |
|
816 $this->assertEntityFieldQuery($query, array( |
|
817 array('test_entity_bundle_key', 3), |
|
818 array('test_entity_bundle_key', 4), |
|
819 array('test_entity_bundle_key', 5), |
|
820 array('test_entity_bundle_key', 6), |
|
821 array('test_entity', 3), |
|
822 array('test_entity', 4), |
|
823 ), 'Test the "greater than" operation on a field.'); |
|
824 |
|
825 $query = new EntityFieldQuery(); |
|
826 $query |
|
827 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
828 ->propertyCondition('ftid', 4, '>='); |
|
829 $this->assertEntityFieldQuery($query, array( |
|
830 array('test_entity_bundle_key', 4), |
|
831 array('test_entity_bundle_key', 5), |
|
832 array('test_entity_bundle_key', 6), |
|
833 ), 'Test the "greater than or equal to" operation on a property.'); |
|
834 |
|
835 $query = new EntityFieldQuery(); |
|
836 $query->fieldCondition($this->fields[0], 'value', 3, '>='); |
|
837 $this->assertEntityFieldQuery($query, array( |
|
838 array('test_entity_bundle_key', 3), |
|
839 array('test_entity_bundle_key', 4), |
|
840 array('test_entity_bundle_key', 5), |
|
841 array('test_entity_bundle_key', 6), |
|
842 array('test_entity', 3), |
|
843 array('test_entity', 4), |
|
844 ), 'Test the "greater than or equal to" operation on a field.'); |
|
845 |
|
846 $query = new EntityFieldQuery(); |
|
847 $query |
|
848 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
849 ->propertyCondition('ftid', array(3, 4), 'NOT IN'); |
|
850 $this->assertEntityFieldQuery($query, array( |
|
851 array('test_entity_bundle_key', 1), |
|
852 array('test_entity_bundle_key', 2), |
|
853 array('test_entity_bundle_key', 5), |
|
854 array('test_entity_bundle_key', 6), |
|
855 ), 'Test the "not in" operation on a property.'); |
|
856 |
|
857 $query = new EntityFieldQuery(); |
|
858 $query->fieldCondition($this->fields[0], 'value', array(3, 4, 100, 101), 'NOT IN'); |
|
859 $this->assertEntityFieldQuery($query, array( |
|
860 array('test_entity_bundle_key', 1), |
|
861 array('test_entity_bundle_key', 2), |
|
862 array('test_entity_bundle_key', 5), |
|
863 array('test_entity_bundle_key', 6), |
|
864 array('test_entity', 1), |
|
865 array('test_entity', 2), |
|
866 ), 'Test the "not in" operation on a field.'); |
|
867 |
|
868 $query = new EntityFieldQuery(); |
|
869 $query |
|
870 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
871 ->propertyCondition('ftid', array(3, 4), 'IN'); |
|
872 $this->assertEntityFieldQuery($query, array( |
|
873 array('test_entity_bundle_key', 3), |
|
874 array('test_entity_bundle_key', 4), |
|
875 ), 'Test the "in" operation on a property.'); |
|
876 |
|
877 $query = new EntityFieldQuery(); |
|
878 $query->fieldCondition($this->fields[0], 'value', array(2, 3), 'IN'); |
|
879 $this->assertEntityFieldQuery($query, array( |
|
880 array('test_entity_bundle_key', 2), |
|
881 array('test_entity_bundle_key', 3), |
|
882 array('test_entity', 2), |
|
883 array('test_entity', 3), |
|
884 ), 'Test the "in" operation on a field.'); |
|
885 |
|
886 $query = new EntityFieldQuery(); |
|
887 $query |
|
888 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
889 ->propertyCondition('ftid', array(1, 3), 'BETWEEN'); |
|
890 $this->assertEntityFieldQuery($query, array( |
|
891 array('test_entity_bundle_key', 1), |
|
892 array('test_entity_bundle_key', 2), |
|
893 array('test_entity_bundle_key', 3), |
|
894 ), 'Test the "between" operation on a property.'); |
|
895 |
|
896 $query = new EntityFieldQuery(); |
|
897 $query->fieldCondition($this->fields[0], 'value', array(1, 3), 'BETWEEN'); |
|
898 $this->assertEntityFieldQuery($query, array( |
|
899 array('test_entity_bundle_key', 1), |
|
900 array('test_entity_bundle_key', 2), |
|
901 array('test_entity_bundle_key', 3), |
|
902 array('test_entity', 1), |
|
903 array('test_entity', 2), |
|
904 array('test_entity', 3), |
|
905 ), 'Test the "between" operation on a field.'); |
|
906 |
|
907 $query = new EntityFieldQuery(); |
|
908 $query |
|
909 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
910 ->propertyCondition('fttype', 'bun', 'STARTS_WITH'); |
|
911 $this->assertEntityFieldQuery($query, array( |
|
912 array('test_entity_bundle_key', 1), |
|
913 array('test_entity_bundle_key', 2), |
|
914 array('test_entity_bundle_key', 3), |
|
915 array('test_entity_bundle_key', 4), |
|
916 array('test_entity_bundle_key', 5), |
|
917 array('test_entity_bundle_key', 6), |
|
918 ), 'Test the "starts_with" operation on a property.'); |
|
919 |
|
920 $query = new EntityFieldQuery(); |
|
921 $query->fieldCondition($this->fields[1], 'shape', 'squ', 'STARTS_WITH'); |
|
922 $this->assertEntityFieldQuery($query, array( |
|
923 array('test_entity_bundle', 5), |
|
924 ), 'Test the "starts_with" operation on a field.'); |
|
925 |
|
926 $query = new EntityFieldQuery(); |
|
927 $query->fieldCondition($this->fields[0], 'value', 3); |
|
928 $this->assertEntityFieldQuery($query, array( |
|
929 array('test_entity_bundle_key', 3), |
|
930 array('test_entity', 3), |
|
931 ), 'Test omission of an operator with a single item.'); |
|
932 |
|
933 $query = new EntityFieldQuery(); |
|
934 $query->fieldCondition($this->fields[0], 'value', array(2, 3)); |
|
935 $this->assertEntityFieldQuery($query, array( |
|
936 array('test_entity_bundle_key', 2), |
|
937 array('test_entity_bundle_key', 3), |
|
938 array('test_entity', 2), |
|
939 array('test_entity', 3), |
|
940 ), 'Test omission of an operator with multiple items.'); |
|
941 |
|
942 $query = new EntityFieldQuery(); |
|
943 $query |
|
944 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
945 ->propertyCondition('ftid', 1, '>') |
|
946 ->fieldCondition($this->fields[0], 'value', 4, '<'); |
|
947 $this->assertEntityFieldQuery($query, array( |
|
948 array('test_entity_bundle_key', 2), |
|
949 array('test_entity_bundle_key', 3), |
|
950 ), 'Test entity, property and field conditions.'); |
|
951 |
|
952 $query = new EntityFieldQuery(); |
|
953 $query |
|
954 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
955 ->entityCondition('bundle', 'bundle', 'STARTS_WITH') |
|
956 ->propertyCondition('ftid', 4) |
|
957 ->fieldCondition($this->fields[0], 'value', 4); |
|
958 $this->assertEntityFieldQuery($query, array( |
|
959 array('test_entity_bundle_key', 4), |
|
960 ), 'Test entity condition with "starts_with" operation, and property and field conditions.'); |
|
961 |
|
962 $query = new EntityFieldQuery(); |
|
963 $query |
|
964 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
965 ->propertyOrderBy('ftid', 'ASC') |
|
966 ->range(0, 2); |
|
967 $this->assertEntityFieldQuery($query, array( |
|
968 array('test_entity_bundle_key', 1), |
|
969 array('test_entity_bundle_key', 2), |
|
970 ), 'Test limit on a property.', TRUE); |
|
971 |
|
972 $query = new EntityFieldQuery(); |
|
973 $query |
|
974 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
975 ->fieldCondition($this->fields[0], 'value', 0, '>=') |
|
976 ->fieldOrderBy($this->fields[0], 'value', 'ASC') |
|
977 ->range(0, 2); |
|
978 $this->assertEntityFieldQuery($query, array( |
|
979 array('test_entity_bundle_key', 1), |
|
980 array('test_entity_bundle_key', 2), |
|
981 ), 'Test limit on a field.', TRUE); |
|
982 |
|
983 $query = new EntityFieldQuery(); |
|
984 $query |
|
985 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
986 ->propertyOrderBy('ftid', 'ASC') |
|
987 ->range(4, 6); |
|
988 $this->assertEntityFieldQuery($query, array( |
|
989 array('test_entity_bundle_key', 5), |
|
990 array('test_entity_bundle_key', 6), |
|
991 ), 'Test offset on a property.', TRUE); |
|
992 |
|
993 $query = new EntityFieldQuery(); |
|
994 $query |
|
995 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
996 ->fieldCondition($this->fields[0], 'value', 0, '>') |
|
997 ->fieldOrderBy($this->fields[0], 'value', 'ASC') |
|
998 ->range(2, 4); |
|
999 $this->assertEntityFieldQuery($query, array( |
|
1000 array('test_entity_bundle_key', 3), |
|
1001 array('test_entity_bundle_key', 4), |
|
1002 array('test_entity_bundle_key', 5), |
|
1003 array('test_entity_bundle_key', 6), |
|
1004 ), 'Test offset on a field.', TRUE); |
|
1005 |
|
1006 for ($i = 6; $i < 10; $i++) { |
|
1007 $entity = new stdClass(); |
|
1008 $entity->ftid = $i; |
|
1009 $entity->fttype = 'test_entity_bundle'; |
|
1010 $entity->{$this->field_names[0]}[LANGUAGE_NONE][0]['value'] = $i - 5; |
|
1011 drupal_write_record('test_entity_bundle', $entity); |
|
1012 field_attach_insert('test_entity_bundle', $entity); |
|
1013 } |
|
1014 |
|
1015 $query = new EntityFieldQuery(); |
|
1016 $query->fieldCondition($this->fields[0], 'value', 2, '>'); |
|
1017 $this->assertEntityFieldQuery($query, array( |
|
1018 array('test_entity_bundle_key', 3), |
|
1019 array('test_entity_bundle_key', 4), |
|
1020 array('test_entity_bundle_key', 5), |
|
1021 array('test_entity_bundle_key', 6), |
|
1022 array('test_entity', 3), |
|
1023 array('test_entity', 4), |
|
1024 array('test_entity_bundle', 8), |
|
1025 array('test_entity_bundle', 9), |
|
1026 ), 'Select a field across multiple entities.'); |
|
1027 |
|
1028 $query = new EntityFieldQuery(); |
|
1029 $query |
|
1030 ->fieldCondition($this->fields[1], 'shape', 'square') |
|
1031 ->fieldCondition($this->fields[1], 'color', 'blue'); |
|
1032 $this->assertEntityFieldQuery($query, array( |
|
1033 array('test_entity_bundle', 5), |
|
1034 ), 'Test without a delta group.'); |
|
1035 |
|
1036 $query = new EntityFieldQuery(); |
|
1037 $query |
|
1038 ->fieldCondition($this->fields[1], 'shape', 'square', '=', 'group') |
|
1039 ->fieldCondition($this->fields[1], 'color', 'blue', '=', 'group'); |
|
1040 $this->assertEntityFieldQuery($query, array(), 'Test with a delta group.'); |
|
1041 |
|
1042 // Test query on a deleted field. |
|
1043 field_attach_delete_bundle('test_entity_bundle_key', 'bundle1'); |
|
1044 field_attach_delete_bundle('test_entity', 'test_bundle'); |
|
1045 $query = new EntityFieldQuery(); |
|
1046 $query->fieldCondition($this->fields[0], 'value', '3'); |
|
1047 $this->assertEntityFieldQuery($query, array( |
|
1048 array('test_entity_bundle', 8), |
|
1049 ), 'Test query on a field after deleting field from some entities.'); |
|
1050 |
|
1051 field_attach_delete_bundle('test_entity_bundle', 'test_entity_bundle'); |
|
1052 $query = new EntityFieldQuery(); |
|
1053 $query->fieldCondition($this->fields[0], 'value', '3'); |
|
1054 $this->assertEntityFieldQuery($query, array(), 'Test query on a field after deleting field from all entities.'); |
|
1055 |
|
1056 $query = new EntityFieldQuery(); |
|
1057 $query |
|
1058 ->fieldCondition($this->fields[0], 'value', '3') |
|
1059 ->deleted(TRUE); |
|
1060 $this->assertEntityFieldQuery($query, array( |
|
1061 array('test_entity_bundle_key', 3), |
|
1062 array('test_entity_bundle', 8), |
|
1063 array('test_entity', 3), |
|
1064 ), 'Test query on a deleted field with deleted option set to TRUE.'); |
|
1065 |
|
1066 $pass = FALSE; |
|
1067 $query = new EntityFieldQuery(); |
|
1068 try { |
|
1069 $query->execute(); |
|
1070 } |
|
1071 catch (EntityFieldQueryException $exception) { |
|
1072 $pass = ($exception->getMessage() == t('For this query an entity type must be specified.')); |
|
1073 } |
|
1074 $this->assertTrue($pass, "Can't query the universe."); |
|
1075 } |
|
1076 |
|
1077 /** |
|
1078 * Tests querying translatable fields. |
|
1079 */ |
|
1080 function testEntityFieldQueryTranslatable() { |
|
1081 |
|
1082 // Make a test field translatable AND cardinality one. |
|
1083 $this->fields[0]['translatable'] = TRUE; |
|
1084 $this->fields[0]['cardinality'] = 1; |
|
1085 field_update_field($this->fields[0]); |
|
1086 field_test_entity_info_translatable('test_entity', TRUE); |
|
1087 |
|
1088 // Create more items with different languages. |
|
1089 $entity = new stdClass(); |
|
1090 $entity->ftid = 1; |
|
1091 $entity->ftvid = 1; |
|
1092 $entity->fttype = 'test_bundle'; |
|
1093 |
|
1094 // Set fields in two languages with one field value. |
|
1095 foreach (array(LANGUAGE_NONE, 'en') as $langcode) { |
|
1096 $entity->{$this->field_names[0]}[$langcode][0]['value'] = 1234; |
|
1097 } |
|
1098 |
|
1099 field_attach_update('test_entity', $entity); |
|
1100 |
|
1101 // Look up number of results when querying a single entity with multilingual |
|
1102 // field values. |
|
1103 $query = new EntityFieldQuery(); |
|
1104 $query_count = $query |
|
1105 ->entityCondition('entity_type', 'test_entity') |
|
1106 ->entityCondition('bundle', 'test_bundle') |
|
1107 ->entityCondition('entity_id', '1') |
|
1108 ->fieldCondition($this->fields[0]) |
|
1109 ->count() |
|
1110 ->execute(); |
|
1111 |
|
1112 $this->assertEqual($query_count, 1, "Count on translatable cardinality one field is correct."); |
|
1113 } |
|
1114 |
|
1115 /** |
|
1116 * Tests field meta conditions. |
|
1117 */ |
|
1118 function testEntityFieldQueryMetaConditions() { |
|
1119 // Make a test field translatable. |
|
1120 $this->fields[0]['translatable'] = TRUE; |
|
1121 field_update_field($this->fields[0]); |
|
1122 field_test_entity_info_translatable('test_entity', TRUE); |
|
1123 |
|
1124 // Create more items with different languages. |
|
1125 $entity = new stdClass(); |
|
1126 $entity->ftid = 1; |
|
1127 $entity->ftvid = 1; |
|
1128 $entity->fttype = 'test_bundle'; |
|
1129 $j = 0; |
|
1130 |
|
1131 foreach (array(LANGUAGE_NONE, 'en') as $langcode) { |
|
1132 for ($i = 0; $i < 4; $i++) { |
|
1133 $entity->{$this->field_names[0]}[$langcode][$i]['value'] = $i + $j; |
|
1134 } |
|
1135 $j += 4; |
|
1136 } |
|
1137 |
|
1138 field_attach_update('test_entity', $entity); |
|
1139 |
|
1140 // Test delta field meta condition. |
|
1141 $query = new EntityFieldQuery(); |
|
1142 $query |
|
1143 ->entityCondition('entity_type', 'test_entity', '=') |
|
1144 ->fieldDeltaCondition($this->fields[0], 0, '>'); |
|
1145 $this->assertEntityFieldQuery($query, array( |
|
1146 array('test_entity', 1), |
|
1147 ), 'Test with a delta meta condition.'); |
|
1148 |
|
1149 // Test language field meta condition. |
|
1150 $query = new EntityFieldQuery(); |
|
1151 $query |
|
1152 ->entityCondition('entity_type', 'test_entity', '=') |
|
1153 ->fieldLanguageCondition($this->fields[0], LANGUAGE_NONE, '<>'); |
|
1154 $this->assertEntityFieldQuery($query, array( |
|
1155 array('test_entity', 1), |
|
1156 ), 'Test with a language meta condition.'); |
|
1157 |
|
1158 // Test language field meta condition. |
|
1159 $query = new EntityFieldQuery(); |
|
1160 $query |
|
1161 ->entityCondition('entity_type', 'test_entity', '=') |
|
1162 ->fieldLanguageCondition($this->fields[0], LANGUAGE_NONE, '!='); |
|
1163 $this->assertEntityFieldQuery($query, array( |
|
1164 array('test_entity', 1), |
|
1165 ), 'Test with a language meta condition.'); |
|
1166 |
|
1167 // Test delta grouping. |
|
1168 $query = new EntityFieldQuery(); |
|
1169 $query |
|
1170 ->entityCondition('entity_type', 'test_entity', '=') |
|
1171 ->fieldCondition($this->fields[0], 'value', 0, '=', 'group') |
|
1172 ->fieldDeltaCondition($this->fields[0], 1, '<', 'group'); |
|
1173 $this->assertEntityFieldQuery($query, array( |
|
1174 array('test_entity', 1), |
|
1175 ), 'Test with a grouped delta meta condition.'); |
|
1176 |
|
1177 $query = new EntityFieldQuery(); |
|
1178 $query |
|
1179 ->entityCondition('entity_type', 'test_entity', '=') |
|
1180 ->fieldCondition($this->fields[0], 'value', 0, '=', 'group') |
|
1181 ->fieldDeltaCondition($this->fields[0], 1, '>=', 'group'); |
|
1182 $this->assertEntityFieldQuery($query, array(), 'Test with a grouped delta meta condition (empty result set).'); |
|
1183 |
|
1184 // Test language grouping. |
|
1185 $query = new EntityFieldQuery(); |
|
1186 $query |
|
1187 ->entityCondition('entity_type', 'test_entity', '=') |
|
1188 ->fieldCondition($this->fields[0], 'value', 0, '=', NULL, 'group') |
|
1189 ->fieldLanguageCondition($this->fields[0], 'en', '<>', NULL, 'group'); |
|
1190 $this->assertEntityFieldQuery($query, array( |
|
1191 array('test_entity', 1), |
|
1192 ), 'Test with a grouped language meta condition.'); |
|
1193 |
|
1194 // Test language grouping. |
|
1195 $query = new EntityFieldQuery(); |
|
1196 $query |
|
1197 ->entityCondition('entity_type', 'test_entity', '=') |
|
1198 ->fieldCondition($this->fields[0], 'value', 0, '=', NULL, 'group') |
|
1199 ->fieldLanguageCondition($this->fields[0], 'en', '!=', NULL, 'group'); |
|
1200 $this->assertEntityFieldQuery($query, array( |
|
1201 array('test_entity', 1), |
|
1202 ), 'Test with a grouped language meta condition.'); |
|
1203 |
|
1204 $query = new EntityFieldQuery(); |
|
1205 $query |
|
1206 ->entityCondition('entity_type', 'test_entity', '=') |
|
1207 ->fieldCondition($this->fields[0], 'value', 0, '=', NULL, 'group') |
|
1208 ->fieldLanguageCondition($this->fields[0], LANGUAGE_NONE, '<>', NULL, 'group'); |
|
1209 $this->assertEntityFieldQuery($query, array(), 'Test with a grouped language meta condition (empty result set).'); |
|
1210 |
|
1211 $query = new EntityFieldQuery(); |
|
1212 $query |
|
1213 ->entityCondition('entity_type', 'test_entity', '=') |
|
1214 ->fieldCondition($this->fields[0], 'value', 0, '=', NULL, 'group') |
|
1215 ->fieldLanguageCondition($this->fields[0], LANGUAGE_NONE, '!=', NULL, 'group'); |
|
1216 $this->assertEntityFieldQuery($query, array(), 'Test with a grouped language meta condition (empty result set).'); |
|
1217 |
|
1218 // Test delta and language grouping. |
|
1219 $query = new EntityFieldQuery(); |
|
1220 $query |
|
1221 ->entityCondition('entity_type', 'test_entity', '=') |
|
1222 ->fieldCondition($this->fields[0], 'value', 0, '=', 'delta', 'language') |
|
1223 ->fieldDeltaCondition($this->fields[0], 1, '<', 'delta', 'language') |
|
1224 ->fieldLanguageCondition($this->fields[0], 'en', '<>', 'delta', 'language'); |
|
1225 $this->assertEntityFieldQuery($query, array( |
|
1226 array('test_entity', 1), |
|
1227 ), 'Test with a grouped delta + language meta condition.'); |
|
1228 |
|
1229 // Test delta and language grouping. |
|
1230 $query = new EntityFieldQuery(); |
|
1231 $query |
|
1232 ->entityCondition('entity_type', 'test_entity', '=') |
|
1233 ->fieldCondition($this->fields[0], 'value', 0, '=', 'delta', 'language') |
|
1234 ->fieldDeltaCondition($this->fields[0], 1, '<', 'delta', 'language') |
|
1235 ->fieldLanguageCondition($this->fields[0], 'en', '!=', 'delta', 'language'); |
|
1236 $this->assertEntityFieldQuery($query, array( |
|
1237 array('test_entity', 1), |
|
1238 ), 'Test with a grouped delta + language meta condition.'); |
|
1239 |
|
1240 $query = new EntityFieldQuery(); |
|
1241 $query |
|
1242 ->entityCondition('entity_type', 'test_entity', '=') |
|
1243 ->fieldCondition($this->fields[0], 'value', 0, '=', 'delta', 'language') |
|
1244 ->fieldDeltaCondition($this->fields[0], 1, '>=', 'delta', 'language') |
|
1245 ->fieldLanguageCondition($this->fields[0], 'en', '<>', 'delta', 'language'); |
|
1246 $this->assertEntityFieldQuery($query, array(), 'Test with a grouped delta + language meta condition (empty result set, delta condition unsatisifed).'); |
|
1247 |
|
1248 $query = new EntityFieldQuery(); |
|
1249 $query |
|
1250 ->entityCondition('entity_type', 'test_entity', '=') |
|
1251 ->fieldCondition($this->fields[0], 'value', 0, '=', 'delta', 'language') |
|
1252 ->fieldDeltaCondition($this->fields[0], 1, '>=', 'delta', 'language') |
|
1253 ->fieldLanguageCondition($this->fields[0], 'en', '!=', 'delta', 'language'); |
|
1254 $this->assertEntityFieldQuery($query, array(), 'Test with a grouped delta + language meta condition (empty result set, delta condition unsatisifed).'); |
|
1255 |
|
1256 $query = new EntityFieldQuery(); |
|
1257 $query |
|
1258 ->entityCondition('entity_type', 'test_entity', '=') |
|
1259 ->fieldCondition($this->fields[0], 'value', 0, '=', 'delta', 'language') |
|
1260 ->fieldDeltaCondition($this->fields[0], 1, '<', 'delta', 'language') |
|
1261 ->fieldLanguageCondition($this->fields[0], LANGUAGE_NONE, '<>', 'delta', 'language'); |
|
1262 $this->assertEntityFieldQuery($query, array(), 'Test with a grouped delta + language meta condition (empty result set, language condition unsatisifed).'); |
|
1263 |
|
1264 $query = new EntityFieldQuery(); |
|
1265 $query |
|
1266 ->entityCondition('entity_type', 'test_entity', '=') |
|
1267 ->fieldCondition($this->fields[0], 'value', 0, '=', 'delta', 'language') |
|
1268 ->fieldDeltaCondition($this->fields[0], 1, '<', 'delta', 'language') |
|
1269 ->fieldLanguageCondition($this->fields[0], LANGUAGE_NONE, '!=', 'delta', 'language'); |
|
1270 $this->assertEntityFieldQuery($query, array(), 'Test with a grouped delta + language meta condition (empty result set, language condition unsatisifed).'); |
|
1271 |
|
1272 $query = new EntityFieldQuery(); |
|
1273 $query |
|
1274 ->entityCondition('entity_type', 'test_entity', '=') |
|
1275 ->fieldCondition($this->fields[0], 'value', 0, '=', 'delta', 'language') |
|
1276 ->fieldDeltaCondition($this->fields[0], 1, '>=', 'delta', 'language') |
|
1277 ->fieldLanguageCondition($this->fields[0], LANGUAGE_NONE, '<>', 'delta', 'language'); |
|
1278 $this->assertEntityFieldQuery($query, array(), 'Test with a grouped delta + language meta condition (empty result set, both conditions unsatisifed).'); |
|
1279 |
|
1280 $query = new EntityFieldQuery(); |
|
1281 $query |
|
1282 ->entityCondition('entity_type', 'test_entity', '=') |
|
1283 ->fieldCondition($this->fields[0], 'value', 0, '=', 'delta', 'language') |
|
1284 ->fieldDeltaCondition($this->fields[0], 1, '>=', 'delta', 'language') |
|
1285 ->fieldLanguageCondition($this->fields[0], LANGUAGE_NONE, '!=', 'delta', 'language'); |
|
1286 $this->assertEntityFieldQuery($query, array(), 'Test with a grouped delta + language meta condition (empty result set, both conditions unsatisifed).'); |
|
1287 |
|
1288 // Test grouping with another field to ensure that grouping cache is reset |
|
1289 // properly. |
|
1290 $query = new EntityFieldQuery(); |
|
1291 $query |
|
1292 ->entityCondition('entity_type', 'test_entity_bundle', '=') |
|
1293 ->fieldCondition($this->fields[1], 'shape', 'circle', '=', 'delta', 'language') |
|
1294 ->fieldCondition($this->fields[1], 'color', 'blue', '=', 'delta', 'language') |
|
1295 ->fieldDeltaCondition($this->fields[1], 1, '=', 'delta', 'language') |
|
1296 ->fieldLanguageCondition($this->fields[1], LANGUAGE_NONE, '=', 'delta', 'language'); |
|
1297 $this->assertEntityFieldQuery($query, array( |
|
1298 array('test_entity_bundle', 5), |
|
1299 ), 'Test grouping cache.'); |
|
1300 } |
|
1301 |
|
1302 /** |
|
1303 * Tests the routing feature of EntityFieldQuery. |
|
1304 */ |
|
1305 function testEntityFieldQueryRouting() { |
|
1306 // Entity-only query. |
|
1307 $query = new EntityFieldQuery(); |
|
1308 $query->entityCondition('entity_type', 'test_entity_bundle_key'); |
|
1309 $this->assertIdentical($query->queryCallback(), array($query, 'propertyQuery'), 'Entity-only queries are handled by the propertyQuery handler.'); |
|
1310 |
|
1311 // Field-only query. |
|
1312 $query = new EntityFieldQuery(); |
|
1313 $query->fieldCondition($this->fields[0], 'value', '3'); |
|
1314 $this->assertIdentical($query->queryCallback(), 'field_sql_storage_field_storage_query', 'Pure field queries are handled by the Field storage handler.'); |
|
1315 |
|
1316 // Mixed entity and field query. |
|
1317 $query = new EntityFieldQuery(); |
|
1318 $query |
|
1319 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
1320 ->fieldCondition($this->fields[0], 'value', '3'); |
|
1321 $this->assertIdentical($query->queryCallback(), 'field_sql_storage_field_storage_query', 'Mixed queries are handled by the Field storage handler.'); |
|
1322 |
|
1323 // Overriding with $query->executeCallback. |
|
1324 $query = new EntityFieldQuery(); |
|
1325 $query->entityCondition('entity_type', 'test_entity_bundle_key'); |
|
1326 $query->executeCallback = 'field_test_dummy_field_storage_query'; |
|
1327 $this->assertEntityFieldQuery($query, array( |
|
1328 array('user', 1), |
|
1329 ), 'executeCallback can override the query handler.'); |
|
1330 |
|
1331 // Overriding with $query->executeCallback via hook_entity_query_alter(). |
|
1332 $query = new EntityFieldQuery(); |
|
1333 $query->entityCondition('entity_type', 'test_entity_bundle_key'); |
|
1334 // Add a flag that will be caught by field_test_entity_query_alter(). |
|
1335 $query->alterMyExecuteCallbackPlease = TRUE; |
|
1336 $this->assertEntityFieldQuery($query, array( |
|
1337 array('user', 1), |
|
1338 ), 'executeCallback can override the query handler when set in a hook_entity_query_alter().'); |
|
1339 |
|
1340 // Mixed-storage queries. |
|
1341 $query = new EntityFieldQuery(); |
|
1342 $query |
|
1343 ->fieldCondition($this->fields[0], 'value', '3') |
|
1344 ->fieldCondition($this->fields[1], 'shape', 'squ', 'STARTS_WITH'); |
|
1345 // Alter the storage of the field. |
|
1346 $query->fields[1]['storage']['module'] = 'dummy_storage'; |
|
1347 try { |
|
1348 $query->queryCallback(); |
|
1349 } |
|
1350 catch (EntityFieldQueryException $exception) { |
|
1351 $pass = ($exception->getMessage() == t("Can't handle more than one field storage engine")); |
|
1352 } |
|
1353 $this->assertTrue($pass, 'Cannot query across field storage engines.'); |
|
1354 } |
|
1355 |
|
1356 /** |
|
1357 * Tests the pager integration of EntityFieldQuery. |
|
1358 */ |
|
1359 function testEntityFieldQueryPager() { |
|
1360 // Test pager in propertyQuery |
|
1361 $_GET['page'] = '0,1'; |
|
1362 $query = new EntityFieldQuery(); |
|
1363 $query |
|
1364 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
1365 ->propertyOrderBy('ftid', 'ASC') |
|
1366 ->pager(3, 0); |
|
1367 $this->assertEntityFieldQuery($query, array( |
|
1368 array('test_entity_bundle_key', 1), |
|
1369 array('test_entity_bundle_key', 2), |
|
1370 array('test_entity_bundle_key', 3), |
|
1371 ), 'Test pager integration in propertyQuery: page 1.', TRUE); |
|
1372 |
|
1373 $query = new EntityFieldQuery(); |
|
1374 $query |
|
1375 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
1376 ->propertyOrderBy('ftid', 'ASC') |
|
1377 ->pager(3, 1); |
|
1378 $this->assertEntityFieldQuery($query, array( |
|
1379 array('test_entity_bundle_key', 4), |
|
1380 array('test_entity_bundle_key', 5), |
|
1381 array('test_entity_bundle_key', 6), |
|
1382 ), 'Test pager integration in propertyQuery: page 2.', TRUE); |
|
1383 |
|
1384 // Test pager in field storage |
|
1385 $_GET['page'] = '0,1'; |
|
1386 $query = new EntityFieldQuery(); |
|
1387 $query |
|
1388 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
1389 ->fieldCondition($this->fields[0], 'value', 0, '>') |
|
1390 ->propertyOrderBy('ftid', 'ASC') |
|
1391 ->pager(2, 0); |
|
1392 $this->assertEntityFieldQuery($query, array( |
|
1393 array('test_entity_bundle_key', 1), |
|
1394 array('test_entity_bundle_key', 2), |
|
1395 ), 'Test pager integration in field storage: page 1.', TRUE); |
|
1396 |
|
1397 $query = new EntityFieldQuery(); |
|
1398 $query |
|
1399 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
1400 ->fieldCondition($this->fields[0], 'value', 0, '>') |
|
1401 ->propertyOrderBy('ftid', 'ASC') |
|
1402 ->pager(2, 1); |
|
1403 $this->assertEntityFieldQuery($query, array( |
|
1404 array('test_entity_bundle_key', 3), |
|
1405 array('test_entity_bundle_key', 4), |
|
1406 ), 'Test pager integration in field storage: page 2.', TRUE); |
|
1407 |
|
1408 unset($_GET['page']); |
|
1409 } |
|
1410 |
|
1411 /** |
|
1412 * Tests disabling the pager in EntityFieldQuery. |
|
1413 */ |
|
1414 function testEntityFieldQueryDisablePager() { |
|
1415 // Test enabling a pager and then disabling it. |
|
1416 $query = new EntityFieldQuery(); |
|
1417 $query |
|
1418 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
1419 ->propertyOrderBy('ftid', 'ASC') |
|
1420 ->pager(1) |
|
1421 ->pager(0); |
|
1422 $this->assertEntityFieldQuery($query, array( |
|
1423 array('test_entity_bundle_key', 1), |
|
1424 array('test_entity_bundle_key', 2), |
|
1425 array('test_entity_bundle_key', 3), |
|
1426 array('test_entity_bundle_key', 4), |
|
1427 array('test_entity_bundle_key', 5), |
|
1428 array('test_entity_bundle_key', 6), |
|
1429 ), 'All test entities are listed when the pager is enabled and then disabled.', TRUE); |
|
1430 } |
|
1431 |
|
1432 /** |
|
1433 * Tests the TableSort integration of EntityFieldQuery. |
|
1434 */ |
|
1435 function testEntityFieldQueryTableSort() { |
|
1436 // Test TableSort in propertyQuery |
|
1437 $_GET['sort'] = 'asc'; |
|
1438 $_GET['order'] = 'Id'; |
|
1439 $header = array( |
|
1440 'id' => array('data' => 'Id', 'type' => 'property', 'specifier' => 'ftid'), |
|
1441 'type' => array('data' => 'Type', 'type' => 'entity', 'specifier' => 'bundle'), |
|
1442 ); |
|
1443 $query = new EntityFieldQuery(); |
|
1444 $query |
|
1445 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
1446 ->tableSort($header); |
|
1447 $this->assertEntityFieldQuery($query, array( |
|
1448 array('test_entity_bundle_key', 1), |
|
1449 array('test_entity_bundle_key', 2), |
|
1450 array('test_entity_bundle_key', 3), |
|
1451 array('test_entity_bundle_key', 4), |
|
1452 array('test_entity_bundle_key', 5), |
|
1453 array('test_entity_bundle_key', 6), |
|
1454 ), 'Test TableSort by property: ftid ASC in propertyQuery.', TRUE); |
|
1455 |
|
1456 $_GET['sort'] = 'desc'; |
|
1457 $_GET['order'] = 'Id'; |
|
1458 $query = new EntityFieldQuery(); |
|
1459 $query |
|
1460 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
1461 ->tableSort($header); |
|
1462 $this->assertEntityFieldQuery($query, array( |
|
1463 array('test_entity_bundle_key', 6), |
|
1464 array('test_entity_bundle_key', 5), |
|
1465 array('test_entity_bundle_key', 4), |
|
1466 array('test_entity_bundle_key', 3), |
|
1467 array('test_entity_bundle_key', 2), |
|
1468 array('test_entity_bundle_key', 1), |
|
1469 ), 'Test TableSort by property: ftid DESC in propertyQuery.', TRUE); |
|
1470 |
|
1471 $_GET['sort'] = 'asc'; |
|
1472 $_GET['order'] = 'Type'; |
|
1473 $query = new EntityFieldQuery(); |
|
1474 $query |
|
1475 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
1476 ->tableSort($header); |
|
1477 $this->assertEntityFieldQuery($query, array( |
|
1478 array('test_entity_bundle_key', 1), |
|
1479 array('test_entity_bundle_key', 2), |
|
1480 array('test_entity_bundle_key', 3), |
|
1481 array('test_entity_bundle_key', 4), |
|
1482 array('test_entity_bundle_key', 5), |
|
1483 array('test_entity_bundle_key', 6), |
|
1484 ), 'Test TableSort by entity: bundle ASC in propertyQuery.', TRUE); |
|
1485 |
|
1486 $_GET['sort'] = 'desc'; |
|
1487 $_GET['order'] = 'Type'; |
|
1488 $query = new EntityFieldQuery(); |
|
1489 $query |
|
1490 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
1491 ->tableSort($header); |
|
1492 $this->assertEntityFieldQuery($query, array( |
|
1493 array('test_entity_bundle_key', 5), |
|
1494 array('test_entity_bundle_key', 6), |
|
1495 array('test_entity_bundle_key', 1), |
|
1496 array('test_entity_bundle_key', 2), |
|
1497 array('test_entity_bundle_key', 3), |
|
1498 array('test_entity_bundle_key', 4), |
|
1499 ), 'Test TableSort by entity: bundle DESC in propertyQuery.', TRUE); |
|
1500 |
|
1501 // Test TableSort in field storage |
|
1502 $_GET['sort'] = 'asc'; |
|
1503 $_GET['order'] = 'Id'; |
|
1504 $header = array( |
|
1505 'id' => array('data' => 'Id', 'type' => 'property', 'specifier' => 'ftid'), |
|
1506 'type' => array('data' => 'Type', 'type' => 'entity', 'specifier' => 'bundle'), |
|
1507 'field' => array('data' => 'Field', 'type' => 'field', 'specifier' => array('field' => $this->field_names[0], 'column' => 'value')), |
|
1508 ); |
|
1509 $query = new EntityFieldQuery(); |
|
1510 $query |
|
1511 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
1512 ->fieldCondition($this->fields[0], 'value', 0, '>') |
|
1513 ->tableSort($header); |
|
1514 $this->assertEntityFieldQuery($query, array( |
|
1515 array('test_entity_bundle_key', 1), |
|
1516 array('test_entity_bundle_key', 2), |
|
1517 array('test_entity_bundle_key', 3), |
|
1518 array('test_entity_bundle_key', 4), |
|
1519 array('test_entity_bundle_key', 5), |
|
1520 array('test_entity_bundle_key', 6), |
|
1521 ), 'Test TableSort by property: ftid ASC in field storage.', TRUE); |
|
1522 |
|
1523 $_GET['sort'] = 'desc'; |
|
1524 $_GET['order'] = 'Id'; |
|
1525 $query = new EntityFieldQuery(); |
|
1526 $query |
|
1527 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
1528 ->fieldCondition($this->fields[0], 'value', 0, '>') |
|
1529 ->tableSort($header); |
|
1530 $this->assertEntityFieldQuery($query, array( |
|
1531 array('test_entity_bundle_key', 6), |
|
1532 array('test_entity_bundle_key', 5), |
|
1533 array('test_entity_bundle_key', 4), |
|
1534 array('test_entity_bundle_key', 3), |
|
1535 array('test_entity_bundle_key', 2), |
|
1536 array('test_entity_bundle_key', 1), |
|
1537 ), 'Test TableSort by property: ftid DESC in field storage.', TRUE); |
|
1538 |
|
1539 $_GET['sort'] = 'asc'; |
|
1540 $_GET['order'] = 'Type'; |
|
1541 $query = new EntityFieldQuery(); |
|
1542 $query |
|
1543 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
1544 ->fieldCondition($this->fields[0], 'value', 0, '>') |
|
1545 ->tableSort($header) |
|
1546 ->entityOrderBy('entity_id', 'DESC'); |
|
1547 $this->assertEntityFieldQuery($query, array( |
|
1548 array('test_entity_bundle_key', 4), |
|
1549 array('test_entity_bundle_key', 3), |
|
1550 array('test_entity_bundle_key', 2), |
|
1551 array('test_entity_bundle_key', 1), |
|
1552 array('test_entity_bundle_key', 6), |
|
1553 array('test_entity_bundle_key', 5), |
|
1554 ), 'Test TableSort by entity: bundle ASC in field storage.', TRUE); |
|
1555 |
|
1556 $_GET['sort'] = 'desc'; |
|
1557 $_GET['order'] = 'Type'; |
|
1558 $query = new EntityFieldQuery(); |
|
1559 $query |
|
1560 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
1561 ->fieldCondition($this->fields[0], 'value', 0, '>') |
|
1562 ->tableSort($header) |
|
1563 ->entityOrderBy('entity_id', 'ASC'); |
|
1564 $this->assertEntityFieldQuery($query, array( |
|
1565 array('test_entity_bundle_key', 5), |
|
1566 array('test_entity_bundle_key', 6), |
|
1567 array('test_entity_bundle_key', 1), |
|
1568 array('test_entity_bundle_key', 2), |
|
1569 array('test_entity_bundle_key', 3), |
|
1570 array('test_entity_bundle_key', 4), |
|
1571 ), 'Test TableSort by entity: bundle DESC in field storage.', TRUE); |
|
1572 |
|
1573 $_GET['sort'] = 'asc'; |
|
1574 $_GET['order'] = 'Field'; |
|
1575 $query = new EntityFieldQuery(); |
|
1576 $query |
|
1577 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
1578 ->fieldCondition($this->fields[0], 'value', 0, '>') |
|
1579 ->tableSort($header); |
|
1580 $this->assertEntityFieldQuery($query, array( |
|
1581 array('test_entity_bundle_key', 1), |
|
1582 array('test_entity_bundle_key', 2), |
|
1583 array('test_entity_bundle_key', 3), |
|
1584 array('test_entity_bundle_key', 4), |
|
1585 array('test_entity_bundle_key', 5), |
|
1586 array('test_entity_bundle_key', 6), |
|
1587 ), 'Test TableSort by field ASC.', TRUE); |
|
1588 |
|
1589 $_GET['sort'] = 'desc'; |
|
1590 $_GET['order'] = 'Field'; |
|
1591 $query = new EntityFieldQuery(); |
|
1592 $query |
|
1593 ->entityCondition('entity_type', 'test_entity_bundle_key') |
|
1594 ->fieldCondition($this->fields[0], 'value', 0, '>') |
|
1595 ->tableSort($header); |
|
1596 $this->assertEntityFieldQuery($query, array( |
|
1597 array('test_entity_bundle_key', 6), |
|
1598 array('test_entity_bundle_key', 5), |
|
1599 array('test_entity_bundle_key', 4), |
|
1600 array('test_entity_bundle_key', 3), |
|
1601 array('test_entity_bundle_key', 2), |
|
1602 array('test_entity_bundle_key', 1), |
|
1603 ), 'Test TableSort by field DESC.', TRUE); |
|
1604 |
|
1605 unset($_GET['sort']); |
|
1606 unset($_GET['order']); |
|
1607 } |
|
1608 |
|
1609 /** |
|
1610 * Tests EntityFieldQuery access on non-node entities. |
|
1611 */ |
|
1612 function testEntityFieldQueryAccess() { |
|
1613 // Test as a user with ability to bypass node access. |
|
1614 $privileged_user = $this->drupalCreateUser(array('bypass node access', 'access content')); |
|
1615 $this->drupalLogin($privileged_user); |
|
1616 $this->drupalGet('entity-query-access/test/' . $this->fields[0]['field_name']); |
|
1617 $this->assertText('Found entity', 'Returned access response with entities.'); |
|
1618 $this->drupalLogout(); |
|
1619 |
|
1620 // Test as a user that does not have ability to bypass node access or view |
|
1621 // all nodes. |
|
1622 $regular_user = $this->drupalCreateUser(array('access content')); |
|
1623 $this->drupalLogin($regular_user); |
|
1624 $this->drupalGet('entity-query-access/test/' . $this->fields[0]['field_name']); |
|
1625 $this->assertText('Found entity', 'Returned access response with entities.'); |
|
1626 $this->drupalLogout(); |
|
1627 } |
|
1628 |
|
1629 /** |
|
1630 * Fetches the results of an EntityFieldQuery and compares. |
|
1631 * |
|
1632 * @param $query |
|
1633 * An EntityFieldQuery to run. |
|
1634 * @param $intended_results |
|
1635 * A list of results, every entry is again a list, first being the entity |
|
1636 * type, the second being the entity_id. |
|
1637 * @param $message |
|
1638 * The message to be displayed as the result of this test. |
|
1639 * @param $ordered |
|
1640 * If FALSE then the result of EntityFieldQuery will match |
|
1641 * $intended_results even if the order is not the same. If TRUE then order |
|
1642 * should match too. |
|
1643 */ |
|
1644 function assertEntityFieldQuery($query, $intended_results, $message, $ordered = FALSE) { |
|
1645 $results = array(); |
|
1646 try { |
|
1647 foreach ($query->execute() as $entity_type => $entity_ids) { |
|
1648 foreach ($entity_ids as $entity_id => $stub_entity) { |
|
1649 $results[] = array($entity_type, $entity_id); |
|
1650 } |
|
1651 } |
|
1652 if (!isset($ordered) || !$ordered) { |
|
1653 sort($results); |
|
1654 sort($intended_results); |
|
1655 } |
|
1656 $this->assertEqual($results, $intended_results, $message); |
|
1657 } |
|
1658 catch (Exception $e) { |
|
1659 $this->fail('Exception thrown: '. $e->getMessage()); |
|
1660 } |
|
1661 } |
|
1662 |
|
1663 /** |
|
1664 * Tests EFQ table prefixing with multiple conditions and an altered join. |
|
1665 * |
|
1666 * @see field_test_query_efq_table_prefixing_test_alter() |
|
1667 */ |
|
1668 function testTablePrefixing() { |
|
1669 $query = new EntityFieldQuery(); |
|
1670 $query = $query |
|
1671 ->entityCondition('entity_type', 'test_entity') |
|
1672 ->entityCondition('bundle', 'test_bundle') |
|
1673 ->entityCondition('entity_id', '1') |
|
1674 ->addTag('efq_table_prefixing_test'); |
|
1675 |
|
1676 $expected = array(array('test_entity', 1)); |
|
1677 |
|
1678 $this->assertEntityFieldQuery($query, $expected, 'An EntityFieldQuery returns the expected results when altered with an additional join on the base table.'); |
|
1679 } |
|
1680 |
|
1681 } |