function NewDefaultThemeBlocksTest::testNewDefaultThemeBlocks

Same name and namespace in other branches
  1. 9 core/modules/block/tests/src/Kernel/NewDefaultThemeBlocksTest.php \Drupal\Tests\block\Kernel\NewDefaultThemeBlocksTest::testNewDefaultThemeBlocks()
  2. 8.9.x core/modules/block/tests/src/Kernel/NewDefaultThemeBlocksTest.php \Drupal\Tests\block\Kernel\NewDefaultThemeBlocksTest::testNewDefaultThemeBlocks()
  3. 11.x core/modules/block/tests/src/Kernel/NewDefaultThemeBlocksTest.php \Drupal\Tests\block\Kernel\NewDefaultThemeBlocksTest::testNewDefaultThemeBlocks()

Check the blocks are correctly copied by block_themes_installed().

File

core/modules/block/tests/src/Kernel/NewDefaultThemeBlocksTest.php, line 55

Class

NewDefaultThemeBlocksTest
Tests that a new default theme gets blocks.

Namespace

Drupal\Tests\block\Kernel

Code

public function testNewDefaultThemeBlocks() : void {
  $default_theme = $this->defaultTheme;
  $theme_installer = $this->themeInstaller;
  $theme_installer->install([
    $default_theme,
  ]);
  // Add two instances of the user login block.
  $this->placeBlock('user_login_block', [
    'id' => $default_theme . '_' . $this->randomMachineName(8),
  ]);
  $this->placeBlock('user_login_block', [
    'id' => $default_theme . '_' . $this->randomMachineName(8),
  ]);
  // Add an instance of a different block.
  $this->placeBlock('system_powered_by_block', [
    'id' => $default_theme . '_' . $this->randomMachineName(8),
  ]);
  // Install a different theme that does not have blocks.
  $new_theme = 'test_theme';
  // The new theme is different from the previous default theme.
  $this->assertNotEquals($new_theme, $default_theme);
  $theme_installer->install([
    $new_theme,
  ]);
  $this->config('system.theme')
    ->set('default', $new_theme)
    ->save();
  $block_storage = $this->container
    ->get('entity_type.manager')
    ->getStorage('block');
  // Ensure that the new default theme has the same blocks as the previous
  // default theme.
  $default_block_names = $block_storage->getQuery()
    ->accessCheck(FALSE)
    ->condition('theme', $default_theme)
    ->execute();
  $new_blocks = $block_storage->getQuery()
    ->accessCheck(FALSE)
    ->condition('theme', $new_theme)
    ->execute();
  $this->assertSameSize($default_block_names, $new_blocks);
  foreach ($default_block_names as $default_block_name) {
    // Remove the matching block from the list of blocks in the new theme.
    // For example, if the old theme has block.block.stark_admin,
    // unset block.block.olivero_admin.
    unset($new_blocks[str_replace($default_theme . '_', $new_theme . '_', $default_block_name)]);
  }
  $this->assertEmpty($new_blocks);
  // Install a hidden base theme and ensure blocks are not copied.
  $base_theme = 'test_basetheme';
  $theme_installer->install([
    $base_theme,
  ]);
  $new_blocks = $block_storage->getQuery()
    ->accessCheck(FALSE)
    ->condition('theme', $base_theme)
    ->execute();
  $this->assertEmpty($new_blocks);
}

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