danielebarchiesi@4
|
1 <?php
|
danielebarchiesi@4
|
2
|
danielebarchiesi@4
|
3 /**
|
danielebarchiesi@4
|
4 * @file
|
danielebarchiesi@4
|
5 * Contains EntityReferenceHandlersTestCase
|
danielebarchiesi@4
|
6 */
|
danielebarchiesi@4
|
7
|
danielebarchiesi@4
|
8 /**
|
danielebarchiesi@4
|
9 * Test for Entity Reference handlers.
|
danielebarchiesi@4
|
10 */
|
danielebarchiesi@4
|
11 class EntityReferenceHandlersTestCase extends DrupalWebTestCase {
|
danielebarchiesi@4
|
12 public static function getInfo() {
|
danielebarchiesi@4
|
13 return array(
|
danielebarchiesi@4
|
14 'name' => 'Entity Reference Handlers',
|
danielebarchiesi@4
|
15 'description' => 'Tests for the base handlers provided by Entity Reference.',
|
danielebarchiesi@4
|
16 'group' => 'Entity Reference',
|
danielebarchiesi@4
|
17 );
|
danielebarchiesi@4
|
18 }
|
danielebarchiesi@4
|
19
|
danielebarchiesi@4
|
20 public function setUp() {
|
danielebarchiesi@4
|
21 parent::setUp('entityreference');
|
danielebarchiesi@4
|
22 }
|
danielebarchiesi@4
|
23
|
danielebarchiesi@4
|
24 protected function assertReferencable($field, $tests, $handler_name) {
|
danielebarchiesi@4
|
25 $handler = entityreference_get_selection_handler($field);
|
danielebarchiesi@4
|
26
|
danielebarchiesi@4
|
27 foreach ($tests as $test) {
|
danielebarchiesi@4
|
28 foreach ($test['arguments'] as $arguments) {
|
danielebarchiesi@4
|
29 $result = call_user_func_array(array($handler, 'getReferencableEntities'), $arguments);
|
danielebarchiesi@4
|
30 $this->assertEqual($result, $test['result'], format_string('Valid result set returned by @handler.', array('@handler' => $handler_name)));
|
danielebarchiesi@4
|
31
|
danielebarchiesi@4
|
32 $result = call_user_func_array(array($handler, 'countReferencableEntities'), $arguments);
|
danielebarchiesi@4
|
33 if (!empty($test['result'])) {
|
danielebarchiesi@4
|
34 $bundle = key($test['result']);
|
danielebarchiesi@4
|
35 $count = count($test['result'][$bundle]);
|
danielebarchiesi@4
|
36 }
|
danielebarchiesi@4
|
37 else {
|
danielebarchiesi@4
|
38 $count = 0;
|
danielebarchiesi@4
|
39 }
|
danielebarchiesi@4
|
40
|
danielebarchiesi@4
|
41 $this->assertEqual($result, $count, format_string('Valid count returned by @handler.', array('@handler' => $handler_name)));
|
danielebarchiesi@4
|
42 }
|
danielebarchiesi@4
|
43 }
|
danielebarchiesi@4
|
44 }
|
danielebarchiesi@4
|
45
|
danielebarchiesi@4
|
46 /**
|
danielebarchiesi@4
|
47 * Test the node-specific overrides of the entity handler.
|
danielebarchiesi@4
|
48 */
|
danielebarchiesi@4
|
49 public function testNodeHandler() {
|
danielebarchiesi@4
|
50 // Build a fake field instance.
|
danielebarchiesi@4
|
51 $field = array(
|
danielebarchiesi@4
|
52 'translatable' => FALSE,
|
danielebarchiesi@4
|
53 'entity_types' => array(),
|
danielebarchiesi@4
|
54 'settings' => array(
|
danielebarchiesi@4
|
55 'handler' => 'base',
|
danielebarchiesi@4
|
56 'target_type' => 'node',
|
danielebarchiesi@4
|
57 'handler_settings' => array(
|
danielebarchiesi@4
|
58 'target_bundles' => array(),
|
danielebarchiesi@4
|
59 ),
|
danielebarchiesi@4
|
60 ),
|
danielebarchiesi@4
|
61 'field_name' => 'test_field',
|
danielebarchiesi@4
|
62 'type' => 'entityreference',
|
danielebarchiesi@4
|
63 'cardinality' => '1',
|
danielebarchiesi@4
|
64 );
|
danielebarchiesi@4
|
65
|
danielebarchiesi@4
|
66 // Build a set of test data.
|
danielebarchiesi@4
|
67 // Titles contain HTML-special characters to test escaping.
|
danielebarchiesi@4
|
68 $nodes = array(
|
danielebarchiesi@4
|
69 'published1' => (object) array(
|
danielebarchiesi@4
|
70 'type' => 'article',
|
danielebarchiesi@4
|
71 'status' => 1,
|
danielebarchiesi@4
|
72 'title' => 'Node published1 (<&>)',
|
danielebarchiesi@4
|
73 'uid' => 1,
|
danielebarchiesi@4
|
74 ),
|
danielebarchiesi@4
|
75 'published2' => (object) array(
|
danielebarchiesi@4
|
76 'type' => 'article',
|
danielebarchiesi@4
|
77 'status' => 1,
|
danielebarchiesi@4
|
78 'title' => 'Node published2 (<&>)',
|
danielebarchiesi@4
|
79 'uid' => 1,
|
danielebarchiesi@4
|
80 ),
|
danielebarchiesi@4
|
81 'unpublished' => (object) array(
|
danielebarchiesi@4
|
82 'type' => 'article',
|
danielebarchiesi@4
|
83 'status' => 0,
|
danielebarchiesi@4
|
84 'title' => 'Node unpublished (<&>)',
|
danielebarchiesi@4
|
85 'uid' => 1,
|
danielebarchiesi@4
|
86 ),
|
danielebarchiesi@4
|
87 );
|
danielebarchiesi@4
|
88
|
danielebarchiesi@4
|
89 $node_labels = array();
|
danielebarchiesi@4
|
90 foreach ($nodes as $key => $node) {
|
danielebarchiesi@4
|
91 node_save($node);
|
danielebarchiesi@4
|
92 $node_labels[$key] = check_plain($node->title);
|
danielebarchiesi@4
|
93 }
|
danielebarchiesi@4
|
94
|
danielebarchiesi@4
|
95 // Test as a non-admin.
|
danielebarchiesi@4
|
96 $normal_user = $this->drupalCreateUser(array('access content'));
|
danielebarchiesi@4
|
97 $GLOBALS['user'] = $normal_user;
|
danielebarchiesi@4
|
98 $referencable_tests = array(
|
danielebarchiesi@4
|
99 array(
|
danielebarchiesi@4
|
100 'arguments' => array(
|
danielebarchiesi@4
|
101 array(NULL, 'CONTAINS'),
|
danielebarchiesi@4
|
102 ),
|
danielebarchiesi@4
|
103 'result' => array(
|
danielebarchiesi@4
|
104 'article' => array(
|
danielebarchiesi@4
|
105 $nodes['published1']->nid => $node_labels['published1'],
|
danielebarchiesi@4
|
106 $nodes['published2']->nid => $node_labels['published2'],
|
danielebarchiesi@4
|
107 ),
|
danielebarchiesi@4
|
108 ),
|
danielebarchiesi@4
|
109 ),
|
danielebarchiesi@4
|
110 array(
|
danielebarchiesi@4
|
111 'arguments' => array(
|
danielebarchiesi@4
|
112 array('published1', 'CONTAINS'),
|
danielebarchiesi@4
|
113 array('Published1', 'CONTAINS'),
|
danielebarchiesi@4
|
114 ),
|
danielebarchiesi@4
|
115 'result' => array(
|
danielebarchiesi@4
|
116 'article' => array(
|
danielebarchiesi@4
|
117 $nodes['published1']->nid => $node_labels['published1'],
|
danielebarchiesi@4
|
118 ),
|
danielebarchiesi@4
|
119 ),
|
danielebarchiesi@4
|
120 ),
|
danielebarchiesi@4
|
121 array(
|
danielebarchiesi@4
|
122 'arguments' => array(
|
danielebarchiesi@4
|
123 array('published2', 'CONTAINS'),
|
danielebarchiesi@4
|
124 array('Published2', 'CONTAINS'),
|
danielebarchiesi@4
|
125 ),
|
danielebarchiesi@4
|
126 'result' => array(
|
danielebarchiesi@4
|
127 'article' => array(
|
danielebarchiesi@4
|
128 $nodes['published2']->nid => $node_labels['published2'],
|
danielebarchiesi@4
|
129 ),
|
danielebarchiesi@4
|
130 ),
|
danielebarchiesi@4
|
131 ),
|
danielebarchiesi@4
|
132 array(
|
danielebarchiesi@4
|
133 'arguments' => array(
|
danielebarchiesi@4
|
134 array('invalid node', 'CONTAINS'),
|
danielebarchiesi@4
|
135 ),
|
danielebarchiesi@4
|
136 'result' => array(),
|
danielebarchiesi@4
|
137 ),
|
danielebarchiesi@4
|
138 array(
|
danielebarchiesi@4
|
139 'arguments' => array(
|
danielebarchiesi@4
|
140 array('Node unpublished', 'CONTAINS'),
|
danielebarchiesi@4
|
141 ),
|
danielebarchiesi@4
|
142 'result' => array(),
|
danielebarchiesi@4
|
143 ),
|
danielebarchiesi@4
|
144 );
|
danielebarchiesi@4
|
145 $this->assertReferencable($field, $referencable_tests, 'Node handler');
|
danielebarchiesi@4
|
146
|
danielebarchiesi@4
|
147 // Test as an admin.
|
danielebarchiesi@4
|
148 $admin_user = $this->drupalCreateUser(array('access content', 'bypass node access'));
|
danielebarchiesi@4
|
149 $GLOBALS['user'] = $admin_user;
|
danielebarchiesi@4
|
150 $referencable_tests = array(
|
danielebarchiesi@4
|
151 array(
|
danielebarchiesi@4
|
152 'arguments' => array(
|
danielebarchiesi@4
|
153 array(NULL, 'CONTAINS'),
|
danielebarchiesi@4
|
154 ),
|
danielebarchiesi@4
|
155 'result' => array(
|
danielebarchiesi@4
|
156 'article' => array(
|
danielebarchiesi@4
|
157 $nodes['published1']->nid => $node_labels['published1'],
|
danielebarchiesi@4
|
158 $nodes['published2']->nid => $node_labels['published2'],
|
danielebarchiesi@4
|
159 $nodes['unpublished']->nid => $node_labels['unpublished'],
|
danielebarchiesi@4
|
160 ),
|
danielebarchiesi@4
|
161 ),
|
danielebarchiesi@4
|
162 ),
|
danielebarchiesi@4
|
163 array(
|
danielebarchiesi@4
|
164 'arguments' => array(
|
danielebarchiesi@4
|
165 array('Node unpublished', 'CONTAINS'),
|
danielebarchiesi@4
|
166 ),
|
danielebarchiesi@4
|
167 'result' => array(
|
danielebarchiesi@4
|
168 'article' => array(
|
danielebarchiesi@4
|
169 $nodes['unpublished']->nid => $node_labels['unpublished'],
|
danielebarchiesi@4
|
170 ),
|
danielebarchiesi@4
|
171 ),
|
danielebarchiesi@4
|
172 ),
|
danielebarchiesi@4
|
173 );
|
danielebarchiesi@4
|
174 $this->assertReferencable($field, $referencable_tests, 'Node handler (admin)');
|
danielebarchiesi@4
|
175 }
|
danielebarchiesi@4
|
176
|
danielebarchiesi@4
|
177 /**
|
danielebarchiesi@4
|
178 * Test the user-specific overrides of the entity handler.
|
danielebarchiesi@4
|
179 */
|
danielebarchiesi@4
|
180 public function testUserHandler() {
|
danielebarchiesi@4
|
181 // Build a fake field instance.
|
danielebarchiesi@4
|
182 $field = array(
|
danielebarchiesi@4
|
183 'translatable' => FALSE,
|
danielebarchiesi@4
|
184 'entity_types' => array(),
|
danielebarchiesi@4
|
185 'settings' => array(
|
danielebarchiesi@4
|
186 'handler' => 'base',
|
danielebarchiesi@4
|
187 'target_type' => 'user',
|
danielebarchiesi@4
|
188 'handler_settings' => array(
|
danielebarchiesi@4
|
189 'target_bundles' => array(),
|
danielebarchiesi@4
|
190 ),
|
danielebarchiesi@4
|
191 ),
|
danielebarchiesi@4
|
192 'field_name' => 'test_field',
|
danielebarchiesi@4
|
193 'type' => 'entityreference',
|
danielebarchiesi@4
|
194 'cardinality' => '1',
|
danielebarchiesi@4
|
195 );
|
danielebarchiesi@4
|
196
|
danielebarchiesi@4
|
197 // Build a set of test data.
|
danielebarchiesi@4
|
198 $users = array(
|
danielebarchiesi@4
|
199 'anonymous' => user_load(0),
|
danielebarchiesi@4
|
200 'admin' => user_load(1),
|
danielebarchiesi@4
|
201 'non_admin' => (object) array(
|
danielebarchiesi@4
|
202 'name' => 'non_admin <&>',
|
danielebarchiesi@4
|
203 'mail' => 'non_admin@example.com',
|
danielebarchiesi@4
|
204 'roles' => array(),
|
danielebarchiesi@4
|
205 'pass' => user_password(),
|
danielebarchiesi@4
|
206 'status' => 1,
|
danielebarchiesi@4
|
207 ),
|
danielebarchiesi@4
|
208 'blocked' => (object) array(
|
danielebarchiesi@4
|
209 'name' => 'blocked <&>',
|
danielebarchiesi@4
|
210 'mail' => 'blocked@example.com',
|
danielebarchiesi@4
|
211 'roles' => array(),
|
danielebarchiesi@4
|
212 'pass' => user_password(),
|
danielebarchiesi@4
|
213 'status' => 0,
|
danielebarchiesi@4
|
214 ),
|
danielebarchiesi@4
|
215 );
|
danielebarchiesi@4
|
216
|
danielebarchiesi@4
|
217 // The label of the anonymous user is variable_get('anonymous').
|
danielebarchiesi@4
|
218 $users['anonymous']->name = variable_get('anonymous', t('Anonymous'));
|
danielebarchiesi@4
|
219
|
danielebarchiesi@4
|
220 $user_labels = array();
|
danielebarchiesi@4
|
221 foreach ($users as $key => $user) {
|
danielebarchiesi@4
|
222 if (!isset($user->uid)) {
|
danielebarchiesi@4
|
223 $users[$key] = $user = user_save(drupal_anonymous_user(), (array) $user);
|
danielebarchiesi@4
|
224 }
|
danielebarchiesi@4
|
225 $user_labels[$key] = check_plain($user->name);
|
danielebarchiesi@4
|
226 }
|
danielebarchiesi@4
|
227
|
danielebarchiesi@4
|
228 // Test as a non-admin.
|
danielebarchiesi@4
|
229 $GLOBALS['user'] = $users['non_admin'];
|
danielebarchiesi@4
|
230 $referencable_tests = array(
|
danielebarchiesi@4
|
231 array(
|
danielebarchiesi@4
|
232 'arguments' => array(
|
danielebarchiesi@4
|
233 array(NULL, 'CONTAINS'),
|
danielebarchiesi@4
|
234 ),
|
danielebarchiesi@4
|
235 'result' => array(
|
danielebarchiesi@4
|
236 'user' => array(
|
danielebarchiesi@4
|
237 $users['admin']->uid => $user_labels['admin'],
|
danielebarchiesi@4
|
238 $users['non_admin']->uid => $user_labels['non_admin'],
|
danielebarchiesi@4
|
239 ),
|
danielebarchiesi@4
|
240 ),
|
danielebarchiesi@4
|
241 ),
|
danielebarchiesi@4
|
242 array(
|
danielebarchiesi@4
|
243 'arguments' => array(
|
danielebarchiesi@4
|
244 array('non_admin', 'CONTAINS'),
|
danielebarchiesi@4
|
245 array('NON_ADMIN', 'CONTAINS'),
|
danielebarchiesi@4
|
246 ),
|
danielebarchiesi@4
|
247 'result' => array(
|
danielebarchiesi@4
|
248 'user' => array(
|
danielebarchiesi@4
|
249 $users['non_admin']->uid => $user_labels['non_admin'],
|
danielebarchiesi@4
|
250 ),
|
danielebarchiesi@4
|
251 ),
|
danielebarchiesi@4
|
252 ),
|
danielebarchiesi@4
|
253 array(
|
danielebarchiesi@4
|
254 'arguments' => array(
|
danielebarchiesi@4
|
255 array('invalid user', 'CONTAINS'),
|
danielebarchiesi@4
|
256 ),
|
danielebarchiesi@4
|
257 'result' => array(),
|
danielebarchiesi@4
|
258 ),
|
danielebarchiesi@4
|
259 array(
|
danielebarchiesi@4
|
260 'arguments' => array(
|
danielebarchiesi@4
|
261 array('blocked', 'CONTAINS'),
|
danielebarchiesi@4
|
262 ),
|
danielebarchiesi@4
|
263 'result' => array(),
|
danielebarchiesi@4
|
264 ),
|
danielebarchiesi@4
|
265 );
|
danielebarchiesi@4
|
266 $this->assertReferencable($field, $referencable_tests, 'User handler');
|
danielebarchiesi@4
|
267
|
danielebarchiesi@4
|
268 $GLOBALS['user'] = $users['admin'];
|
danielebarchiesi@4
|
269 $referencable_tests = array(
|
danielebarchiesi@4
|
270 array(
|
danielebarchiesi@4
|
271 'arguments' => array(
|
danielebarchiesi@4
|
272 array(NULL, 'CONTAINS'),
|
danielebarchiesi@4
|
273 ),
|
danielebarchiesi@4
|
274 'result' => array(
|
danielebarchiesi@4
|
275 'user' => array(
|
danielebarchiesi@4
|
276 $users['anonymous']->uid => $user_labels['anonymous'],
|
danielebarchiesi@4
|
277 $users['admin']->uid => $user_labels['admin'],
|
danielebarchiesi@4
|
278 $users['non_admin']->uid => $user_labels['non_admin'],
|
danielebarchiesi@4
|
279 $users['blocked']->uid => $user_labels['blocked'],
|
danielebarchiesi@4
|
280 ),
|
danielebarchiesi@4
|
281 ),
|
danielebarchiesi@4
|
282 ),
|
danielebarchiesi@4
|
283 array(
|
danielebarchiesi@4
|
284 'arguments' => array(
|
danielebarchiesi@4
|
285 array('blocked', 'CONTAINS'),
|
danielebarchiesi@4
|
286 ),
|
danielebarchiesi@4
|
287 'result' => array(
|
danielebarchiesi@4
|
288 'user' => array(
|
danielebarchiesi@4
|
289 $users['blocked']->uid => $user_labels['blocked'],
|
danielebarchiesi@4
|
290 ),
|
danielebarchiesi@4
|
291 ),
|
danielebarchiesi@4
|
292 ),
|
danielebarchiesi@4
|
293 array(
|
danielebarchiesi@4
|
294 'arguments' => array(
|
danielebarchiesi@4
|
295 array('Anonymous', 'CONTAINS'),
|
danielebarchiesi@4
|
296 array('anonymous', 'CONTAINS'),
|
danielebarchiesi@4
|
297 ),
|
danielebarchiesi@4
|
298 'result' => array(
|
danielebarchiesi@4
|
299 'user' => array(
|
danielebarchiesi@4
|
300 $users['anonymous']->uid => $user_labels['anonymous'],
|
danielebarchiesi@4
|
301 ),
|
danielebarchiesi@4
|
302 ),
|
danielebarchiesi@4
|
303 ),
|
danielebarchiesi@4
|
304 );
|
danielebarchiesi@4
|
305 $this->assertReferencable($field, $referencable_tests, 'User handler (admin)');
|
danielebarchiesi@4
|
306 }
|
danielebarchiesi@4
|
307
|
danielebarchiesi@4
|
308 /**
|
danielebarchiesi@4
|
309 * Test the comment-specific overrides of the entity handler.
|
danielebarchiesi@4
|
310 */
|
danielebarchiesi@4
|
311 public function testCommentHandler() {
|
danielebarchiesi@4
|
312 // Build a fake field instance.
|
danielebarchiesi@4
|
313 $field = array(
|
danielebarchiesi@4
|
314 'translatable' => FALSE,
|
danielebarchiesi@4
|
315 'entity_types' => array(),
|
danielebarchiesi@4
|
316 'settings' => array(
|
danielebarchiesi@4
|
317 'handler' => 'base',
|
danielebarchiesi@4
|
318 'target_type' => 'comment',
|
danielebarchiesi@4
|
319 'handler_settings' => array(
|
danielebarchiesi@4
|
320 'target_bundles' => array(),
|
danielebarchiesi@4
|
321 ),
|
danielebarchiesi@4
|
322 ),
|
danielebarchiesi@4
|
323 'field_name' => 'test_field',
|
danielebarchiesi@4
|
324 'type' => 'entityreference',
|
danielebarchiesi@4
|
325 'cardinality' => '1',
|
danielebarchiesi@4
|
326 );
|
danielebarchiesi@4
|
327
|
danielebarchiesi@4
|
328 // Build a set of test data.
|
danielebarchiesi@4
|
329 $nodes = array(
|
danielebarchiesi@4
|
330 'published' => (object) array(
|
danielebarchiesi@4
|
331 'type' => 'article',
|
danielebarchiesi@4
|
332 'status' => 1,
|
danielebarchiesi@4
|
333 'title' => 'Node published',
|
danielebarchiesi@4
|
334 'uid' => 1,
|
danielebarchiesi@4
|
335 ),
|
danielebarchiesi@4
|
336 'unpublished' => (object) array(
|
danielebarchiesi@4
|
337 'type' => 'article',
|
danielebarchiesi@4
|
338 'status' => 0,
|
danielebarchiesi@4
|
339 'title' => 'Node unpublished',
|
danielebarchiesi@4
|
340 'uid' => 1,
|
danielebarchiesi@4
|
341 ),
|
danielebarchiesi@4
|
342 );
|
danielebarchiesi@4
|
343 foreach ($nodes as $node) {
|
danielebarchiesi@4
|
344 node_save($node);
|
danielebarchiesi@4
|
345 }
|
danielebarchiesi@4
|
346
|
danielebarchiesi@4
|
347 $comments = array(
|
danielebarchiesi@4
|
348 'published_published' => (object) array(
|
danielebarchiesi@4
|
349 'nid' => $nodes['published']->nid,
|
danielebarchiesi@4
|
350 'uid' => 1,
|
danielebarchiesi@4
|
351 'cid' => NULL,
|
danielebarchiesi@4
|
352 'pid' => 0,
|
danielebarchiesi@4
|
353 'status' => COMMENT_PUBLISHED,
|
danielebarchiesi@4
|
354 'subject' => 'Comment Published <&>',
|
danielebarchiesi@4
|
355 'hostname' => ip_address(),
|
danielebarchiesi@4
|
356 'language' => LANGUAGE_NONE,
|
danielebarchiesi@4
|
357 ),
|
danielebarchiesi@4
|
358 'published_unpublished' => (object) array(
|
danielebarchiesi@4
|
359 'nid' => $nodes['published']->nid,
|
danielebarchiesi@4
|
360 'uid' => 1,
|
danielebarchiesi@4
|
361 'cid' => NULL,
|
danielebarchiesi@4
|
362 'pid' => 0,
|
danielebarchiesi@4
|
363 'status' => COMMENT_NOT_PUBLISHED,
|
danielebarchiesi@4
|
364 'subject' => 'Comment Unpublished <&>',
|
danielebarchiesi@4
|
365 'hostname' => ip_address(),
|
danielebarchiesi@4
|
366 'language' => LANGUAGE_NONE,
|
danielebarchiesi@4
|
367 ),
|
danielebarchiesi@4
|
368 'unpublished_published' => (object) array(
|
danielebarchiesi@4
|
369 'nid' => $nodes['unpublished']->nid,
|
danielebarchiesi@4
|
370 'uid' => 1,
|
danielebarchiesi@4
|
371 'cid' => NULL,
|
danielebarchiesi@4
|
372 'pid' => 0,
|
danielebarchiesi@4
|
373 'status' => COMMENT_NOT_PUBLISHED,
|
danielebarchiesi@4
|
374 'subject' => 'Comment Published on Unpublished node <&>',
|
danielebarchiesi@4
|
375 'hostname' => ip_address(),
|
danielebarchiesi@4
|
376 'language' => LANGUAGE_NONE,
|
danielebarchiesi@4
|
377 ),
|
danielebarchiesi@4
|
378 );
|
danielebarchiesi@4
|
379
|
danielebarchiesi@4
|
380 $comment_labels = array();
|
danielebarchiesi@4
|
381 foreach ($comments as $key => $comment) {
|
danielebarchiesi@4
|
382 comment_save($comment);
|
danielebarchiesi@4
|
383 $comment_labels[$key] = check_plain($comment->subject);
|
danielebarchiesi@4
|
384 }
|
danielebarchiesi@4
|
385
|
danielebarchiesi@4
|
386 // Test as a non-admin.
|
danielebarchiesi@4
|
387 $normal_user = $this->drupalCreateUser(array('access content', 'access comments'));
|
danielebarchiesi@4
|
388 $GLOBALS['user'] = $normal_user;
|
danielebarchiesi@4
|
389 $referencable_tests = array(
|
danielebarchiesi@4
|
390 array(
|
danielebarchiesi@4
|
391 'arguments' => array(
|
danielebarchiesi@4
|
392 array(NULL, 'CONTAINS'),
|
danielebarchiesi@4
|
393 ),
|
danielebarchiesi@4
|
394 'result' => array(
|
danielebarchiesi@4
|
395 'comment_node_article' => array(
|
danielebarchiesi@4
|
396 $comments['published_published']->cid => $comment_labels['published_published'],
|
danielebarchiesi@4
|
397 ),
|
danielebarchiesi@4
|
398 ),
|
danielebarchiesi@4
|
399 ),
|
danielebarchiesi@4
|
400 array(
|
danielebarchiesi@4
|
401 'arguments' => array(
|
danielebarchiesi@4
|
402 array('Published', 'CONTAINS'),
|
danielebarchiesi@4
|
403 ),
|
danielebarchiesi@4
|
404 'result' => array(
|
danielebarchiesi@4
|
405 'comment_node_article' => array(
|
danielebarchiesi@4
|
406 $comments['published_published']->cid => $comment_labels['published_published'],
|
danielebarchiesi@4
|
407 ),
|
danielebarchiesi@4
|
408 ),
|
danielebarchiesi@4
|
409 ),
|
danielebarchiesi@4
|
410 array(
|
danielebarchiesi@4
|
411 'arguments' => array(
|
danielebarchiesi@4
|
412 array('invalid comment', 'CONTAINS'),
|
danielebarchiesi@4
|
413 ),
|
danielebarchiesi@4
|
414 'result' => array(),
|
danielebarchiesi@4
|
415 ),
|
danielebarchiesi@4
|
416 array(
|
danielebarchiesi@4
|
417 'arguments' => array(
|
danielebarchiesi@4
|
418 array('Comment Unpublished', 'CONTAINS'),
|
danielebarchiesi@4
|
419 ),
|
danielebarchiesi@4
|
420 'result' => array(),
|
danielebarchiesi@4
|
421 ),
|
danielebarchiesi@4
|
422 );
|
danielebarchiesi@4
|
423 $this->assertReferencable($field, $referencable_tests, 'Comment handler');
|
danielebarchiesi@4
|
424
|
danielebarchiesi@4
|
425 // Test as a comment admin.
|
danielebarchiesi@4
|
426 $admin_user = $this->drupalCreateUser(array('access content', 'access comments', 'administer comments'));
|
danielebarchiesi@4
|
427 $GLOBALS['user'] = $admin_user;
|
danielebarchiesi@4
|
428 $referencable_tests = array(
|
danielebarchiesi@4
|
429 array(
|
danielebarchiesi@4
|
430 'arguments' => array(
|
danielebarchiesi@4
|
431 array(NULL, 'CONTAINS'),
|
danielebarchiesi@4
|
432 ),
|
danielebarchiesi@4
|
433 'result' => array(
|
danielebarchiesi@4
|
434 'comment_node_article' => array(
|
danielebarchiesi@4
|
435 $comments['published_published']->cid => $comment_labels['published_published'],
|
danielebarchiesi@4
|
436 $comments['published_unpublished']->cid => $comment_labels['published_unpublished'],
|
danielebarchiesi@4
|
437 ),
|
danielebarchiesi@4
|
438 ),
|
danielebarchiesi@4
|
439 ),
|
danielebarchiesi@4
|
440 );
|
danielebarchiesi@4
|
441 $this->assertReferencable($field, $referencable_tests, 'Comment handler (comment admin)');
|
danielebarchiesi@4
|
442
|
danielebarchiesi@4
|
443 // Test as a node and comment admin.
|
danielebarchiesi@4
|
444 $admin_user = $this->drupalCreateUser(array('access content', 'access comments', 'administer comments', 'bypass node access'));
|
danielebarchiesi@4
|
445 $GLOBALS['user'] = $admin_user;
|
danielebarchiesi@4
|
446 $referencable_tests = array(
|
danielebarchiesi@4
|
447 array(
|
danielebarchiesi@4
|
448 'arguments' => array(
|
danielebarchiesi@4
|
449 array(NULL, 'CONTAINS'),
|
danielebarchiesi@4
|
450 ),
|
danielebarchiesi@4
|
451 'result' => array(
|
danielebarchiesi@4
|
452 'comment_node_article' => array(
|
danielebarchiesi@4
|
453 $comments['published_published']->cid => $comment_labels['published_published'],
|
danielebarchiesi@4
|
454 $comments['published_unpublished']->cid => $comment_labels['published_unpublished'],
|
danielebarchiesi@4
|
455 $comments['unpublished_published']->cid => $comment_labels['unpublished_published'],
|
danielebarchiesi@4
|
456 ),
|
danielebarchiesi@4
|
457 ),
|
danielebarchiesi@4
|
458 ),
|
danielebarchiesi@4
|
459 );
|
danielebarchiesi@4
|
460 $this->assertReferencable($field, $referencable_tests, 'Comment handler (comment + node admin)');
|
danielebarchiesi@4
|
461 }
|
danielebarchiesi@4
|
462
|
danielebarchiesi@4
|
463 /**
|
danielebarchiesi@4
|
464 * Assert sorting by field works for non-admins.
|
danielebarchiesi@4
|
465 *
|
danielebarchiesi@4
|
466 * Since we are sorting on a field, we need to make sure the base-table
|
danielebarchiesi@4
|
467 * is added, and access-control is behaving as expected.
|
danielebarchiesi@4
|
468 */
|
danielebarchiesi@4
|
469 public function testSortByField() {
|
danielebarchiesi@4
|
470 // Add text field to entity, to sort by.
|
danielebarchiesi@4
|
471 $field_info = array(
|
danielebarchiesi@4
|
472 'field_name' => 'field_text',
|
danielebarchiesi@4
|
473 'type' => 'text',
|
danielebarchiesi@4
|
474 'entity_types' => array('node'),
|
danielebarchiesi@4
|
475 );
|
danielebarchiesi@4
|
476 field_create_field($field_info);
|
danielebarchiesi@4
|
477
|
danielebarchiesi@4
|
478 $instance = array(
|
danielebarchiesi@4
|
479 'label' => 'Text Field',
|
danielebarchiesi@4
|
480 'field_name' => 'field_text',
|
danielebarchiesi@4
|
481 'entity_type' => 'node',
|
danielebarchiesi@4
|
482 'bundle' => 'article',
|
danielebarchiesi@4
|
483 'settings' => array(),
|
danielebarchiesi@4
|
484 'required' => FALSE,
|
danielebarchiesi@4
|
485 );
|
danielebarchiesi@4
|
486 field_create_instance($instance);
|
danielebarchiesi@4
|
487
|
danielebarchiesi@4
|
488
|
danielebarchiesi@4
|
489 // Build a fake field instance.
|
danielebarchiesi@4
|
490 $field = array(
|
danielebarchiesi@4
|
491 'translatable' => FALSE,
|
danielebarchiesi@4
|
492 'entity_types' => array(),
|
danielebarchiesi@4
|
493 'settings' => array(
|
danielebarchiesi@4
|
494 'handler' => 'base',
|
danielebarchiesi@4
|
495 'target_type' => 'node',
|
danielebarchiesi@4
|
496 'handler_settings' => array(
|
danielebarchiesi@4
|
497 'target_bundles' => array(),
|
danielebarchiesi@4
|
498 // Add sorting.
|
danielebarchiesi@4
|
499 'sort' => array(
|
danielebarchiesi@4
|
500 'type' => 'field',
|
danielebarchiesi@4
|
501 'field' => 'field_text:value',
|
danielebarchiesi@4
|
502 'direction' => 'DESC',
|
danielebarchiesi@4
|
503 ),
|
danielebarchiesi@4
|
504 ),
|
danielebarchiesi@4
|
505 ),
|
danielebarchiesi@4
|
506 'field_name' => 'test_field',
|
danielebarchiesi@4
|
507 'type' => 'entityreference',
|
danielebarchiesi@4
|
508 'cardinality' => '1',
|
danielebarchiesi@4
|
509 );
|
danielebarchiesi@4
|
510
|
danielebarchiesi@4
|
511 // Build a set of test data.
|
danielebarchiesi@4
|
512 $nodes = array(
|
danielebarchiesi@4
|
513 'published1' => (object) array(
|
danielebarchiesi@4
|
514 'type' => 'article',
|
danielebarchiesi@4
|
515 'status' => 1,
|
danielebarchiesi@4
|
516 'title' => 'Node published1 (<&>)',
|
danielebarchiesi@4
|
517 'uid' => 1,
|
danielebarchiesi@4
|
518 'field_text' => array(
|
danielebarchiesi@4
|
519 LANGUAGE_NONE => array(
|
danielebarchiesi@4
|
520 array(
|
danielebarchiesi@4
|
521 'value' => 1,
|
danielebarchiesi@4
|
522 ),
|
danielebarchiesi@4
|
523 ),
|
danielebarchiesi@4
|
524 ),
|
danielebarchiesi@4
|
525 ),
|
danielebarchiesi@4
|
526 'published2' => (object) array(
|
danielebarchiesi@4
|
527 'type' => 'article',
|
danielebarchiesi@4
|
528 'status' => 1,
|
danielebarchiesi@4
|
529 'title' => 'Node published2 (<&>)',
|
danielebarchiesi@4
|
530 'uid' => 1,
|
danielebarchiesi@4
|
531 'field_text' => array(
|
danielebarchiesi@4
|
532 LANGUAGE_NONE => array(
|
danielebarchiesi@4
|
533 array(
|
danielebarchiesi@4
|
534 'value' => 2,
|
danielebarchiesi@4
|
535 ),
|
danielebarchiesi@4
|
536 ),
|
danielebarchiesi@4
|
537 ),
|
danielebarchiesi@4
|
538 ),
|
danielebarchiesi@4
|
539 'unpublished' => (object) array(
|
danielebarchiesi@4
|
540 'type' => 'article',
|
danielebarchiesi@4
|
541 'status' => 0,
|
danielebarchiesi@4
|
542 'title' => 'Node unpublished (<&>)',
|
danielebarchiesi@4
|
543 'uid' => 1,
|
danielebarchiesi@4
|
544 'field_text' => array(
|
danielebarchiesi@4
|
545 LANGUAGE_NONE => array(
|
danielebarchiesi@4
|
546 array(
|
danielebarchiesi@4
|
547 'value' => 3,
|
danielebarchiesi@4
|
548 ),
|
danielebarchiesi@4
|
549 ),
|
danielebarchiesi@4
|
550 ),
|
danielebarchiesi@4
|
551 ),
|
danielebarchiesi@4
|
552 );
|
danielebarchiesi@4
|
553
|
danielebarchiesi@4
|
554 $node_labels = array();
|
danielebarchiesi@4
|
555 foreach ($nodes as $key => $node) {
|
danielebarchiesi@4
|
556 node_save($node);
|
danielebarchiesi@4
|
557 $node_labels[$key] = check_plain($node->title);
|
danielebarchiesi@4
|
558 }
|
danielebarchiesi@4
|
559
|
danielebarchiesi@4
|
560 // Test as a non-admin.
|
danielebarchiesi@4
|
561 $normal_user = $this->drupalCreateUser(array('access content'));
|
danielebarchiesi@4
|
562 $GLOBALS['user'] = $normal_user;
|
danielebarchiesi@4
|
563
|
danielebarchiesi@4
|
564 $handler = entityreference_get_selection_handler($field);
|
danielebarchiesi@4
|
565
|
danielebarchiesi@4
|
566 // Not only assert the result, but make sure the keys are sorted as
|
danielebarchiesi@4
|
567 // expected.
|
danielebarchiesi@4
|
568 $result = $handler->getReferencableEntities();
|
danielebarchiesi@4
|
569 $expected_result = array(
|
danielebarchiesi@4
|
570 $nodes['published2']->nid => $node_labels['published2'],
|
danielebarchiesi@4
|
571 $nodes['published1']->nid => $node_labels['published1'],
|
danielebarchiesi@4
|
572 );
|
danielebarchiesi@4
|
573 $this->assertIdentical($result['article'], $expected_result, 'Query sorted by field returned expected values for non-admin.');
|
danielebarchiesi@4
|
574 }
|
danielebarchiesi@4
|
575 }
|