'Node Access', 'description' => 'Test Access Control', 'group' => 'Apache Solr tests' ); } function setUp() { parent::setUp("nodeaccess", "apachesolr", "apachesolr_search", "apachesolr_nodeaccess"); print_r($this); // Create a basic user, which is subject to moderation. $permissions = array( 'access content', 'create page content', 'edit own page content', 'create story content', 'edit own story content', ); $this->basic_user = $this->drupalCreateUserRolePerm($permissions); } function testIndexing() { $basic_user = $this->basic_user; // Login as basic user to perform initial content creation. $this->drupalLoginUser($basic_user); //Create 2 nodes $role_restricted_node = new StdClass(); $role_restricted_node->title = $this->randomName(32); $role_restricted_node->body = $this->randomName(32); $role_restricted_node->comment = 2; $role_restricted_node->changed = time(); $role_restricted_node->format = FILTER_FORMAT_DEFAULT; $role_restricted_node->moderate = 0; $role_restricted_node->promote = 0; $role_restricted_node->revision = 1; $role_restricted_node->log = ''; $role_restricted_node->status = 1; $role_restricted_node->sticky = 0; $role_restricted_node->type = 'page'; $role_restricted_node->revisions = NULL; $role_restricted_node->taxonomy = NULL; node_save($node); $author_restricted_node = new StdClass(); $author_restricted_node->title = $this->randomName(32); $author_restricted_node->body = $this->randomName(32); $role_restricted_node->comment = 2; $role_restricted_node->changed = time(); $role_restricted_node->format = FILTER_FORMAT_DEFAULT; $role_restricted_node->moderate = 0; $role_restricted_node->promote = 0; $role_restricted_node->revision = 1; $role_restricted_node->log = ''; $role_restricted_node->status = 1; $role_restricted_node->sticky = 0; $role_restricted_node->type = 'page'; $role_restricted_node->revisions = NULL; $role_restricted_node->taxonomy = NULL; node_save($node); // No Drupal Logout in SimpleTest 1 $this->drupalLogout(); $roles = array_keys($basic_user->roles); // The assigned role will be the last in the array. $assigned_role = end($roles); $role_grant = array ( 'gid' => $assigned_role, 'realm' => 'nodeaccess_rid', 'grant_view' => '1', 'grant_update' => '0', 'grant_delete' => '0', ); node_access_write_grants($role_restricted_node, array($role_grant), "nodeaccess_rid"); $author_grant = array ( 'gid' => $basic_user->uid, 'realm' => 'nodeaccess_author', 'grant_view' => '1', 'grant_update' => '0', 'grant_delete' => '0', ); node_access_write_grants($author_restricted_node, array($author_grant), "nodeaccess_author"); $include_path = get_include_path(); set_include_path('./'. drupal_get_path('module', 'apachesolr') .'/SolrPhpClient/'); include_once('Apache/Solr/Service.php'); set_include_path($include_path); $document = new Apache_Solr_Document(); apachesolr_nodeaccess_apachesolr_update_index($document, $role_restricted_node); $this->assertEqual($document->nodeaccess_nodeaccess_rid[0], $assigned_role, "Solr Document being indexed is restricted by the proper role"); $document = new Apache_Solr_Document(); apachesolr_nodeaccess_apachesolr_update_index($document, $author_restricted_node); $this->assertEqual($document->nodeaccess_nodeaccess_author[0], $basic_user->uid, "Solr Document being indexed is restricted by the proper author"); } function testQuery() { $basic_user = $this->basic_user; // Login as basic user $this->drupalLoginUser($basic_user); include_once drupal_get_path('module', 'apachesolr') .'/Solr_Base_Query.php'; $query = apachesolr_drupal_query(); $params = array(); $subquery = _apachesolr_nodeaccess_build_subquery($basic_user); $roles = array_keys($basic_user->roles); $assigned_role = end($roles); $expected_criterion = array( "nodeaccess_all" => 0, "nodeaccess_nodeaccess_rid" => array(2, $assigned_role), "nodeaccess_nodeaccess_uid" => $basic_user->uid, "nodeaccess_nodeaccess_author" => $basic_user->uid, ); $fields = $subquery->get_fields(); foreach ($fields as $field) { if (is_array($expected_criterion[$field['#name']])) { $this->assertTrue(in_array($field['#value'], $expected_criterion[$field['#name']]), t("Expected node access grant @name == @value found", array('@name' => $field['#name'], '@value' => $field['#value']))); //This is sorta a bug $found_criterion[$field['#name']] = $expected_criterion[$field['#name']]; } else { $this->assertEqual($expected_criterion[$field['#name']], $field['#value'], t("Expected node access grant @name == @value found", array('@name' => $field['#name'], '@value' => $field['#value']))); $found_criterion[$field['#name']] = $expected_criterion[$field['#name']]; } } $this->assertEqual($expected_criterion, $found_criterion, "All Criteria was accounted for in fields. If not accounted for, Unaccounted Criteria [" . var_export(array_diff($expected_criterion, $found_criterion), 1) . "]"); } }