Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\Tests\block\Kernel;
|
Chris@0
|
4
|
Chris@0
|
5 use Drupal\block\Entity\Block;
|
Chris@0
|
6 use Drupal\Core\StringTranslation\TranslatableMarkup;
|
Chris@0
|
7 use Drupal\KernelTests\KernelTestBase;
|
Chris@18
|
8 use Drupal\Tests\block\Traits\BlockCreationTrait;
|
Chris@0
|
9
|
Chris@0
|
10 /**
|
Chris@0
|
11 * Tests block_rebuild().
|
Chris@0
|
12 *
|
Chris@0
|
13 * @group block
|
Chris@0
|
14 */
|
Chris@0
|
15 class BlockRebuildTest extends KernelTestBase {
|
Chris@0
|
16
|
Chris@0
|
17 use BlockCreationTrait;
|
Chris@0
|
18
|
Chris@0
|
19 /**
|
Chris@0
|
20 * {@inheritdoc}
|
Chris@0
|
21 */
|
Chris@0
|
22 public static $modules = ['block', 'system'];
|
Chris@0
|
23
|
Chris@0
|
24 /**
|
Chris@0
|
25 * {@inheritdoc}
|
Chris@0
|
26 */
|
Chris@0
|
27 protected function setUp() {
|
Chris@0
|
28 parent::setUp();
|
Chris@0
|
29
|
Chris@0
|
30 $this->container->get('theme_installer')->install(['stable', 'classy']);
|
Chris@0
|
31 $this->container->get('config.factory')->getEditable('system.theme')->set('default', 'classy')->save();
|
Chris@0
|
32 }
|
Chris@0
|
33
|
Chris@0
|
34 /**
|
Chris@0
|
35 * {@inheritdoc}
|
Chris@0
|
36 */
|
Chris@0
|
37 public static function setUpBeforeClass() {
|
Chris@0
|
38 parent::setUpBeforeClass();
|
Chris@0
|
39
|
Chris@0
|
40 // @todo Once block_rebuild() is refactored to auto-loadable code, remove
|
Chris@0
|
41 // this require statement.
|
Chris@0
|
42 require_once static::getDrupalRoot() . '/core/modules/block/block.module';
|
Chris@0
|
43 }
|
Chris@0
|
44
|
Chris@0
|
45 /**
|
Chris@0
|
46 * @covers ::block_rebuild
|
Chris@0
|
47 */
|
Chris@0
|
48 public function testRebuildNoBlocks() {
|
Chris@0
|
49 block_rebuild();
|
Chris@17
|
50 $messages = \Drupal::messenger()->all();
|
Chris@17
|
51 \Drupal::messenger()->deleteAll();
|
Chris@0
|
52 $this->assertEquals([], $messages);
|
Chris@0
|
53 }
|
Chris@0
|
54
|
Chris@0
|
55 /**
|
Chris@0
|
56 * @covers ::block_rebuild
|
Chris@0
|
57 */
|
Chris@0
|
58 public function testRebuildNoInvalidBlocks() {
|
Chris@0
|
59 $this->placeBlock('system_powered_by_block', ['region' => 'content']);
|
Chris@0
|
60
|
Chris@0
|
61 block_rebuild();
|
Chris@17
|
62 $messages = \Drupal::messenger()->all();
|
Chris@17
|
63 \Drupal::messenger()->deleteAll();
|
Chris@0
|
64 $this->assertEquals([], $messages);
|
Chris@0
|
65 }
|
Chris@0
|
66
|
Chris@0
|
67 /**
|
Chris@0
|
68 * @covers ::block_rebuild
|
Chris@0
|
69 */
|
Chris@0
|
70 public function testRebuildInvalidBlocks() {
|
Chris@0
|
71 $this->placeBlock('system_powered_by_block', ['region' => 'content']);
|
Chris@0
|
72 $block1 = $this->placeBlock('system_powered_by_block');
|
Chris@0
|
73 $block2 = $this->placeBlock('system_powered_by_block');
|
Chris@0
|
74 $block2->disable()->save();
|
Chris@0
|
75 // Use the config API directly to bypass Block::preSave().
|
Chris@0
|
76 \Drupal::configFactory()->getEditable('block.block.' . $block1->id())->set('region', 'INVALID')->save();
|
Chris@0
|
77 \Drupal::configFactory()->getEditable('block.block.' . $block2->id())->set('region', 'INVALID')->save();
|
Chris@0
|
78
|
Chris@0
|
79 // Reload block entities.
|
Chris@0
|
80 $block1 = Block::load($block1->id());
|
Chris@0
|
81 $block2 = Block::load($block2->id());
|
Chris@0
|
82
|
Chris@0
|
83 $this->assertSame('INVALID', $block1->getRegion());
|
Chris@0
|
84 $this->assertTrue($block1->status());
|
Chris@0
|
85 $this->assertSame('INVALID', $block2->getRegion());
|
Chris@0
|
86 $this->assertFalse($block2->status());
|
Chris@0
|
87
|
Chris@0
|
88 block_rebuild();
|
Chris@0
|
89
|
Chris@0
|
90 // Reload block entities.
|
Chris@0
|
91 $block1 = Block::load($block1->id());
|
Chris@0
|
92 $block2 = Block::load($block2->id());
|
Chris@0
|
93
|
Chris@17
|
94 $messages = \Drupal::messenger()->all();
|
Chris@17
|
95 \Drupal::messenger()->deleteAll();
|
Chris@0
|
96 $expected = ['warning' => [new TranslatableMarkup('The block %info was assigned to the invalid region %region and has been disabled.', ['%info' => $block1->id(), '%region' => 'INVALID'])]];
|
Chris@0
|
97 $this->assertEquals($expected, $messages);
|
Chris@0
|
98
|
Chris@0
|
99 $default_region = system_default_region('classy');
|
Chris@0
|
100 $this->assertSame($default_region, $block1->getRegion());
|
Chris@0
|
101 $this->assertFalse($block1->status());
|
Chris@0
|
102 $this->assertSame($default_region, $block2->getRegion());
|
Chris@0
|
103 $this->assertFalse($block2->status());
|
Chris@0
|
104 }
|
Chris@0
|
105
|
Chris@0
|
106 }
|