You are here

public function WhosOnlineBlockTest::testWhosOnlineBlock in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/user/tests/src/Kernel/WhosOnlineBlockTest.php \Drupal\Tests\user\Kernel\WhosOnlineBlockTest::testWhosOnlineBlock()

Tests the Who's Online block.

File

core/modules/user/tests/src/Kernel/WhosOnlineBlockTest.php, line 74

Class

WhosOnlineBlockTest
Tests the Who's Online Block.

Namespace

Drupal\Tests\user\Kernel

Code

public function testWhosOnlineBlock() {
  $request_time = \Drupal::time()
    ->getRequestTime();

  // Generate users.
  $user1 = User::create([
    'name' => 'user1',
    'mail' => 'user1@example.com',
  ]);
  $user1
    ->addRole('administrator');
  $user1
    ->activate();
  $user1
    ->setLastAccessTime($request_time);
  $user1
    ->save();
  $user2 = User::create([
    'name' => 'user2',
    'mail' => 'user2@example.com',
  ]);
  $user2
    ->activate();
  $user2
    ->setLastAccessTime($request_time + 1);
  $user2
    ->save();
  $user3 = User::create([
    'name' => 'user3',
    'mail' => 'user2@example.com',
  ]);
  $user3
    ->activate();

  // Insert an inactive user who should not be seen in the block.
  $inactive_time = $request_time - 60 * 60;
  $user3
    ->setLastAccessTime($inactive_time);
  $user3
    ->save();

  // Test block output.
  \Drupal::currentUser()
    ->setAccount($user1);

  // Test the rendering of a block.
  $entity = Block::load('views_block__who_s_online_who_s_online_block');
  $output = \Drupal::entityTypeManager()
    ->getViewBuilder($entity
    ->getEntityTypeId())
    ->view($entity, 'block');
  $this
    ->setRawContent($this->renderer
    ->renderRoot($output));
  $this
    ->assertRaw('2 users', 'Correct number of online users (2 users).');
  $this
    ->assertText($user1
    ->getAccountName(), 'Active user 1 found in online list.');
  $this
    ->assertText($user2
    ->getAccountName(), 'Active user 2 found in online list.');
  $this
    ->assertNoText($user3
    ->getAccountName(), 'Inactive user not found in online list.');

  // Verify that online users are ordered correctly.
  $this
    ->assertGreaterThan(strpos($this
    ->getRawContent(), $user2
    ->getAccountName()), strpos($this
    ->getRawContent(), $user1
    ->getAccountName()));
}