annotate sites/all/modules/entityreference/tests/entityreference.handlers.test @ 11:b0ee71395280

deleted .DS_Store files
author danieleb <danielebarchiesi@me.com>
date Mon, 28 Oct 2013 16:12:13 +0000
parents ce11bbd8f642
children
rev   line source
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 }