Index: modules/user/user.admin.inc =================================================================== RCS file: /cvs/drupal/drupal/modules/user/user.admin.inc,v retrieving revision 1.90 diff -u -p -r1.90 user.admin.inc --- modules/user/user.admin.inc 28 Nov 2009 21:44:54 -0000 1.90 +++ modules/user/user.admin.inc 30 Nov 2009 09:31:18 -0000 @@ -760,11 +760,14 @@ function theme_user_admin_permissions($v function user_admin_role() { $rid = arg(5); if ($rid) { - if ($rid == DRUPAL_ANONYMOUS_RID || $rid == DRUPAL_AUTHENTICATED_RID) { + if ($rid == DRUPAL_ANONYMOUS_RID || $rid == DRUPAL_AUTHENTICATED_RID || !is_numeric($rid)) { drupal_goto('admin/config/people/roles'); } // Display the edit role form. $role = db_query('SELECT * FROM {role} WHERE rid = :rid', array(':rid' => $rid))->fetchObject(); + if (empty($role)) { + drupal_goto('admin/config/people/roles'); + } $form['name'] = array( '#type' => 'textfield', '#title' => t('Role name'), @@ -826,15 +829,15 @@ function user_admin_role_submit($form, & $role = (object)$form_state['values']; if ($form_state['values']['op'] == t('Save role')) { user_role_save($role); - drupal_set_message(t('The role has been renamed.')); + drupal_set_message(t('Renamed role to %name.', array('%name' => $role->name))); } elseif ($form_state['values']['op'] == t('Delete role')) { - user_role_delete($form_state['values']['rid']); - drupal_set_message(t('The role has been deleted.')); + user_role_delete((int)$form_state['values']['rid']); + drupal_set_message(t('Deleted role %name.', array('%name' => $role->name))); } elseif ($form_state['values']['op'] == t('Add role')) { user_role_save($role); - drupal_set_message(t('The role has been added.')); + drupal_set_message(t('Added new role %name.', array('%name' => $role->name))); } $form_state['redirect'] = 'admin/config/people/roles'; return; Index: modules/user/user.test =================================================================== RCS file: /cvs/drupal/drupal/modules/user/user.test,v retrieving revision 1.69 diff -u -p -r1.69 user.test --- modules/user/user.test 28 Nov 2009 21:44:54 -0000 1.69 +++ modules/user/user.test 30 Nov 2009 09:31:19 -0000 @@ -1319,3 +1319,59 @@ class UserEditTestCase extends DrupalWeb $this->assertRaw(t('The name %name is already taken.', array('%name' => $edit['name']))); } } + +/** + * Test case to test adding, editing and deleting roles. + */ +class UserRoleEditTestCase extends DrupalWebTestCase { + protected $admin_user; + protected $role; + protected $rid; + + public static function getInfo() { + return array( + 'name' => 'Role edit', + 'description' => 'Test role edit page.', + 'group' => 'User', + ); + } + + function setUp() { + parent::setUp(); + // Create a user. + $this->admin_user = $this->drupalCreateUser(array('administer permissions', 'administer users')); + $this->drupalLogin($this->admin_user); + $this->role = $this->randomName(); + // Find the new role ID - it must be the maximum. + $this->rid = max(array_keys($this->admin_user->roles)); + + } + + /** + * Test adding a role. + */ + function testAddRole() { + $edit = array('name' => $this->role); + $this->drupalPost('admin/config/people/roles', $edit, t('Add role')); + $this->assertText($this->role, t('Added role name successfully displayed.')); + } + + /** + * Test editing a role. + */ + function testEditRole() { + $this->role = $this->randomName(); + $edit = array('name' => $this->role); + $this->drupalPost("admin/config/people/roles/edit/{$this->rid}", $edit, t('Save role')); + $this->assertText($this->role, t('Edited role name successfully displayed.')); + } + + /** + * Test deleting a role. + */ + function testDeleteRole() { + $this->drupalLogin($this->admin_user); + $this->drupalPost("admin/config/people/roles/edit/{$this->rid}", array(), t('Delete role')); + $this->assertNoRaw("admin/config/people/roles/edit/{$this->rid}", t('Role edit link removed.')); + } +}