Chris@18
|
1 <?php
|
Chris@18
|
2
|
Chris@18
|
3 namespace Drupal\Tests\user\Functional;
|
Chris@18
|
4
|
Chris@18
|
5 use Drupal\Tests\BrowserTestBase;
|
Chris@18
|
6
|
Chris@18
|
7 /**
|
Chris@18
|
8 * Test 'sub-admin' account with permission to edit some users but without 'administer users' permission.
|
Chris@18
|
9 *
|
Chris@18
|
10 * @group user
|
Chris@18
|
11 */
|
Chris@18
|
12 class UserSubAdminTest extends BrowserTestBase {
|
Chris@18
|
13
|
Chris@18
|
14 /**
|
Chris@18
|
15 * {@inheritdoc}
|
Chris@18
|
16 */
|
Chris@18
|
17 public static $modules = ['user_access_test'];
|
Chris@18
|
18
|
Chris@18
|
19 /**
|
Chris@18
|
20 * Test create and cancel forms as 'sub-admin'.
|
Chris@18
|
21 */
|
Chris@18
|
22 public function testSubAdmin() {
|
Chris@18
|
23 $user = $this->drupalCreateUser(['sub-admin']);
|
Chris@18
|
24 $this->drupalLogin($user);
|
Chris@18
|
25
|
Chris@18
|
26 // Test that the create user page has admin fields.
|
Chris@18
|
27 $this->drupalGet('admin/people/create');
|
Chris@18
|
28 $this->assertSession()->fieldExists("edit-name");
|
Chris@18
|
29 $this->assertSession()->fieldExists("edit-notify");
|
Chris@18
|
30
|
Chris@18
|
31 // Not 'status' or 'roles' as they require extra permission.
|
Chris@18
|
32 $this->assertSession()->fieldNotExists("edit-status-0");
|
Chris@18
|
33 $this->assertSession()->fieldNotExists("edit-role");
|
Chris@18
|
34
|
Chris@18
|
35 // Test that create user gives an admin style message.
|
Chris@18
|
36 $edit = [
|
Chris@18
|
37 'name' => $this->randomMachineName(),
|
Chris@18
|
38 'mail' => $this->randomMachineName() . '@example.com',
|
Chris@18
|
39 'pass[pass1]' => $pass = $this->randomString(),
|
Chris@18
|
40 'pass[pass2]' => $pass,
|
Chris@18
|
41 'notify' => FALSE,
|
Chris@18
|
42 ];
|
Chris@18
|
43 $this->drupalPostForm('admin/people/create', $edit, 'Create new account');
|
Chris@18
|
44 $this->assertSession()->pageTextContains('Created a new user account for ' . $edit['name'] . '. No email has been sent.');
|
Chris@18
|
45
|
Chris@18
|
46 // Test that the cancel user page has admin fields.
|
Chris@18
|
47 $cancel_user = $this->createUser();
|
Chris@18
|
48 $this->drupalGet('user/' . $cancel_user->id() . '/cancel');
|
Chris@18
|
49 $this->assertSession()->responseContains('Are you sure you want to cancel the account ' . $cancel_user->getAccountName() . '?');
|
Chris@18
|
50 $this->assertSession()->responseContains('Disable the account and keep its content. This action cannot be undone.');
|
Chris@18
|
51
|
Chris@18
|
52 // Test that cancel confirmation gives an admin style message.
|
Chris@18
|
53 $this->drupalPostForm(NULL, NULL, t('Cancel account'));
|
Chris@18
|
54 $this->assertSession()->pageTextContains($cancel_user->getAccountName() . ' has been disabled.');
|
Chris@18
|
55
|
Chris@18
|
56 // Repeat with permission to select account cancellation method.
|
Chris@18
|
57 $user->addRole($this->drupalCreateRole(['select account cancellation method']));
|
Chris@18
|
58 $user->save();
|
Chris@18
|
59 $cancel_user = $this->createUser();
|
Chris@18
|
60 $this->drupalGet('user/' . $cancel_user->id() . '/cancel');
|
Chris@18
|
61 $this->assertSession()->pageTextContains('Select the method to cancel the account above.');
|
Chris@18
|
62 }
|
Chris@18
|
63
|
Chris@18
|
64 }
|