danielebarchiesi@4: 'Entity Reference Handlers', danielebarchiesi@4: 'description' => 'Tests for the base handlers provided by Entity Reference.', danielebarchiesi@4: 'group' => 'Entity Reference', danielebarchiesi@4: ); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: public function setUp() { danielebarchiesi@4: parent::setUp('entityreference'); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: protected function assertReferencable($field, $tests, $handler_name) { danielebarchiesi@4: $handler = entityreference_get_selection_handler($field); danielebarchiesi@4: danielebarchiesi@4: foreach ($tests as $test) { danielebarchiesi@4: foreach ($test['arguments'] as $arguments) { danielebarchiesi@4: $result = call_user_func_array(array($handler, 'getReferencableEntities'), $arguments); danielebarchiesi@4: $this->assertEqual($result, $test['result'], format_string('Valid result set returned by @handler.', array('@handler' => $handler_name))); danielebarchiesi@4: danielebarchiesi@4: $result = call_user_func_array(array($handler, 'countReferencableEntities'), $arguments); danielebarchiesi@4: if (!empty($test['result'])) { danielebarchiesi@4: $bundle = key($test['result']); danielebarchiesi@4: $count = count($test['result'][$bundle]); danielebarchiesi@4: } danielebarchiesi@4: else { danielebarchiesi@4: $count = 0; danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: $this->assertEqual($result, $count, format_string('Valid count returned by @handler.', array('@handler' => $handler_name))); danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * Test the node-specific overrides of the entity handler. danielebarchiesi@4: */ danielebarchiesi@4: public function testNodeHandler() { danielebarchiesi@4: // Build a fake field instance. danielebarchiesi@4: $field = array( danielebarchiesi@4: 'translatable' => FALSE, danielebarchiesi@4: 'entity_types' => array(), danielebarchiesi@4: 'settings' => array( danielebarchiesi@4: 'handler' => 'base', danielebarchiesi@4: 'target_type' => 'node', danielebarchiesi@4: 'handler_settings' => array( danielebarchiesi@4: 'target_bundles' => array(), danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: 'field_name' => 'test_field', danielebarchiesi@4: 'type' => 'entityreference', danielebarchiesi@4: 'cardinality' => '1', danielebarchiesi@4: ); danielebarchiesi@4: danielebarchiesi@4: // Build a set of test data. danielebarchiesi@4: // Titles contain HTML-special characters to test escaping. danielebarchiesi@4: $nodes = array( danielebarchiesi@4: 'published1' => (object) array( danielebarchiesi@4: 'type' => 'article', danielebarchiesi@4: 'status' => 1, danielebarchiesi@4: 'title' => 'Node published1 (<&>)', danielebarchiesi@4: 'uid' => 1, danielebarchiesi@4: ), danielebarchiesi@4: 'published2' => (object) array( danielebarchiesi@4: 'type' => 'article', danielebarchiesi@4: 'status' => 1, danielebarchiesi@4: 'title' => 'Node published2 (<&>)', danielebarchiesi@4: 'uid' => 1, danielebarchiesi@4: ), danielebarchiesi@4: 'unpublished' => (object) array( danielebarchiesi@4: 'type' => 'article', danielebarchiesi@4: 'status' => 0, danielebarchiesi@4: 'title' => 'Node unpublished (<&>)', danielebarchiesi@4: 'uid' => 1, danielebarchiesi@4: ), danielebarchiesi@4: ); danielebarchiesi@4: danielebarchiesi@4: $node_labels = array(); danielebarchiesi@4: foreach ($nodes as $key => $node) { danielebarchiesi@4: node_save($node); danielebarchiesi@4: $node_labels[$key] = check_plain($node->title); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: // Test as a non-admin. danielebarchiesi@4: $normal_user = $this->drupalCreateUser(array('access content')); danielebarchiesi@4: $GLOBALS['user'] = $normal_user; danielebarchiesi@4: $referencable_tests = array( danielebarchiesi@4: array( danielebarchiesi@4: 'arguments' => array( danielebarchiesi@4: array(NULL, 'CONTAINS'), danielebarchiesi@4: ), danielebarchiesi@4: 'result' => array( danielebarchiesi@4: 'article' => array( danielebarchiesi@4: $nodes['published1']->nid => $node_labels['published1'], danielebarchiesi@4: $nodes['published2']->nid => $node_labels['published2'], danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: array( danielebarchiesi@4: 'arguments' => array( danielebarchiesi@4: array('published1', 'CONTAINS'), danielebarchiesi@4: array('Published1', 'CONTAINS'), danielebarchiesi@4: ), danielebarchiesi@4: 'result' => array( danielebarchiesi@4: 'article' => array( danielebarchiesi@4: $nodes['published1']->nid => $node_labels['published1'], danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: array( danielebarchiesi@4: 'arguments' => array( danielebarchiesi@4: array('published2', 'CONTAINS'), danielebarchiesi@4: array('Published2', 'CONTAINS'), danielebarchiesi@4: ), danielebarchiesi@4: 'result' => array( danielebarchiesi@4: 'article' => array( danielebarchiesi@4: $nodes['published2']->nid => $node_labels['published2'], danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: array( danielebarchiesi@4: 'arguments' => array( danielebarchiesi@4: array('invalid node', 'CONTAINS'), danielebarchiesi@4: ), danielebarchiesi@4: 'result' => array(), danielebarchiesi@4: ), danielebarchiesi@4: array( danielebarchiesi@4: 'arguments' => array( danielebarchiesi@4: array('Node unpublished', 'CONTAINS'), danielebarchiesi@4: ), danielebarchiesi@4: 'result' => array(), danielebarchiesi@4: ), danielebarchiesi@4: ); danielebarchiesi@4: $this->assertReferencable($field, $referencable_tests, 'Node handler'); danielebarchiesi@4: danielebarchiesi@4: // Test as an admin. danielebarchiesi@4: $admin_user = $this->drupalCreateUser(array('access content', 'bypass node access')); danielebarchiesi@4: $GLOBALS['user'] = $admin_user; danielebarchiesi@4: $referencable_tests = array( danielebarchiesi@4: array( danielebarchiesi@4: 'arguments' => array( danielebarchiesi@4: array(NULL, 'CONTAINS'), danielebarchiesi@4: ), danielebarchiesi@4: 'result' => array( danielebarchiesi@4: 'article' => array( danielebarchiesi@4: $nodes['published1']->nid => $node_labels['published1'], danielebarchiesi@4: $nodes['published2']->nid => $node_labels['published2'], danielebarchiesi@4: $nodes['unpublished']->nid => $node_labels['unpublished'], danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: array( danielebarchiesi@4: 'arguments' => array( danielebarchiesi@4: array('Node unpublished', 'CONTAINS'), danielebarchiesi@4: ), danielebarchiesi@4: 'result' => array( danielebarchiesi@4: 'article' => array( danielebarchiesi@4: $nodes['unpublished']->nid => $node_labels['unpublished'], danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: ); danielebarchiesi@4: $this->assertReferencable($field, $referencable_tests, 'Node handler (admin)'); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * Test the user-specific overrides of the entity handler. danielebarchiesi@4: */ danielebarchiesi@4: public function testUserHandler() { danielebarchiesi@4: // Build a fake field instance. danielebarchiesi@4: $field = array( danielebarchiesi@4: 'translatable' => FALSE, danielebarchiesi@4: 'entity_types' => array(), danielebarchiesi@4: 'settings' => array( danielebarchiesi@4: 'handler' => 'base', danielebarchiesi@4: 'target_type' => 'user', danielebarchiesi@4: 'handler_settings' => array( danielebarchiesi@4: 'target_bundles' => array(), danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: 'field_name' => 'test_field', danielebarchiesi@4: 'type' => 'entityreference', danielebarchiesi@4: 'cardinality' => '1', danielebarchiesi@4: ); danielebarchiesi@4: danielebarchiesi@4: // Build a set of test data. danielebarchiesi@4: $users = array( danielebarchiesi@4: 'anonymous' => user_load(0), danielebarchiesi@4: 'admin' => user_load(1), danielebarchiesi@4: 'non_admin' => (object) array( danielebarchiesi@4: 'name' => 'non_admin <&>', danielebarchiesi@4: 'mail' => 'non_admin@example.com', danielebarchiesi@4: 'roles' => array(), danielebarchiesi@4: 'pass' => user_password(), danielebarchiesi@4: 'status' => 1, danielebarchiesi@4: ), danielebarchiesi@4: 'blocked' => (object) array( danielebarchiesi@4: 'name' => 'blocked <&>', danielebarchiesi@4: 'mail' => 'blocked@example.com', danielebarchiesi@4: 'roles' => array(), danielebarchiesi@4: 'pass' => user_password(), danielebarchiesi@4: 'status' => 0, danielebarchiesi@4: ), danielebarchiesi@4: ); danielebarchiesi@4: danielebarchiesi@4: // The label of the anonymous user is variable_get('anonymous'). danielebarchiesi@4: $users['anonymous']->name = variable_get('anonymous', t('Anonymous')); danielebarchiesi@4: danielebarchiesi@4: $user_labels = array(); danielebarchiesi@4: foreach ($users as $key => $user) { danielebarchiesi@4: if (!isset($user->uid)) { danielebarchiesi@4: $users[$key] = $user = user_save(drupal_anonymous_user(), (array) $user); danielebarchiesi@4: } danielebarchiesi@4: $user_labels[$key] = check_plain($user->name); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: // Test as a non-admin. danielebarchiesi@4: $GLOBALS['user'] = $users['non_admin']; danielebarchiesi@4: $referencable_tests = array( danielebarchiesi@4: array( danielebarchiesi@4: 'arguments' => array( danielebarchiesi@4: array(NULL, 'CONTAINS'), danielebarchiesi@4: ), danielebarchiesi@4: 'result' => array( danielebarchiesi@4: 'user' => array( danielebarchiesi@4: $users['admin']->uid => $user_labels['admin'], danielebarchiesi@4: $users['non_admin']->uid => $user_labels['non_admin'], danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: array( danielebarchiesi@4: 'arguments' => array( danielebarchiesi@4: array('non_admin', 'CONTAINS'), danielebarchiesi@4: array('NON_ADMIN', 'CONTAINS'), danielebarchiesi@4: ), danielebarchiesi@4: 'result' => array( danielebarchiesi@4: 'user' => array( danielebarchiesi@4: $users['non_admin']->uid => $user_labels['non_admin'], danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: array( danielebarchiesi@4: 'arguments' => array( danielebarchiesi@4: array('invalid user', 'CONTAINS'), danielebarchiesi@4: ), danielebarchiesi@4: 'result' => array(), danielebarchiesi@4: ), danielebarchiesi@4: array( danielebarchiesi@4: 'arguments' => array( danielebarchiesi@4: array('blocked', 'CONTAINS'), danielebarchiesi@4: ), danielebarchiesi@4: 'result' => array(), danielebarchiesi@4: ), danielebarchiesi@4: ); danielebarchiesi@4: $this->assertReferencable($field, $referencable_tests, 'User handler'); danielebarchiesi@4: danielebarchiesi@4: $GLOBALS['user'] = $users['admin']; danielebarchiesi@4: $referencable_tests = array( danielebarchiesi@4: array( danielebarchiesi@4: 'arguments' => array( danielebarchiesi@4: array(NULL, 'CONTAINS'), danielebarchiesi@4: ), danielebarchiesi@4: 'result' => array( danielebarchiesi@4: 'user' => array( danielebarchiesi@4: $users['anonymous']->uid => $user_labels['anonymous'], danielebarchiesi@4: $users['admin']->uid => $user_labels['admin'], danielebarchiesi@4: $users['non_admin']->uid => $user_labels['non_admin'], danielebarchiesi@4: $users['blocked']->uid => $user_labels['blocked'], danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: array( danielebarchiesi@4: 'arguments' => array( danielebarchiesi@4: array('blocked', 'CONTAINS'), danielebarchiesi@4: ), danielebarchiesi@4: 'result' => array( danielebarchiesi@4: 'user' => array( danielebarchiesi@4: $users['blocked']->uid => $user_labels['blocked'], danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: array( danielebarchiesi@4: 'arguments' => array( danielebarchiesi@4: array('Anonymous', 'CONTAINS'), danielebarchiesi@4: array('anonymous', 'CONTAINS'), danielebarchiesi@4: ), danielebarchiesi@4: 'result' => array( danielebarchiesi@4: 'user' => array( danielebarchiesi@4: $users['anonymous']->uid => $user_labels['anonymous'], danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: ); danielebarchiesi@4: $this->assertReferencable($field, $referencable_tests, 'User handler (admin)'); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * Test the comment-specific overrides of the entity handler. danielebarchiesi@4: */ danielebarchiesi@4: public function testCommentHandler() { danielebarchiesi@4: // Build a fake field instance. danielebarchiesi@4: $field = array( danielebarchiesi@4: 'translatable' => FALSE, danielebarchiesi@4: 'entity_types' => array(), danielebarchiesi@4: 'settings' => array( danielebarchiesi@4: 'handler' => 'base', danielebarchiesi@4: 'target_type' => 'comment', danielebarchiesi@4: 'handler_settings' => array( danielebarchiesi@4: 'target_bundles' => array(), danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: 'field_name' => 'test_field', danielebarchiesi@4: 'type' => 'entityreference', danielebarchiesi@4: 'cardinality' => '1', danielebarchiesi@4: ); danielebarchiesi@4: danielebarchiesi@4: // Build a set of test data. danielebarchiesi@4: $nodes = array( danielebarchiesi@4: 'published' => (object) array( danielebarchiesi@4: 'type' => 'article', danielebarchiesi@4: 'status' => 1, danielebarchiesi@4: 'title' => 'Node published', danielebarchiesi@4: 'uid' => 1, danielebarchiesi@4: ), danielebarchiesi@4: 'unpublished' => (object) array( danielebarchiesi@4: 'type' => 'article', danielebarchiesi@4: 'status' => 0, danielebarchiesi@4: 'title' => 'Node unpublished', danielebarchiesi@4: 'uid' => 1, danielebarchiesi@4: ), danielebarchiesi@4: ); danielebarchiesi@4: foreach ($nodes as $node) { danielebarchiesi@4: node_save($node); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: $comments = array( danielebarchiesi@4: 'published_published' => (object) array( danielebarchiesi@4: 'nid' => $nodes['published']->nid, danielebarchiesi@4: 'uid' => 1, danielebarchiesi@4: 'cid' => NULL, danielebarchiesi@4: 'pid' => 0, danielebarchiesi@4: 'status' => COMMENT_PUBLISHED, danielebarchiesi@4: 'subject' => 'Comment Published <&>', danielebarchiesi@4: 'hostname' => ip_address(), danielebarchiesi@4: 'language' => LANGUAGE_NONE, danielebarchiesi@4: ), danielebarchiesi@4: 'published_unpublished' => (object) array( danielebarchiesi@4: 'nid' => $nodes['published']->nid, danielebarchiesi@4: 'uid' => 1, danielebarchiesi@4: 'cid' => NULL, danielebarchiesi@4: 'pid' => 0, danielebarchiesi@4: 'status' => COMMENT_NOT_PUBLISHED, danielebarchiesi@4: 'subject' => 'Comment Unpublished <&>', danielebarchiesi@4: 'hostname' => ip_address(), danielebarchiesi@4: 'language' => LANGUAGE_NONE, danielebarchiesi@4: ), danielebarchiesi@4: 'unpublished_published' => (object) array( danielebarchiesi@4: 'nid' => $nodes['unpublished']->nid, danielebarchiesi@4: 'uid' => 1, danielebarchiesi@4: 'cid' => NULL, danielebarchiesi@4: 'pid' => 0, danielebarchiesi@4: 'status' => COMMENT_NOT_PUBLISHED, danielebarchiesi@4: 'subject' => 'Comment Published on Unpublished node <&>', danielebarchiesi@4: 'hostname' => ip_address(), danielebarchiesi@4: 'language' => LANGUAGE_NONE, danielebarchiesi@4: ), danielebarchiesi@4: ); danielebarchiesi@4: danielebarchiesi@4: $comment_labels = array(); danielebarchiesi@4: foreach ($comments as $key => $comment) { danielebarchiesi@4: comment_save($comment); danielebarchiesi@4: $comment_labels[$key] = check_plain($comment->subject); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: // Test as a non-admin. danielebarchiesi@4: $normal_user = $this->drupalCreateUser(array('access content', 'access comments')); danielebarchiesi@4: $GLOBALS['user'] = $normal_user; danielebarchiesi@4: $referencable_tests = array( danielebarchiesi@4: array( danielebarchiesi@4: 'arguments' => array( danielebarchiesi@4: array(NULL, 'CONTAINS'), danielebarchiesi@4: ), danielebarchiesi@4: 'result' => array( danielebarchiesi@4: 'comment_node_article' => array( danielebarchiesi@4: $comments['published_published']->cid => $comment_labels['published_published'], danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: array( danielebarchiesi@4: 'arguments' => array( danielebarchiesi@4: array('Published', 'CONTAINS'), danielebarchiesi@4: ), danielebarchiesi@4: 'result' => array( danielebarchiesi@4: 'comment_node_article' => array( danielebarchiesi@4: $comments['published_published']->cid => $comment_labels['published_published'], danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: array( danielebarchiesi@4: 'arguments' => array( danielebarchiesi@4: array('invalid comment', 'CONTAINS'), danielebarchiesi@4: ), danielebarchiesi@4: 'result' => array(), danielebarchiesi@4: ), danielebarchiesi@4: array( danielebarchiesi@4: 'arguments' => array( danielebarchiesi@4: array('Comment Unpublished', 'CONTAINS'), danielebarchiesi@4: ), danielebarchiesi@4: 'result' => array(), danielebarchiesi@4: ), danielebarchiesi@4: ); danielebarchiesi@4: $this->assertReferencable($field, $referencable_tests, 'Comment handler'); danielebarchiesi@4: danielebarchiesi@4: // Test as a comment admin. danielebarchiesi@4: $admin_user = $this->drupalCreateUser(array('access content', 'access comments', 'administer comments')); danielebarchiesi@4: $GLOBALS['user'] = $admin_user; danielebarchiesi@4: $referencable_tests = array( danielebarchiesi@4: array( danielebarchiesi@4: 'arguments' => array( danielebarchiesi@4: array(NULL, 'CONTAINS'), danielebarchiesi@4: ), danielebarchiesi@4: 'result' => array( danielebarchiesi@4: 'comment_node_article' => array( danielebarchiesi@4: $comments['published_published']->cid => $comment_labels['published_published'], danielebarchiesi@4: $comments['published_unpublished']->cid => $comment_labels['published_unpublished'], danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: ); danielebarchiesi@4: $this->assertReferencable($field, $referencable_tests, 'Comment handler (comment admin)'); danielebarchiesi@4: danielebarchiesi@4: // Test as a node and comment admin. danielebarchiesi@4: $admin_user = $this->drupalCreateUser(array('access content', 'access comments', 'administer comments', 'bypass node access')); danielebarchiesi@4: $GLOBALS['user'] = $admin_user; danielebarchiesi@4: $referencable_tests = array( danielebarchiesi@4: array( danielebarchiesi@4: 'arguments' => array( danielebarchiesi@4: array(NULL, 'CONTAINS'), danielebarchiesi@4: ), danielebarchiesi@4: 'result' => array( danielebarchiesi@4: 'comment_node_article' => array( danielebarchiesi@4: $comments['published_published']->cid => $comment_labels['published_published'], danielebarchiesi@4: $comments['published_unpublished']->cid => $comment_labels['published_unpublished'], danielebarchiesi@4: $comments['unpublished_published']->cid => $comment_labels['unpublished_published'], danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: ); danielebarchiesi@4: $this->assertReferencable($field, $referencable_tests, 'Comment handler (comment + node admin)'); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * Assert sorting by field works for non-admins. danielebarchiesi@4: * danielebarchiesi@4: * Since we are sorting on a field, we need to make sure the base-table danielebarchiesi@4: * is added, and access-control is behaving as expected. danielebarchiesi@4: */ danielebarchiesi@4: public function testSortByField() { danielebarchiesi@4: // Add text field to entity, to sort by. danielebarchiesi@4: $field_info = array( danielebarchiesi@4: 'field_name' => 'field_text', danielebarchiesi@4: 'type' => 'text', danielebarchiesi@4: 'entity_types' => array('node'), danielebarchiesi@4: ); danielebarchiesi@4: field_create_field($field_info); danielebarchiesi@4: danielebarchiesi@4: $instance = array( danielebarchiesi@4: 'label' => 'Text Field', danielebarchiesi@4: 'field_name' => 'field_text', danielebarchiesi@4: 'entity_type' => 'node', danielebarchiesi@4: 'bundle' => 'article', danielebarchiesi@4: 'settings' => array(), danielebarchiesi@4: 'required' => FALSE, danielebarchiesi@4: ); danielebarchiesi@4: field_create_instance($instance); danielebarchiesi@4: danielebarchiesi@4: danielebarchiesi@4: // Build a fake field instance. danielebarchiesi@4: $field = array( danielebarchiesi@4: 'translatable' => FALSE, danielebarchiesi@4: 'entity_types' => array(), danielebarchiesi@4: 'settings' => array( danielebarchiesi@4: 'handler' => 'base', danielebarchiesi@4: 'target_type' => 'node', danielebarchiesi@4: 'handler_settings' => array( danielebarchiesi@4: 'target_bundles' => array(), danielebarchiesi@4: // Add sorting. danielebarchiesi@4: 'sort' => array( danielebarchiesi@4: 'type' => 'field', danielebarchiesi@4: 'field' => 'field_text:value', danielebarchiesi@4: 'direction' => 'DESC', danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: 'field_name' => 'test_field', danielebarchiesi@4: 'type' => 'entityreference', danielebarchiesi@4: 'cardinality' => '1', danielebarchiesi@4: ); danielebarchiesi@4: danielebarchiesi@4: // Build a set of test data. danielebarchiesi@4: $nodes = array( danielebarchiesi@4: 'published1' => (object) array( danielebarchiesi@4: 'type' => 'article', danielebarchiesi@4: 'status' => 1, danielebarchiesi@4: 'title' => 'Node published1 (<&>)', danielebarchiesi@4: 'uid' => 1, danielebarchiesi@4: 'field_text' => array( danielebarchiesi@4: LANGUAGE_NONE => array( danielebarchiesi@4: array( danielebarchiesi@4: 'value' => 1, danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: 'published2' => (object) array( danielebarchiesi@4: 'type' => 'article', danielebarchiesi@4: 'status' => 1, danielebarchiesi@4: 'title' => 'Node published2 (<&>)', danielebarchiesi@4: 'uid' => 1, danielebarchiesi@4: 'field_text' => array( danielebarchiesi@4: LANGUAGE_NONE => array( danielebarchiesi@4: array( danielebarchiesi@4: 'value' => 2, danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: 'unpublished' => (object) array( danielebarchiesi@4: 'type' => 'article', danielebarchiesi@4: 'status' => 0, danielebarchiesi@4: 'title' => 'Node unpublished (<&>)', danielebarchiesi@4: 'uid' => 1, danielebarchiesi@4: 'field_text' => array( danielebarchiesi@4: LANGUAGE_NONE => array( danielebarchiesi@4: array( danielebarchiesi@4: 'value' => 3, danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: ); danielebarchiesi@4: danielebarchiesi@4: $node_labels = array(); danielebarchiesi@4: foreach ($nodes as $key => $node) { danielebarchiesi@4: node_save($node); danielebarchiesi@4: $node_labels[$key] = check_plain($node->title); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: // Test as a non-admin. danielebarchiesi@4: $normal_user = $this->drupalCreateUser(array('access content')); danielebarchiesi@4: $GLOBALS['user'] = $normal_user; danielebarchiesi@4: danielebarchiesi@4: $handler = entityreference_get_selection_handler($field); danielebarchiesi@4: danielebarchiesi@4: // Not only assert the result, but make sure the keys are sorted as danielebarchiesi@4: // expected. danielebarchiesi@4: $result = $handler->getReferencableEntities(); danielebarchiesi@4: $expected_result = array( danielebarchiesi@4: $nodes['published2']->nid => $node_labels['published2'], danielebarchiesi@4: $nodes['published1']->nid => $node_labels['published1'], danielebarchiesi@4: ); danielebarchiesi@4: $this->assertIdentical($result['article'], $expected_result, 'Query sorted by field returned expected values for non-admin.'); danielebarchiesi@4: } danielebarchiesi@4: }