Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\Tests\block\Functional;
|
Chris@0
|
4
|
Chris@0
|
5 use Drupal\Component\Utility\Html;
|
Chris@0
|
6 use Drupal\Tests\BrowserTestBase;
|
Chris@0
|
7
|
Chris@0
|
8 /**
|
Chris@0
|
9 * Tests blocks are being rendered in order by weight.
|
Chris@0
|
10 *
|
Chris@0
|
11 * @group block
|
Chris@0
|
12 */
|
Chris@0
|
13 class BlockRenderOrderTest extends BrowserTestBase {
|
Chris@0
|
14
|
Chris@0
|
15 /**
|
Chris@0
|
16 * Modules to install.
|
Chris@0
|
17 *
|
Chris@0
|
18 * @var array
|
Chris@0
|
19 */
|
Chris@0
|
20 public static $modules = ['node', 'block'];
|
Chris@0
|
21
|
Chris@0
|
22 protected function setUp() {
|
Chris@0
|
23 parent::setUp();
|
Chris@0
|
24 // Create a test user.
|
Chris@0
|
25 $end_user = $this->drupalCreateUser([
|
Chris@0
|
26 'access content',
|
Chris@0
|
27 ]);
|
Chris@0
|
28 $this->drupalLogin($end_user);
|
Chris@0
|
29 }
|
Chris@0
|
30
|
Chris@0
|
31 /**
|
Chris@0
|
32 * Tests the render order of the blocks.
|
Chris@0
|
33 */
|
Chris@0
|
34 public function testBlockRenderOrder() {
|
Chris@0
|
35 // Enable test blocks and place them in the same region.
|
Chris@0
|
36 $region = 'header';
|
Chris@0
|
37 $test_blocks = [
|
Chris@0
|
38 'stark_powered' => [
|
Chris@0
|
39 'weight' => '-3',
|
Chris@0
|
40 'id' => 'stark_powered',
|
Chris@0
|
41 'label' => 'Test block A',
|
Chris@0
|
42 ],
|
Chris@0
|
43 'stark_by' => [
|
Chris@0
|
44 'weight' => '3',
|
Chris@0
|
45 'id' => 'stark_by',
|
Chris@0
|
46 'label' => 'Test block C',
|
Chris@0
|
47 ],
|
Chris@0
|
48 'stark_drupal' => [
|
Chris@0
|
49 'weight' => '3',
|
Chris@0
|
50 'id' => 'stark_drupal',
|
Chris@0
|
51 'label' => 'Test block B',
|
Chris@0
|
52 ],
|
Chris@0
|
53 ];
|
Chris@0
|
54
|
Chris@0
|
55 // Place the test blocks.
|
Chris@0
|
56 foreach ($test_blocks as $test_block) {
|
Chris@0
|
57 $this->drupalPlaceBlock('system_powered_by_block', [
|
Chris@0
|
58 'label' => $test_block['label'],
|
Chris@0
|
59 'region' => $region,
|
Chris@0
|
60 'weight' => $test_block['weight'],
|
Chris@0
|
61 'id' => $test_block['id'],
|
Chris@0
|
62 ]);
|
Chris@0
|
63 }
|
Chris@0
|
64
|
Chris@0
|
65 $this->drupalGet('');
|
Chris@17
|
66 $test_content = $this->getSession()->getPage()->getContent();
|
Chris@0
|
67
|
Chris@0
|
68 $controller = $this->container->get('entity_type.manager')->getStorage('block');
|
Chris@0
|
69 foreach ($controller->loadMultiple() as $return_block) {
|
Chris@0
|
70 $id = $return_block->id();
|
Chris@0
|
71 if ($return_block_weight = $return_block->getWeight()) {
|
Chris@0
|
72 $this->assertTrue($test_blocks[$id]['weight'] == $return_block_weight, 'Block weight is set as "' . $return_block_weight . '" for ' . $id . ' block.');
|
Chris@0
|
73 $position[$id] = strpos($test_content, Html::getClass('block-' . $test_blocks[$id]['id']));
|
Chris@0
|
74 }
|
Chris@0
|
75 }
|
Chris@0
|
76 $this->assertTrue($position['stark_powered'] < $position['stark_by'], 'Blocks with different weight are rendered in the correct order.');
|
Chris@0
|
77 $this->assertTrue($position['stark_drupal'] < $position['stark_by'], 'Blocks with identical weight are rendered in alphabetical order.');
|
Chris@0
|
78 }
|
Chris@0
|
79
|
Chris@0
|
80 }
|