annotate core/modules/user/tests/src/Kernel/WhosOnlineBlockTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents af1871eacc83
children
rev   line source
Chris@17 1 <?php
Chris@17 2
Chris@17 3 namespace Drupal\Tests\user\Kernel;
Chris@17 4
Chris@17 5 use Drupal\block\Entity\Block;
Chris@17 6 use Drupal\KernelTests\KernelTestBase;
Chris@17 7 use Drupal\user\Entity\User;
Chris@17 8
Chris@17 9 /**
Chris@17 10 * Tests the Who's Online Block.
Chris@17 11 *
Chris@17 12 * @group user
Chris@17 13 */
Chris@17 14 class WhosOnlineBlockTest extends KernelTestBase {
Chris@17 15
Chris@17 16 /**
Chris@17 17 * {@inheritdoc}
Chris@17 18 */
Chris@17 19 public static $modules = ['system', 'user', 'block', 'views'];
Chris@17 20
Chris@17 21 /**
Chris@17 22 * The block being tested.
Chris@17 23 *
Chris@17 24 * @var \Drupal\block\Entity\BlockInterface
Chris@17 25 */
Chris@17 26 protected $block;
Chris@17 27
Chris@17 28 /**
Chris@17 29 * The block storage.
Chris@17 30 *
Chris@17 31 * @var \Drupal\Core\Config\Entity\ConfigEntityStorageInterface
Chris@17 32 */
Chris@17 33 protected $controller;
Chris@17 34
Chris@17 35 /**
Chris@17 36 * The renderer.
Chris@17 37 *
Chris@17 38 * @var \Drupal\Core\Render\RendererInterface
Chris@17 39 */
Chris@17 40 protected $renderer;
Chris@17 41
Chris@17 42 /**
Chris@17 43 * {@inheritdoc}
Chris@17 44 */
Chris@17 45 protected function setUp() {
Chris@17 46 parent::setUp();
Chris@17 47 $this->installConfig(['system', 'block', 'views', 'user']);
Chris@17 48 $this->installSchema('system', ['sequences']);
Chris@17 49 $this->installEntitySchema('user');
Chris@17 50
Chris@17 51 $this->controller = $this->container
Chris@17 52 ->get('entity_type.manager')
Chris@17 53 ->getStorage('block');
Chris@17 54
Chris@17 55 // Create a block with only required values.
Chris@17 56 $this->block = $this->controller->create([
Chris@17 57 'plugin' => 'views_block:who_s_online-who_s_online_block',
Chris@17 58 'region' => 'sidebar_first',
Chris@17 59 'id' => 'views_block__who_s_online_who_s_online_block',
Chris@17 60 'theme' => \Drupal::configFactory()->get('system.theme')->get('default'),
Chris@17 61 'label' => "Who's online",
Chris@17 62 'visibility' => [],
Chris@17 63 'weight' => 0,
Chris@17 64 ]);
Chris@17 65 $this->block->save();
Chris@17 66
Chris@17 67 $this->container->get('cache.render')->deleteAll();
Chris@17 68 $this->renderer = $this->container->get('renderer');
Chris@17 69 }
Chris@17 70
Chris@17 71 /**
Chris@17 72 * Test the Who's Online block.
Chris@17 73 */
Chris@17 74 public function testWhosOnlineBlock() {
Chris@17 75 $request_time = \Drupal::time()->getRequestTime();
Chris@17 76 // Generate users.
Chris@17 77 $user1 = User::create([
Chris@17 78 'name' => 'user1',
Chris@17 79 'mail' => 'user1@example.com',
Chris@17 80 ]);
Chris@17 81 $user1->addRole('administrator');
Chris@17 82 $user1->activate();
Chris@17 83 $user1->setLastAccessTime($request_time);
Chris@17 84 $user1->save();
Chris@17 85
Chris@17 86 $user2 = User::create([
Chris@17 87 'name' => 'user2',
Chris@17 88 'mail' => 'user2@example.com',
Chris@17 89 ]);
Chris@17 90 $user2->activate();
Chris@17 91 $user2->setLastAccessTime($request_time + 1);
Chris@17 92 $user2->save();
Chris@17 93
Chris@17 94 $user3 = User::create([
Chris@17 95 'name' => 'user3',
Chris@17 96 'mail' => 'user2@example.com',
Chris@17 97 ]);
Chris@17 98 $user3->activate();
Chris@17 99 // Insert an inactive user who should not be seen in the block.
Chris@17 100 $inactive_time = $request_time - (60 * 60);
Chris@17 101 $user3->setLastAccessTime($inactive_time);
Chris@17 102 $user3->save();
Chris@17 103
Chris@17 104 // Test block output.
Chris@17 105 \Drupal::currentUser()->setAccount($user1);
Chris@17 106
Chris@17 107 // Test the rendering of a block.
Chris@17 108 $entity = Block::load('views_block__who_s_online_who_s_online_block');
Chris@17 109 $output = entity_view($entity, 'block');
Chris@17 110 $this->setRawContent($this->renderer->renderRoot($output));
Chris@17 111 $this->assertRaw('2 users', 'Correct number of online users (2 users).');
Chris@18 112 $this->assertText($user1->getAccountName(), 'Active user 1 found in online list.');
Chris@18 113 $this->assertText($user2->getAccountName(), 'Active user 2 found in online list.');
Chris@18 114 $this->assertNoText($user3->getAccountName(), 'Inactive user not found in online list.');
Chris@18 115 $this->assertTrue(strpos($this->getRawContent(), $user1->getAccountName()) > strpos($this->getRawContent(), $user2->getAccountName()), 'Online users are ordered correctly.');
Chris@17 116 }
Chris@17 117
Chris@17 118 }