Index: modules/user/user.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/user/user.test,v
retrieving revision 1.17
diff -u -r1.17 user.test
--- modules/user/user.test	10 Oct 2008 07:49:49 -0000	1.17
+++ modules/user/user.test	17 Nov 2008 03:41:19 -0000
@@ -570,3 +570,85 @@
     $this->assertRaw($this->unprivileged_user->name, t('User name found in autocompletion results.'));
   }
 }
+
+/**
+ * Test user roles.
+ */
+class RoleAdministrationTestCase extends DrupalWebTestCase {
+
+  /**
+   * Implementation of getInfo().
+   */
+  function getInfo() {
+    return array(
+      'name' => t('Role administration'),
+      'description' => t('Tests addition and deletion of roles and whether users can be assigned and removed from roles.'),
+      'group' => t('User')
+    );
+  }
+
+  /**
+   * Implementation of setUp().
+   */
+  function setUp() {
+    parent::setUp();
+    $this->admin_user = $this->drupalCreateUser(array('administer users', 'administer permissions'));
+    $this->drupalLogin($this->admin_user);
+  }
+
+  /**
+   * Add a role to the site.
+   */
+  function testAddRole() {
+    // Determine largest rid
+    $edit['name'] = 'test_role';
+    $this->drupalPost('admin/user/roles', $edit, t('Add role'));
+    $this->assertText(t('The role has been added.'), t('New roles submitted through form.'));
+    //file_put_contents('output.html', $this->drupalGetContent());
+    //file_put_contents('output.html', $regular_user->uid);
+
+    $result = db_query('SELECT rid FROM {role} WHERE name = "test_role"');
+    $this->assertTrue($result->fetch(), 'New role added to database.');
+  }
+
+  /**
+   * Delete a role from the site.
+   */
+  function testDeleteRole() {
+    // Determine largest rid
+    $rid = db_query('SELECT max(rid) FROM {role}')->fetchField();
+    $this->drupalPost('admin/user/roles/edit/' . $rid, array(), t('Delete role'));
+    $this->assertText(t('The role has been deleted.'), t('Role deleted through form.'));
+    $result = db_query('SELECT rid FROM {role} WHERE rid = :rid', array(':rid' => $rid));
+    $this->assertFalse($result->fetch(), 'Role deleted from database.');
+  }
+
+  /**
+   * Adds a user to an existing role and removes them from the role.
+   */
+  function testAddAndRemoveUserFromRole() {
+    // Add a user to an existing role
+    $regular_user = $this->drupalCreateUser(array());
+    $rid = db_query('SELECT max(rid) FROM {role}')->fetchField();
+    $uid = $regular_user->uid;
+    $edit['roles[' . $rid . ']'] = $rid;
+    $this->drupalPost("user/$uid/edit", $edit, t('Save'));
+    $this->assertText(t('The changes have been saved.'), t('User added to role through form.'));
+    $result = db_query('SELECT * FROM {users_roles} WHERE uid = :uid AND rid = :rid',
+        array(':uid' => $uid,
+              ':rid' => $rid)
+    );  
+    $this->assertTrue($result->fetch(), 'Assigned user to a role');
+
+    // Remove a user to an existing role
+    $edit['roles[' . $rid . ']'] = FALSE;
+    $this->drupalPost("user/$uid/edit", $edit, t('Save'));
+    $this->assertText(t('The changes have been saved.'), t('User removed from role through form.'));
+    $result = db_query('SELECT * FROM {users_roles} WHERE uid = :uid AND rid = :rid',
+        array(':uid' => $uid,
+              ':rid' => $rid)
+    );  
+    $this->assertFalse($result->fetch(), 'Removed user from a role');
+  }
+    
+}
