You are here

public function BlockRebuildTest::testRebuildInvalidBlocks in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/block/tests/src/Kernel/BlockRebuildTest.php \Drupal\Tests\block\Kernel\BlockRebuildTest::testRebuildInvalidBlocks()

@covers ::block_rebuild

File

core/modules/block/tests/src/Kernel/BlockRebuildTest.php, line 70

Class

BlockRebuildTest
Tests block_rebuild().

Namespace

Drupal\Tests\block\Kernel

Code

public function testRebuildInvalidBlocks() {
  $this
    ->placeBlock('system_powered_by_block', [
    'region' => 'content',
  ]);
  $block1 = $this
    ->placeBlock('system_powered_by_block');
  $block2 = $this
    ->placeBlock('system_powered_by_block');
  $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('classy');
  $this
    ->assertSame($default_region, $block1
    ->getRegion());
  $this
    ->assertFalse($block1
    ->status());
  $this
    ->assertSame($default_region, $block2
    ->getRegion());
  $this
    ->assertFalse($block2
    ->status());
}