BlockRebuildTest.php

Same filename in other branches
  1. 9 core/modules/block/tests/src/Kernel/BlockRebuildTest.php
  2. 8.9.x core/modules/block/tests/src/Kernel/BlockRebuildTest.php
  3. 10 core/modules/block/tests/src/Kernel/BlockRebuildTest.php

Namespace

Drupal\Tests\block\Kernel

File

core/modules/block/tests/src/Kernel/BlockRebuildTest.php

View source
<?php

declare (strict_types=1);
namespace Drupal\Tests\block\Kernel;

use Drupal\block\Entity\Block;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\KernelTests\KernelTestBase;
use Drupal\Tests\block\Traits\BlockCreationTrait;

/**
 * Tests block_rebuild().
 *
 * @group block
 */
class BlockRebuildTest extends KernelTestBase {
    use BlockCreationTrait;
    
    /**
     * {@inheritdoc}
     */
    protected static $modules = [
        'block',
        'system',
    ];
    
    /**
     * {@inheritdoc}
     */
    protected static $configSchemaCheckerExclusions = [
        // These blocks are intentionally put into invalid regions, so they will
        // violate config schema.
        // @see ::testRebuildInvalidBlocks()
'block.block.invalid_block1',
        'block.block.invalid_block2',
    ];
    
    /**
     * {@inheritdoc}
     */
    protected function setUp() : void {
        parent::setUp();
        $this->container
            ->get('theme_installer')
            ->install([
            'stark',
        ]);
        $this->container
            ->get('config.factory')
            ->getEditable('system.theme')
            ->set('default', 'stark')
            ->save();
    }
    
    /**
     * {@inheritdoc}
     */
    public static function setUpBeforeClass() : void {
        parent::setUpBeforeClass();
        // @todo Once block_rebuild() is refactored to auto-loadable code, remove
        //   this require statement.
        require_once static::getDrupalRoot() . '/core/modules/block/block.module';
    }
    
    /**
     * @covers ::block_rebuild
     */
    public function testRebuildNoBlocks() : void {
        block_rebuild();
        $messages = \Drupal::messenger()->all();
        \Drupal::messenger()->deleteAll();
        $this->assertEquals([], $messages);
    }
    
    /**
     * @covers ::block_rebuild
     */
    public function testRebuildNoInvalidBlocks() : void {
        $this->placeBlock('system_powered_by_block', [
            'region' => 'content',
        ]);
        block_rebuild();
        $messages = \Drupal::messenger()->all();
        \Drupal::messenger()->deleteAll();
        $this->assertEquals([], $messages);
    }
    
    /**
     * @covers ::block_rebuild
     */
    public function testRebuildInvalidBlocks() : void {
        $this->placeBlock('system_powered_by_block', [
            'region' => 'content',
        ]);
        $block1 = $this->placeBlock('system_powered_by_block', [
            'id' => 'invalid_block1',
        ]);
        $block2 = $this->placeBlock('system_powered_by_block', [
            'id' => 'invalid_block2',
        ]);
        $block2->disable()
            ->save();
        // Use the config API directly to bypass Block::preSave().
        \Drupal::configFactory()->getEditable('block.block.' . $block1->id())
            ->set('region', 'INVALID')
            ->save();
        \Drupal::configFactory()->getEditable('block.block.' . $block2->id())
            ->set('region', 'INVALID')
            ->save();
        // Reload block entities.
        $block1 = Block::load($block1->id());
        $block2 = Block::load($block2->id());
        $this->assertSame('INVALID', $block1->getRegion());
        $this->assertTrue($block1->status());
        $this->assertSame('INVALID', $block2->getRegion());
        $this->assertFalse($block2->status());
        block_rebuild();
        // Reload block entities.
        $block1 = Block::load($block1->id());
        $block2 = Block::load($block2->id());
        $messages = \Drupal::messenger()->all();
        \Drupal::messenger()->deleteAll();
        $expected = [
            'warning' => [
                new TranslatableMarkup('The block %info was assigned to the invalid region %region and has been disabled.', [
                    '%info' => $block1->id(),
                    '%region' => 'INVALID',
                ]),
            ],
        ];
        $this->assertEquals($expected, $messages);
        $default_region = system_default_region('stark');
        $this->assertSame($default_region, $block1->getRegion());
        $this->assertFalse($block1->status());
        $this->assertSame($default_region, $block2->getRegion());
        $this->assertFalse($block2->status());
    }

}

Classes

Title Deprecated Summary
BlockRebuildTest Tests block_rebuild().

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.