Index: modules/simpletest/drupal_web_test_case.php =================================================================== RCS file: /cvs/drupal/drupal/modules/simpletest/drupal_web_test_case.php,v retrieving revision 1.56 diff -u -p -r1.56 drupal_web_test_case.php --- modules/simpletest/drupal_web_test_case.php 9 Nov 2008 03:07:54 -0000 1.56 +++ modules/simpletest/drupal_web_test_case.php 18 Nov 2008 15:58:54 -0000 @@ -558,14 +558,22 @@ class DrupalWebTestCase { } /** - * Internal helper function; Create a role with specified permissions. + * Assign permissions to a user role. * + * @param $role + * The user role to assign permissions. * @param $permissions * Array of permission names to assign to role. * @return - * Role ID of newly created role, or FALSE if role creation failed. + * TRUE or FALSE depending on whether the permissions are valid and assigned. */ - private function _drupalCreateRole($permissions = NULL) { + function drupalSetPermissions($role, $permissions = NULL) { + $rid = db_query("SELECT rid FROM {role} WHERE name = :name", array(':name' => $role))->fetchField(); + if ($rid === FALSE) { + $this->fail(t(' [permission] Role "' . $role . '" not found.')); + return FALSE; + } + // Generate string version of permissions list. if ($permissions === NULL) { $permissions = array('access comments', 'access content', 'post comments', 'post comments without approval'); @@ -575,18 +583,43 @@ class DrupalWebTestCase { return FALSE; } + // Clear permissions for role. + db_delete('role_permission') + ->condition('rid', $rid) + ->execute(); + + // Assign permissions to role. + $query = db_insert('role_permission') + ->fields(array('rid', 'permission')); + foreach ($permissions as $permission_string) { + $query->values(array( + 'rid' => $rid, + 'permission' => $permission_string, + )); + } + $query->execute(); + $count = db_query("SELECT COUNT(*) FROM {role_permission} WHERE rid = :rid", array(':rid' => $rid))->fetchField(); + $result = $count == count($permissions); + $this->assertTrue($result, t('Created permissions: @perms', array('@perms' => implode(', ', $permissions))), t('Role')); + + return $result; + } + + /** + * Internal helper function; Create a role with specified permissions. + * + * @param $permissions + * Array of permission names to assign to role. + * @return + * Role ID of newly created role, or FALSE if role creation failed. + */ + private function _drupalCreateRole($permissions = NULL) { // Create new role. $role_name = $this->randomName(); db_query("INSERT INTO {role} (name) VALUES ('%s')", $role_name); $role = db_fetch_object(db_query("SELECT * FROM {role} WHERE name = '%s'", $role_name)); $this->assertTrue($role, t('Created role of name: @role_name, id: @rid', array('@role_name' => $role_name, '@rid' => (isset($role->rid) ? $role->rid : t('-n/a-')))), t('Role')); - if ($role && !empty($role->rid)) { - // Assign permissions to role and mark it for clean-up. - foreach ($permissions as $permission_string) { - db_query("INSERT INTO {role_permission} (rid, permission) VALUES (%d, '%s')", $role->rid, $permission_string); - } - $count = db_result(db_query("SELECT COUNT(*) FROM {role_permission} WHERE rid = %d", $role->rid)); - $this->assertTrue($count == count($permissions), t('Created permissions: @perms', array('@perms' => implode(', ', $permissions))), t('Role')); + if ($role && !empty($role->rid) && $this->drupalSetPermissions($role->name, $permissions)) { return $role->rid; } else {