Index: modules/simpletest/drupal_web_test_case.php =================================================================== RCS file: /cvs/drupal/drupal/modules/simpletest/drupal_web_test_case.php,v retrieving revision 1.51 diff -u -p -r1.51 drupal_web_test_case.php --- modules/simpletest/drupal_web_test_case.php 15 Oct 2008 16:05:51 -0000 1.51 +++ modules/simpletest/drupal_web_test_case.php 17 Oct 2008 19:18:55 -0000 @@ -558,6 +558,34 @@ class DrupalWebTestCase { } /** + * Grant the anonymous user role a set of permissions. + * + * @param $permissions + * Array of permission names to assign. + * @return + * Boolean, TRUE on success. + */ + function drupalAnonymousUserPermissions($permissions = NULL) { + if ($permissions === NULL) { + $permissions = array('access content'); + } + + if (!$this->checkPermissions($permissions)) { + return FALSE; + } + + // Clear out existing permissions for the anonymous user role. + db_query("DELETE FROM {role_permission} WHERE rid = %d", array(1)); + foreach ($permissions as $permission_string) { + db_query("INSERT INTO {role_permission} (rid, permission) VALUES (%d, '%s')", 1, $permission_string); + } + + $count = db_result(db_query("SELECT COUNT(*) FROM {role_permission} WHERE rid = %d", array(1))); + $this->assertTrue($count == count($permissions), t('Granted anonymous user permissions: %perms', array('5perms' => implode(', ', $permissions)))); + return $count == count($permissions); + } + + /** * Internal helper function; Create a role with specified permissions. * * @param $permissions Index: modules/user/user.test =================================================================== RCS file: /cvs/drupal/drupal/modules/user/user.test,v retrieving revision 1.17 diff -u -p -r1.17 user.test --- modules/user/user.test 10 Oct 2008 07:49:49 -0000 1.17 +++ modules/user/user.test 17 Oct 2008 19:18:57 -0000 @@ -570,3 +570,46 @@ class UserAutocompleteTestCase extends D $this->assertRaw($this->unprivileged_user->name, t('User name found in autocompletion results.')); } } + +/** + * Test anonymous users. + */ +class UserAnonymousTestCase extends DrupalWebTestCase { + /** + * Implementation of getInfo(). + */ + function getInfo() { + return array( + 'name' => t('Anonymous users'), + 'description' => t('Test anonymous users.'), + 'group' => t('User') + ); + } + + /** + * Implementation of setUp(). + */ + function setUp() { + parent::setUp(); + + // Setup some permissions. + $this->invalid_permissions = array('invalid permission'); + $this->valid_permissions = array('access content', 'view revisions'); + $this->mixed_permissions = array_merge($this->invalid_permissions, $this->valid_permissions); + + // Get anonymous user. + $this->anonymous_user = user_load(0); + } + + /** + * Test anonymous user permissions. + */ + function testAnonymousUserPermissions() { + $this->assertTrue($this->drupalAnonymousUserPermissions($this->valid_permissions), t('Granted anonymous user a valid set of permissions.')); + + foreach ($this->valid_permissions as $permission) { + $this->assertTrue(user_access($permission, $this->anonymous_user), t('Anonymous user has the %perm permission', array('%perm' => $permission))); + } + } +} +