function WorkbenchAccessMenuTestCase::testWorkbenchAccessMenu in Workbench Access 7
File
- tests/workbench_access.test, line 433
- Test file for Workbench Access.
Class
- WorkbenchAccessMenuTestCase
Code
function testWorkbenchAccessMenu() {
workbench_access_load_include();
$this
->createWorkbenchAccessUsers();
$this
->createWorkbenchAccessNodes(30);
for ($i = 1; $i <= 30; $i++) {
$node = node_load($i);
$node->title = $this->node_titles[$i];
node_save($node);
}
$menu = array(
'menu_name' => 'menu-workbench_access',
'description' => '',
'title' => $this
->randomName(16),
);
menu_save($menu);
$menu_name = $menu['menu_name'];
variable_set('menu_options_page', array(
'menu_options[' . $menu_name . ']' => $menu_name,
));
variable_set('workbench_access_auto_assign', 1);
variable_set('workbench_access', 'menu');
variable_set('workbench_access_menu', array(
$menu_name,
));
variable_set('workbench_access_custom_form', 1);
$section = array(
'access_id' => $menu_name,
'access_scheme' => 'menu',
'access_type' => 'menu',
'access_type_id' => $menu_name,
);
workbench_access_section_save($section);
$mlids = array();
$nodes = db_query("SELECT nid, title FROM {node} ORDER BY nid")
->fetchAll();
foreach ($nodes as $nid => $node) {
$settings = array(
'link_path' => 'node/' . $node->nid,
'link_title' => $node->title,
'menu_name' => $menu_name,
'weight' => $node->nid,
'plid' => 0,
);
if ($nid > 1) {
$settings['plid'] = $mlids[floor(($nid - 2) / 2)];
}
$mlids[] = menu_link_save($settings);
}
$this
->assertWorkbenchScheme('menu', $menu_name);
$count = db_query("SELECT COUNT(n.nid) FROM {node} n")
->fetchField();
$this
->assertTrue($count == 30, t('Thirty initial nodes created.'));
$count = db_query("SELECT COUNT(n.nid) FROM {node} n INNER JOIN {workbench_access_node} wan ON n.nid = wan.nid")
->fetchField();
$this
->assertTrue($count == 0, t('Initial nodes have no access data.'));
foreach ($nodes as $node) {
$mlid = db_query("SELECT mlid FROM {menu_links} WHERE link_path = :link_path", array(
':link_path' => 'node/' . $node->nid,
))
->fetchField();
if (!isset($first_mlid)) {
$first_mlid = $mlid;
}
$edit = array(
'nid' => $node->nid,
'access_id' => $mlid,
'access_scheme' => 'menu',
);
db_insert('workbench_access_node')
->fields($edit)
->execute();
}
workbench_access_user_section_save(1, $menu_name, 'menu');
$count = db_query("SELECT COUNT(n.nid) FROM {node} n INNER JOIN {workbench_access_node} wan ON n.nid = wan.nid")
->fetchField();
$this
->assertTrue($count == 30, t('Initial nodes assigned access data.'));
$active = workbench_access_get_active_tree();
$count = db_query("SELECT COUNT(n.nid) FROM {node} n INNER JOIN {workbench_access_node} wan ON n.nid = wan.nid WHERE wan.access_id = :access_id AND wan.access_scheme = 'menu'", array(
':access_id' => $first_mlid,
))
->fetchField();
$this
->assertTrue($count == 1, t('One node assigned to first-level menu item.'));
$account = user_load(1, TRUE);
$this
->assertTrue(!empty($account->workbench_access[$menu_name]), t('User 1 assigned to top-level hierarchy.'));
$account = $this
->getWorkbenchAccessUser();
$id = $account->testId;
$this
->assertTrue(empty($account->workbench_access[$menu_name]), t('Test user not assigned to a section.'));
$nids = db_query("SELECT nid FROM {node}")
->fetchCol('nid');
$nodes = node_load_multiple($nids);
$assigned = TRUE;
foreach ($nodes as $node) {
if (!isset($node->workbench_access) && !empty($node->workbench_access)) {
$assigned = FALSE;
}
}
$this
->assertTrue(!empty($assigned), t('All nodes properly assigned.'));
$this
->assertWorkbenchAccessCheck($nodes, $account, t('No sections'), FALSE);
$roles = workbench_access_get_roles('access workbench access by role');
$this
->assertTrue(count($roles) == 2, t('One user role assigned.'));
workbench_access_user_section_save($account->uid, $menu_name, 'menu');
$account = user_load($account->uid, TRUE);
$this
->assertTrue(!empty($account->workbench_access[$menu_name]), t('Test user assigned to top-level hierarchy.'));
$this
->assertWorkbenchAccessCheck($nodes, $account, t('Assigned sections'), TRUE);
user_role_revoke_permissions($this->editor_role, array(
'access workbench access by role',
));
$account = user_load($account->uid, TRUE);
$this
->assertTrue(empty($account->workbench_access[$menu_name]), t('Permission revoked and test user not assigned to a section.'));
$this
->assertWorkbenchAccessCheck($nodes, $account, t('Role disallowed'), FALSE);
drupal_static_reset('workbench_access_get_roles');
$roles = workbench_access_get_roles('access workbench access by role');
$this
->assertTrue(count($roles) == 1, t('One user roles assigned.'));
user_role_grant_permissions($this->editor_role, array(
'access workbench access by role',
));
$account = user_load($account->uid, TRUE);
$this
->assertTrue(!empty($account->workbench_access[$menu_name]), t('Permission reinstated and test user assigned to a section.'));
$this
->assertWorkbenchAccessCheck($nodes, $account, t('Role allowed'), TRUE);
drupal_static_reset('workbench_access_get_roles');
module_load_include('inc', 'workbench_access', 'workbench_access.pages');
$test = workbench_access_autocomplete('menu', $menu_name, substr($account->name, 0), TRUE);
$this
->assertTrue(empty($test), t('Autocomplete did not match assigned user.'));
$test_account = $this
->getWorkbenchAccessUser($id);
$test = workbench_access_autocomplete('menu', $menu_name, substr($test_account->name, 0, 1), TRUE);
$this
->assertTrue(!empty($test), t('Autocomplete matched unassigned user.'));
$perms = array(
'create page content',
'edit any page content',
'delete any page content',
);
user_role_revoke_permissions($this->editor_role, $perms);
$account = user_load($account->uid, TRUE);
$this
->assertWorkbenchAccessCheck($nodes, $account, t('Page access disallowed'), FALSE);
user_role_grant_permissions($this->editor_role, $perms);
$account = user_load($account->uid, TRUE);
$this
->assertWorkbenchAccessCheck($nodes, $account, t('Page access allowed'), TRUE);
$account->pass_raw = 'fubar';
$this
->drupalLogin($account);
$this
->drupalGet("node/{$node->nid}/edit");
$this
->assertResponse(200);
$this
->assertRaw('Section', t('Workbench Access field was found.'));
$this
->assertRaw('<select id="edit-workbench-access--2" name="workbench_access" class="form-select required">', t('Form presents a select list with no multiple select.'));
variable_set('workbench_access_allow_multiple', 1);
variable_set('workbench_access_label', 'TestWA');
$this
->drupalGet("node/{$node->nid}/edit");
$this
->assertRaw('TestWA', t('Workbench Access field was renamed.'));
$this
->assertRaw('<select multiple="multiple" name="workbench_access[]" id="edit-workbench-access--2" class="form-select required">', t('Form presents a select list with multiple select.'));
$GLOBALS['conf']['workbench_access_node_type_' . $node->type] = TRUE;
module_load_include('inc', 'node', 'node.pages');
$form = drupal_get_form($node->type . '_node_form', $node);
$this
->assertTrue(!empty($form['workbench_access']['workbench_access']['#workbench_access_test']), t('hook_workbench_access_node_element_alter() fired correctly.'));
$form = $this
->workbenchAccessNodeForm($account->uid, $node->type);
$this
->assertTrue(isset($form['workbench_access']['workbench_access']['#options']), t('Form element returns properly.'));
$this
->assertTrue(count($form['workbench_access']['workbench_access']['#options']) == 31, t('Form element returned thirty-one options (top menu and thirty nodes) to user with all sections.'));
workbench_access_user_section_delete($account->uid, $menu_name, 'menu');
$array = array_slice($active['tree'][$menu_name]['children'], 0, 1);
$mlid = array_shift($array);
workbench_access_user_section_save($account->uid, $mlid, 'menu');
$form = $this
->workbenchAccessNodeForm($account->uid, $node->type);
$this
->assertTrue(count($form['workbench_access']['workbench_access']['#options']) == 15, t('Form element returned fifteen options to user with limited options.'));
variable_set('workbench_access_custom_form', 0);
$custom = variable_get('workbench_access_custom_form', 1);
$this
->assertTrue(empty($custom), t('Switched to using native menu form.'));
$form = $this
->workbenchAccessNodeForm($account->uid, $node->type);
$this
->assertTrue(count($form['menu']['link']['parent']['#options']) == 15, t('Native menu form element returned fifteen options to user with limited options.'));
$this
->assertTrue(variable_get('workbench_access_node_type_' . $node->type, 1), t('Workbench Access enforced for %type content.', array(
'%type' => $node->type,
)));
$account->workbench_access = array(
'foo',
);
$response = workbench_access_node_access($node, 'update', $account);
$this
->assertTrue($response == NODE_ACCESS_DENY, t('Workbench Access rules enforced on test node.'));
variable_set('workbench_access_node_type_' . $node->type, 0);
$this
->assertFalse(variable_get('workbench_access_node_type_' . $node->type, 1), t('Workbench Access not enforced for %type content.', array(
'%type' => $node->type,
)));
$response = workbench_access_node_access($node, 'update', $account);
$this
->assertTrue($response == NODE_ACCESS_IGNORE, t('Workbench Access rules ignored on test node.'));
variable_set('workbench_access_node_type_' . $node->type, 1);
$this
->assertTrue(variable_get('workbench_access_node_type_' . $node->type, 1), t('Workbench Access enforced for %type content.', array(
'%type' => $node->type,
)));
$response = workbench_access_node_access($node, 'update', $account);
$this
->assertTrue($response == NODE_ACCESS_DENY, t('Workbench Access rules enforced on test node.'));
$temp = $node->workbench_access;
$node->workbench_access = array();
$response = workbench_access_node_access($node, 'update', $account);
$this
->assertTrue($response == NODE_ACCESS_IGNORE, t('Workbench Access rules ignored for unassigned node.'));
$node->workbench_access = $temp;
$response = workbench_access_node_access($node, 'update', $account);
$this
->assertTrue($response == NODE_ACCESS_DENY, t('Workbench Access rules enforced on test node.'));
user_delete($account->uid);
$records = db_query("SELECT 1 FROM {workbench_access_user} WHERE uid = :uid", array(
':uid' => $account->uid,
))
->fetchField();
$this
->assertFalse($records, 'User section assignments removed.');
$account = $this
->getWorkbenchAccessUser($id);
$this
->assertMenuUpdateNodes($account, 1, 1, 15);
$this
->assertMenuUpdateNodes($account, 3, 2, 7);
$this
->assertMenuUpdateNodes($account, 7, 3, 3);
$this
->assertMenuUpdateNodes($account, 15, 4, 1);
variable_set('workbench_access_auto_assign', 1);
$link = array(
'link_path' => 'node/add',
'link_title' => 'Add content',
'menu_name' => $menu_name,
'weight' => 0,
'plid' => 0,
);
menu_link_save($link);
$this
->drupalLogout();
workbench_access_reset_tree();
drupal_flush_all_caches();
$this
->drupalGet('node');
$this
->assertRaw('node/30">B2b2</a>', t('Node listing page returns properly.'));
$this
->assertWorkbenchScheme('menu', $menu_name);
}