3 namespace Drupal\Tests\user\Kernel;
5 use Drupal\block\Entity\Block;
6 use Drupal\KernelTests\KernelTestBase;
7 use Drupal\user\Entity\User;
10 * Tests the Who's Online Block.
14 class WhosOnlineBlockTest extends KernelTestBase {
19 public static $modules = ['system', 'user', 'block', 'views'];
22 * The block being tested.
24 * @var \Drupal\block\Entity\BlockInterface
31 * @var \Drupal\Core\Config\Entity\ConfigEntityStorageInterface
33 protected $controller;
38 * @var \Drupal\Core\Render\RendererInterface
45 protected function setUp() {
47 $this->installConfig(['system', 'block', 'views', 'user']);
48 $this->installSchema('system', ['sequences']);
49 $this->installEntitySchema('user');
51 $this->controller = $this->container
52 ->get('entity_type.manager')
53 ->getStorage('block');
55 // Create a block with only required values.
56 $this->block = $this->controller->create([
57 'plugin' => 'views_block:who_s_online-who_s_online_block',
58 'region' => 'sidebar_first',
59 'id' => 'views_block__who_s_online_who_s_online_block',
60 'theme' => \Drupal::configFactory()->get('system.theme')->get('default'),
61 'label' => "Who's online",
67 $this->container->get('cache.render')->deleteAll();
68 $this->renderer = $this->container->get('renderer');
72 * Test the Who's Online block.
74 public function testWhosOnlineBlock() {
75 $request_time = \Drupal::time()->getRequestTime();
77 $user1 = User::create([
79 'mail' => 'user1@example.com',
81 $user1->addRole('administrator');
83 $user1->setLastAccessTime($request_time);
86 $user2 = User::create([
88 'mail' => 'user2@example.com',
91 $user2->setLastAccessTime($request_time + 1);
94 $user3 = User::create([
96 'mail' => 'user2@example.com',
99 // Insert an inactive user who should not be seen in the block.
100 $inactive_time = $request_time - (60 * 60);
101 $user3->setLastAccessTime($inactive_time);
104 // Test block output.
105 \Drupal::currentUser()->setAccount($user1);
107 // Test the rendering of a block.
108 $entity = Block::load('views_block__who_s_online_who_s_online_block');
109 $output = entity_view($entity, 'block');
110 $this->setRawContent($this->renderer->renderRoot($output));
111 $this->assertRaw('2 users', 'Correct number of online users (2 users).');
112 $this->assertText($user1->getUsername(), 'Active user 1 found in online list.');
113 $this->assertText($user2->getUsername(), 'Active user 2 found in online list.');
114 $this->assertNoText($user3->getUsername(), 'Inactive user not found in online list.');
115 $this->assertTrue(strpos($this->getRawContent(), $user1->getUsername()) > strpos($this->getRawContent(), $user2->getUsername()), 'Online users are ordered correctly.');