Mercurial > hg > isophonics-drupal-site
diff core/modules/user/tests/src/Functional/UserRolesAssignmentTest.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 7a779792577d |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/user/tests/src/Functional/UserRolesAssignmentTest.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,94 @@ +<?php + +namespace Drupal\Tests\user\Functional; + +use Drupal\Tests\BrowserTestBase; + +/** + * Tests that users can be assigned and unassigned roles. + * + * @group user + */ +class UserRolesAssignmentTest extends BrowserTestBase { + + protected function setUp() { + parent::setUp(); + $admin_user = $this->drupalCreateUser(['administer permissions', 'administer users']); + $this->drupalLogin($admin_user); + } + + /** + * Tests that a user can be assigned a role and that the role can be removed + * again. + */ + public function testAssignAndRemoveRole() { + $rid = $this->drupalCreateRole(['administer users']); + $account = $this->drupalCreateUser(); + + // Assign the role to the user. + $this->drupalPostForm('user/' . $account->id() . '/edit', ["roles[$rid]" => $rid], t('Save')); + $this->assertText(t('The changes have been saved.')); + $this->assertFieldChecked('edit-roles-' . $rid, 'Role is assigned.'); + $this->userLoadAndCheckRoleAssigned($account, $rid); + + // Remove the role from the user. + $this->drupalPostForm('user/' . $account->id() . '/edit', ["roles[$rid]" => FALSE], t('Save')); + $this->assertText(t('The changes have been saved.')); + $this->assertNoFieldChecked('edit-roles-' . $rid, 'Role is removed from user.'); + $this->userLoadAndCheckRoleAssigned($account, $rid, FALSE); + } + + /** + * Tests that when creating a user the role can be assigned. And that it can + * be removed again. + */ + public function testCreateUserWithRole() { + $rid = $this->drupalCreateRole(['administer users']); + // Create a new user and add the role at the same time. + $edit = [ + 'name' => $this->randomMachineName(), + 'mail' => $this->randomMachineName() . '@example.com', + 'pass[pass1]' => $pass = $this->randomString(), + 'pass[pass2]' => $pass, + "roles[$rid]" => $rid, + ]; + $this->drupalPostForm('admin/people/create', $edit, t('Create new account')); + $this->assertText(t('Created a new user account for @name.', ['@name' => $edit['name']])); + // Get the newly added user. + $account = user_load_by_name($edit['name']); + + $this->drupalGet('user/' . $account->id() . '/edit'); + $this->assertFieldChecked('edit-roles-' . $rid, 'Role is assigned.'); + $this->userLoadAndCheckRoleAssigned($account, $rid); + + // Remove the role again. + $this->drupalPostForm('user/' . $account->id() . '/edit', ["roles[$rid]" => FALSE], t('Save')); + $this->assertText(t('The changes have been saved.')); + $this->assertNoFieldChecked('edit-roles-' . $rid, 'Role is removed from user.'); + $this->userLoadAndCheckRoleAssigned($account, $rid, FALSE); + } + + /** + * Check role on user object. + * + * @param object $account + * The user account to check. + * @param string $rid + * The role ID to search for. + * @param bool $is_assigned + * (optional) Whether to assert that $rid exists (TRUE) or not (FALSE). + * Defaults to TRUE. + */ + private function userLoadAndCheckRoleAssigned($account, $rid, $is_assigned = TRUE) { + $user_storage = $this->container->get('entity.manager')->getStorage('user'); + $user_storage->resetCache([$account->id()]); + $account = $user_storage->load($account->id()); + if ($is_assigned) { + $this->assertFalse(array_search($rid, $account->getRoles()) === FALSE, 'The role is present in the user object.'); + } + else { + $this->assertTrue(array_search($rid, $account->getRoles()) === FALSE, 'The role is not present in the user object.'); + } + } + +}