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() { $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 = entity_view($entity, 'block'); $this->setRawContent($this->renderer->renderRoot($output)); $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.'); } }