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 }
|