Chris@17: installConfig(['system', 'block', 'views', 'user']); Chris@17: $this->installSchema('system', ['sequences']); Chris@17: $this->installEntitySchema('user'); Chris@17: Chris@17: $this->controller = $this->container Chris@17: ->get('entity_type.manager') Chris@17: ->getStorage('block'); Chris@17: Chris@17: // Create a block with only required values. Chris@17: $this->block = $this->controller->create([ Chris@17: 'plugin' => 'views_block:who_s_online-who_s_online_block', Chris@17: 'region' => 'sidebar_first', Chris@17: 'id' => 'views_block__who_s_online_who_s_online_block', Chris@17: 'theme' => \Drupal::configFactory()->get('system.theme')->get('default'), Chris@17: 'label' => "Who's online", Chris@17: 'visibility' => [], Chris@17: 'weight' => 0, Chris@17: ]); Chris@17: $this->block->save(); Chris@17: Chris@17: $this->container->get('cache.render')->deleteAll(); Chris@17: $this->renderer = $this->container->get('renderer'); Chris@17: } Chris@17: Chris@17: /** Chris@17: * Test the Who's Online block. Chris@17: */ Chris@17: public function testWhosOnlineBlock() { Chris@17: $request_time = \Drupal::time()->getRequestTime(); Chris@17: // Generate users. Chris@17: $user1 = User::create([ Chris@17: 'name' => 'user1', Chris@17: 'mail' => 'user1@example.com', Chris@17: ]); Chris@17: $user1->addRole('administrator'); Chris@17: $user1->activate(); Chris@17: $user1->setLastAccessTime($request_time); Chris@17: $user1->save(); Chris@17: Chris@17: $user2 = User::create([ Chris@17: 'name' => 'user2', Chris@17: 'mail' => 'user2@example.com', Chris@17: ]); Chris@17: $user2->activate(); Chris@17: $user2->setLastAccessTime($request_time + 1); Chris@17: $user2->save(); Chris@17: Chris@17: $user3 = User::create([ Chris@17: 'name' => 'user3', Chris@17: 'mail' => 'user2@example.com', Chris@17: ]); Chris@17: $user3->activate(); Chris@17: // Insert an inactive user who should not be seen in the block. Chris@17: $inactive_time = $request_time - (60 * 60); Chris@17: $user3->setLastAccessTime($inactive_time); Chris@17: $user3->save(); Chris@17: Chris@17: // Test block output. Chris@17: \Drupal::currentUser()->setAccount($user1); Chris@17: Chris@17: // Test the rendering of a block. Chris@17: $entity = Block::load('views_block__who_s_online_who_s_online_block'); Chris@17: $output = entity_view($entity, 'block'); Chris@17: $this->setRawContent($this->renderer->renderRoot($output)); Chris@17: $this->assertRaw('2 users', 'Correct number of online users (2 users).'); Chris@18: $this->assertText($user1->getAccountName(), 'Active user 1 found in online list.'); Chris@18: $this->assertText($user2->getAccountName(), 'Active user 2 found in online list.'); Chris@18: $this->assertNoText($user3->getAccountName(), 'Inactive user not found in online list.'); Chris@18: $this->assertTrue(strpos($this->getRawContent(), $user1->getAccountName()) > strpos($this->getRawContent(), $user2->getAccountName()), 'Online users are ordered correctly.'); Chris@17: } Chris@17: Chris@17: }