You are here

function UserAdminTest::testUserAdmin in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 core/modules/user/src/Tests/UserAdminTest.php \Drupal\user\Tests\UserAdminTest::testUserAdmin()

Registers a user and deletes it.

File

core/modules/user/src/Tests/UserAdminTest.php, line 30
Contains \Drupal\user\Tests\UserAdminTest.

Class

UserAdminTest
Tests user administration page functionality.

Namespace

Drupal\user\Tests

Code

function testUserAdmin() {
  $user_a = $this
    ->drupalCreateUser();
  $user_a->name = 'User A';
  $user_a->mail = $this
    ->randomMachineName() . '@example.com';
  $user_a
    ->save();
  $user_b = $this
    ->drupalCreateUser(array(
    'administer taxonomy',
  ));
  $user_b->name = 'User B';
  $user_b
    ->save();
  $user_c = $this
    ->drupalCreateUser(array(
    'administer taxonomy',
  ));
  $user_c->name = 'User C';
  $user_c
    ->save();
  $user_storage = $this->container
    ->get('entity.manager')
    ->getStorage('user');

  // Create admin user to delete registered user.
  $admin_user = $this
    ->drupalCreateUser(array(
    'administer users',
  ));

  // Use a predictable name so that we can reliably order the user admin page
  // by name.
  $admin_user->name = 'Admin user';
  $admin_user
    ->save();
  $this
    ->drupalLogin($admin_user);
  $this
    ->drupalGet('admin/people');
  $this
    ->assertText($user_a
    ->getUsername(), 'Found user A on admin users page');
  $this
    ->assertText($user_b
    ->getUsername(), 'Found user B on admin users page');
  $this
    ->assertText($user_c
    ->getUsername(), 'Found user C on admin users page');
  $this
    ->assertText($admin_user
    ->getUsername(), 'Found Admin user on admin users page');

  // Test for existence of edit link in table.
  $link = $user_a
    ->link(t('Edit'), 'edit-form', array(
    'query' => array(
      'destination' => $user_a
        ->url('collection'),
    ),
  ));
  $this
    ->assertRaw($link, 'Found user A edit link on admin users page');

  // Test exposed filter elements.
  foreach (array(
    'user',
    'role',
    'permission',
    'status',
  ) as $field) {
    $this
      ->assertField("edit-{$field}", "{$field} exposed filter found.");
  }

  // Make sure the reduce duplicates element from the ManyToOneHelper is not
  // displayed.
  $this
    ->assertNoField('edit-reduce-duplicates', 'Reduce duplicates form element not found in exposed filters.');

  // Filter the users by name/email.
  $this
    ->drupalGet('admin/people', array(
    'query' => array(
      'user' => $user_a
        ->getUsername(),
    ),
  ));
  $result = $this
    ->xpath('//table/tbody/tr');
  $this
    ->assertEqual(1, count($result), 'Filter by username returned the right amount.');
  $this
    ->assertEqual($user_a
    ->getUsername(), (string) $result[0]->td[1]->span, 'Filter by username returned the right user.');
  $this
    ->drupalGet('admin/people', array(
    'query' => array(
      'user' => $user_a
        ->getEmail(),
    ),
  ));
  $result = $this
    ->xpath('//table/tbody/tr');
  $this
    ->assertEqual(1, count($result), 'Filter by username returned the right amount.');
  $this
    ->assertEqual($user_a
    ->getUsername(), (string) $result[0]->td[1]->span, 'Filter by username returned the right user.');

  // Filter the users by permission 'administer taxonomy'.
  $this
    ->drupalGet('admin/people', array(
    'query' => array(
      'permission' => 'administer taxonomy',
    ),
  ));

  // Check if the correct users show up.
  $this
    ->assertNoText($user_a
    ->getUsername(), 'User A not on filtered by perm admin users page');
  $this
    ->assertText($user_b
    ->getUsername(), 'Found user B on filtered by perm admin users page');
  $this
    ->assertText($user_c
    ->getUsername(), 'Found user C on filtered by perm admin users page');

  // Filter the users by role. Grab the system-generated role name for User C.
  $roles = $user_c
    ->getRoles();
  unset($roles[array_search(RoleInterface::AUTHENTICATED_ID, $roles)]);
  $this
    ->drupalGet('admin/people', array(
    'query' => array(
      'role' => reset($roles),
    ),
  ));

  // Check if the correct users show up when filtered by role.
  $this
    ->assertNoText($user_a
    ->getUsername(), 'User A not on filtered by role on admin users page');
  $this
    ->assertNoText($user_b
    ->getUsername(), 'User B not on filtered by role on admin users page');
  $this
    ->assertText($user_c
    ->getUsername(), 'User C on filtered by role on admin users page');

  // Test blocking of a user.
  $account = $user_storage
    ->load($user_c
    ->id());
  $this
    ->assertTrue($account
    ->isActive(), 'User C not blocked');
  $edit = array();
  $edit['action'] = 'user_block_user_action';
  $edit['user_bulk_form[4]'] = TRUE;
  $this
    ->drupalPostForm('admin/people', $edit, t('Apply'), array(
    // Sort the table by username so that we know reliably which user will be
    // targeted with the blocking action.
    'query' => array(
      'order' => 'name',
      'sort' => 'asc',
    ),
  ));
  $user_storage
    ->resetCache(array(
    $user_c
      ->id(),
  ));
  $account = $user_storage
    ->load($user_c
    ->id());
  $this
    ->assertTrue($account
    ->isBlocked(), 'User C blocked');

  // Test filtering on admin page for blocked users
  $this
    ->drupalGet('admin/people', array(
    'query' => array(
      'status' => 2,
    ),
  ));
  $this
    ->assertNoText($user_a
    ->getUsername(), 'User A not on filtered by status on admin users page');
  $this
    ->assertNoText($user_b
    ->getUsername(), 'User B not on filtered by status on admin users page');
  $this
    ->assertText($user_c
    ->getUsername(), 'User C on filtered by status on admin users page');

  // Test unblocking of a user from /admin/people page and sending of activation mail
  $editunblock = array();
  $editunblock['action'] = 'user_unblock_user_action';
  $editunblock['user_bulk_form[4]'] = TRUE;
  $this
    ->drupalPostForm('admin/people', $editunblock, t('Apply'), array(
    // Sort the table by username so that we know reliably which user will be
    // targeted with the blocking action.
    'query' => array(
      'order' => 'name',
      'sort' => 'asc',
    ),
  ));
  $user_storage
    ->resetCache(array(
    $user_c
      ->id(),
  ));
  $account = $user_storage
    ->load($user_c
    ->id());
  $this
    ->assertTrue($account
    ->isActive(), 'User C unblocked');
  $this
    ->assertMail("to", $account
    ->getEmail(), "Activation mail sent to user C");

  // Test blocking and unblocking another user from /user/[uid]/edit form and sending of activation mail
  $user_d = $this
    ->drupalCreateUser(array());
  $user_storage
    ->resetCache(array(
    $user_d
      ->id(),
  ));
  $account1 = $user_storage
    ->load($user_d
    ->id());
  $this
    ->drupalPostForm('user/' . $account1
    ->id() . '/edit', array(
    'status' => 0,
  ), t('Save'));
  $user_storage
    ->resetCache(array(
    $user_d
      ->id(),
  ));
  $account1 = $user_storage
    ->load($user_d
    ->id());
  $this
    ->assertTrue($account1
    ->isBlocked(), 'User D blocked');
  $this
    ->drupalPostForm('user/' . $account1
    ->id() . '/edit', array(
    'status' => TRUE,
  ), t('Save'));
  $user_storage
    ->resetCache(array(
    $user_d
      ->id(),
  ));
  $account1 = $user_storage
    ->load($user_d
    ->id());
  $this
    ->assertTrue($account1
    ->isActive(), 'User D unblocked');
  $this
    ->assertMail("to", $account1
    ->getEmail(), "Activation mail sent to user D");
}