diff --git a/core/modules/user/tests/src/Kernel/WhosOnlineBlockTest.php b/core/modules/user/tests/src/Kernel/WhosOnlineBlockTest.php new file mode 100644 index 0000000000..03b5da3dc1 --- /dev/null +++ b/core/modules/user/tests/src/Kernel/WhosOnlineBlockTest.php @@ -0,0 +1,117 @@ +installConfig(['system', 'block', 'views', 'user']); + $this->installSchema('system', ['sequences']); + $this->installEntitySchema('user'); + + $this->controller = $this->container + ->get('entity_type.manager') + ->getStorage('block'); + + // Create a block with only required values. + $this->block = $this->controller->create([ + 'plugin' => 'views_block:who_s_online-who_s_online_block', + 'region' => 'sidebar_first', + 'id' => 'views_block__who_s_online_who_s_online_block', + 'theme' => \Drupal::configFactory()->get('system.theme')->get('default'), + 'label' => "Who's online", + 'visibility' => [], + 'weight' => 0, + ]); + + $this->block->save(); + + $this->container->get('cache.render')->deleteAll(); + + $this->renderer = $this->container->get('renderer'); + } + + /** + * Test the Who's Online block. + */ + public function testWhosOnlineBlock() { + + // Generate users. + $user1 = User::create([ + 'name' => 'user1', + 'mail' => 'user1@example.com', + ]); + $user1->addRole('administrator'); + $user1->activate(); + $user1->setLastAccessTime(\Drupal::time()->getRequestTime()); + $user1->save(); + + $user2 = User::create([ + 'name' => 'user2', + 'mail' => 'user2@example.com', + ]); + $user2->activate(); + $user2->setLastAccessTime(\Drupal::time()->getRequestTime() + 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 = \Drupal::time()->getRequestTime() - (15 * 60) - 1; + $user3->setLastAccessTime($inactive_time); + $user3->save(); + + // Test block output. + \Drupal::currentUser()->setAccount($user1); + $render_controller = \Drupal::entityTypeManager()->getViewBuilder($this->block->getEntityTypeId()); + $content = $render_controller->view($this->block, 'block'); + $this->setRawContent($this->renderer->renderRoot($content)); + $this->assertRaw('2 users', 'Correct number of online users (2 users).'); + $this->assertText($user1->getUsername(), 'Active user 1 found in online list.'); + $this->assertText($user2->getUsername(), 'Active user 2 found in online list.'); + $this->assertNoText($user3->getUsername(), 'Inactive user not found in online list.'); + $this->assertTrue(strpos($this->getRawContent(), $user1->getUsername()) > strpos($this->getRawContent(), $user2->getUsername()), 'Online users are ordered correctly.'); + } + +}