Pull merge.
[yaffs-website] / web / core / modules / user / tests / src / Kernel / WhosOnlineBlockTest.php
1 <?php
2
3 namespace Drupal\Tests\user\Kernel;
4
5 use Drupal\block\Entity\Block;
6 use Drupal\KernelTests\KernelTestBase;
7 use Drupal\user\Entity\User;
8
9 /**
10  * Tests the Who's Online Block.
11  *
12  * @group user
13  */
14 class WhosOnlineBlockTest extends KernelTestBase {
15
16   /**
17    * {@inheritdoc}
18    */
19   public static $modules = ['system', 'user', 'block', 'views'];
20
21   /**
22    * The block being tested.
23    *
24    * @var \Drupal\block\Entity\BlockInterface
25    */
26   protected $block;
27
28   /**
29    * The block storage.
30    *
31    * @var \Drupal\Core\Config\Entity\ConfigEntityStorageInterface
32    */
33   protected $controller;
34
35   /**
36    * The renderer.
37    *
38    * @var \Drupal\Core\Render\RendererInterface
39    */
40   protected $renderer;
41
42   /**
43    * {@inheritdoc}
44    */
45   protected function setUp() {
46     parent::setUp();
47     $this->installConfig(['system', 'block', 'views', 'user']);
48     $this->installSchema('system', ['sequences']);
49     $this->installEntitySchema('user');
50
51     $this->controller = $this->container
52       ->get('entity_type.manager')
53       ->getStorage('block');
54
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",
62       'visibility' => [],
63       'weight' => 0,
64     ]);
65     $this->block->save();
66
67     $this->container->get('cache.render')->deleteAll();
68     $this->renderer = $this->container->get('renderer');
69   }
70
71   /**
72    * Test the Who's Online block.
73    */
74   public function testWhosOnlineBlock() {
75     $request_time = \Drupal::time()->getRequestTime();
76     // Generate users.
77     $user1 = User::create([
78       'name' => 'user1',
79       'mail' => 'user1@example.com',
80     ]);
81     $user1->addRole('administrator');
82     $user1->activate();
83     $user1->setLastAccessTime($request_time);
84     $user1->save();
85
86     $user2 = User::create([
87       'name' => 'user2',
88       'mail' => 'user2@example.com',
89     ]);
90     $user2->activate();
91     $user2->setLastAccessTime($request_time + 1);
92     $user2->save();
93
94     $user3 = User::create([
95       'name' => 'user3',
96       'mail' => 'user2@example.com',
97     ]);
98     $user3->activate();
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);
102     $user3->save();
103
104     // Test block output.
105     \Drupal::currentUser()->setAccount($user1);
106
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.');
116   }
117
118 }