pmpermission.test in Drupal PM (Project Management) 7.2
Test definitions for PM Permission.
File
pmpermission/pmpermission.testView source
<?php
/**
* @file
* Test definitions for PM Permission.
*/
/**
* Define a test case for PM Permission.
*/
class PmpermissionTestCase extends DrupalWebTestCase {
/**
* Returns meta data for PM Permission tests.
*/
public static function getInfo() {
return array(
'name' => 'PM Permission functionality',
'description' => 'Test the functionality of PM Permission.',
'group' => 'Project Management',
);
}
/**
* Standard set up for all tests.
*/
public function setUp() {
parent::setUp('pm', 'pmpermission', 'pmorganization', 'pmproject');
node_access_rebuild();
}
/**
* Tests "view all" permission.
*/
public function testpmpermissionViewAll() {
// Allow PM Permission to override organization permissions.
variable_set('node_permissions_pmorganization', 0);
// Setup users.
$users = array();
// Create a node to test against.
$organization_settings = array(
'type' => 'pmorganization',
);
$organization = $this
->drupalCreateNode($organization_settings);
$this
->assertTrue(isset($organization->nid), 'Node successfully created.');
// Test that anonymous users can not view the node.
$this
->drupalGet('node/' . $organization->nid);
$this
->assertResponse(403, 'Access is denied to anonymous user.');
// Create basic user and test that user cannot view the node.
$users['basic'] = $this
->drupalCreateUser(array());
$this
->assertTrue(is_object($users['basic']), 'Basic user successfully created.');
$this
->drupalLogin($users['basic']);
$this
->drupalGet('node/' . $organization->nid);
$this
->assertResponse(403, 'Access is denied to basic user.');
// Create privileged user and test that user can view the node.
$user_permissions = array(
'PM permission pmorganization: view all',
);
$this
->checkPermissions($user_permissions, TRUE);
$users['privileged'] = $this
->drupalCreateUser($user_permissions);
$this
->assertTrue(is_object($users['privileged']), 'Privileged user successfully created.');
$this
->drupalLogin($users['privileged']);
$this
->drupalGet('node/' . $organization->nid);
$this
->assertResponse(200, 'Access granted to privileged user.');
}
/**
* Tests "belonged" permission.
*/
public function testpmpermissionBelonged() {
// Allow PM Permission to override organization permissions.
variable_set('node_permissions_pmorganization', 0);
// Setup users.
$users = array();
// Create two users for testing view permissions (A & B).
$user_permissions = array(
'PM permission pmorganization: view own Organization',
);
$this
->checkPermissions($user_permissions, TRUE);
$users['a'] = $this
->drupalCreateUser($user_permissions);
$users['b'] = $this
->drupalCreateUser($user_permissions);
$this
->assertTrue(is_object($users['a']), 'User A successfully created.');
$this
->assertTrue(is_object($users['b']), 'User B successfully created.');
$this
->assertTrue(is_numeric($users['b']->uid), 'User B uid is numeric.');
$this
->assertTrue(!is_null($users['b']->uid), 'User B uid is not null.');
// Create a node to test against.
$organization_settings = array(
'type' => 'pmorganization',
'uid' => 1,
);
$organization_settings['pmorganization_members'][LANGUAGE_NONE][]['target_id'] = $users['b']->uid;
$organization = $this
->drupalCreateNode($organization_settings);
$this
->assertTrue(isset($organization->nid), 'Node successfully created.');
// Test that anonymous users can not view the node.
$this
->drupalLogout();
$this
->drupalGet('node/' . $organization->nid);
$this
->assertResponse(403, 'Access is denied to anonymous user.');
// Test that user A can not view the node.
$this
->drupalLogin($users['a']);
$this
->drupalGet('node/' . $organization->nid);
$this
->assertResponse(403, 'Access is denied to user A.');
// Test that user B can view the node.
$this
->drupalLogin($users['b']);
$this
->drupalGet('node/' . $organization->nid);
$this
->assertResponse(200, 'Access granted to user B.');
}
/**
* Tests permissions after parent change.
*/
public function testpmpermissionChangeParent() {
// Allow PM Permission to override project permissions.
variable_set('node_permissions_pmproject', 0);
// Setup users.
$users = array();
// Create two users for testing view permissions (A & B).
$user_permissions = array(
'PM permission pmproject: view own Organization',
);
$this
->checkPermissions($user_permissions, TRUE);
$users['a'] = $this
->drupalCreateUser($user_permissions);
$users['b'] = $this
->drupalCreateUser($user_permissions);
$this
->assertTrue(is_object($users['a']), 'User A successfully created.');
$this
->assertTrue(is_object($users['b']), 'User B successfully created.');
// Create two organization nodes (A & B) with respective users as members.
$organization_a_settings = array(
'type' => 'pmorganization',
'uid' => 1,
);
$organization_a_settings['pmorganization_members'][LANGUAGE_NONE][]['target_id'] = $users['a']->uid;
$organization_a = $this
->drupalCreateNode($organization_a_settings);
$organization_b_settings = array(
'type' => 'pmorganization',
'uid' => 1,
);
$organization_b_settings['pmorganization_members'][LANGUAGE_NONE][]['target_id'] = $users['b']->uid;
$organization_b = $this
->drupalCreateNode($organization_b_settings);
// Create one project node, attached to organization A.
$project_settings = array(
'type' => 'pmproject',
'uid' => 1,
);
$project_settings['pmproject_parent'][LANGUAGE_NONE][]['target_id'] = $organization_a->nid;
$project = $this
->drupalCreateNode($project_settings);
// Test that user A can view the project.
$this
->drupalLogin($users['a']);
$this
->drupalGet('node/' . $project->nid);
$this
->assertResponse(200, 'Access granted to user A when project is attached to organization A.');
// Test that user B can not view the project.
$this
->drupalLogin($users['b']);
$this
->drupalGet('node/' . $project->nid);
$this
->assertResponse(403, 'Access is denied to user B when project is attached to organization A.');
// Attach the project to organization B.
$project->pmproject_parent[LANGUAGE_NONE][0]['target_id'] = $organization_b->nid;
node_save($project);
// Test that user A can not view the project.
$this
->drupalLogin($users['a']);
$this
->drupalGet('node/' . $project->nid);
$this
->assertResponse(403, 'Access is denied to user A when project is attached to organization B.');
// Test that user B can view the project.
$this
->drupalLogin($users['b']);
$this
->drupalGet('node/' . $project->nid);
$this
->assertResponse(200, 'Access granted to user B when project is attached to organization B.');
}
/**
* Tests module uninstall path.
*/
public function testpmpermissionUninstall() {
$module = array(
'pmpermission',
);
module_disable($module);
drupal_uninstall_modules($module);
}
}
Classes
Name | Description |
---|---|
PmpermissionTestCase | Define a test case for PM Permission. |