You are here

public function UserAdminListingTest::testUserListing in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/user/tests/src/Functional/UserAdminListingTest.php \Drupal\Tests\user\Functional\UserAdminListingTest::testUserListing()
  2. 10 core/modules/user/tests/src/Functional/UserAdminListingTest.php \Drupal\Tests\user\Functional\UserAdminListingTest::testUserListing()

Tests the listing.

File

core/modules/user/tests/src/Functional/UserAdminListingTest.php, line 24

Class

UserAdminListingTest
Tests the user admin listing if views is not enabled.

Namespace

Drupal\Tests\user\Functional

Code

public function testUserListing() {

  // Ensure the anonymous user cannot access the admin listing.
  $this
    ->drupalGet('admin/people');
  $this
    ->assertSession()
    ->statusCodeEquals(403);

  // Create a bunch of users.
  $accounts = [];
  for ($i = 0; $i < 3; $i++) {
    $account = $this
      ->drupalCreateUser();
    $accounts[$account
      ->label()] = $account;
  }

  // Create a blocked user.
  $account = $this
    ->drupalCreateUser();
  $account
    ->block();
  $account
    ->save();
  $accounts[$account
    ->label()] = $account;

  // Create a user at a certain timestamp.
  $account = $this
    ->drupalCreateUser();
  $account->created = 1363219200;
  $account
    ->save();
  $accounts[$account
    ->label()] = $account;
  $timestamp_user = $account
    ->label();
  $rid_1 = $this
    ->drupalCreateRole([], 'custom_role_1', 'custom_role_1');
  $rid_2 = $this
    ->drupalCreateRole([], 'custom_role_2', 'custom_role_2');
  $account = $this
    ->drupalCreateUser();
  $account
    ->addRole($rid_1);
  $account
    ->addRole($rid_2);
  $account
    ->save();
  $accounts[$account
    ->label()] = $account;
  $role_account_name = $account
    ->label();

  // Create an admin user and look at the listing.
  $admin_user = $this
    ->drupalCreateUser([
    'administer users',
  ]);
  $accounts[$admin_user
    ->label()] = $admin_user;
  $accounts['admin'] = User::load(1);
  $this
    ->drupalLogin($admin_user);

  // Ensure the admin user can access the admin listing.
  $this
    ->drupalGet('admin/people');
  $this
    ->assertSession()
    ->statusCodeEquals(200);
  $result = $this
    ->xpath('//table[contains(@class, "responsive-enabled")]/tbody/tr');
  $result_accounts = [];
  foreach ($result as $account) {
    $account_columns = $account
      ->findAll('css', 'td');
    $name = $account_columns[0]
      ->find('css', 'a')
      ->getText();
    $roles = [];
    $account_roles = $account_columns[2]
      ->findAll('css', 'td div ul li');
    if (!empty($account_roles)) {
      foreach ($account_roles as $element) {
        $roles[] = $element
          ->getText();
      }
    }
    $result_accounts[$name] = [
      'name' => $name,
      'status' => $account_columns[1]
        ->getText(),
      'roles' => $roles,
      'member_for' => $account_columns[3]
        ->getText(),
      'last_access' => $account_columns[4]
        ->getText(),
    ];
  }
  $this
    ->assertEmpty(array_keys(array_diff_key($result_accounts, $accounts)), 'Ensure all accounts are listed.');
  foreach ($result_accounts as $name => $values) {
    $this
      ->assertEquals($accounts[$name]->status->value, $values['status'] == 'active');
  }
  $expected_roles = [
    'custom_role_1',
    'custom_role_2',
  ];
  $this
    ->assertEquals($expected_roles, $result_accounts[$role_account_name]['roles'], 'Ensure roles are listed properly.');
  $this
    ->assertEquals(\Drupal::service('date.formatter')
    ->formatTimeDiffSince($accounts[$timestamp_user]->created->value), $result_accounts[$timestamp_user]['member_for'], 'Ensure the right member time is displayed.');
  $this
    ->assertEquals('never', $result_accounts[$timestamp_user]['last_access'], 'Ensure the last access time is "never".');
}