You are here

NewDefaultThemeBlocksTest.php in Zircon Profile 8

Same filename and directory in other branches
  1. 8.0 core/modules/block/src/Tests/NewDefaultThemeBlocksTest.php

Namespace

Drupal\block\Tests

File

core/modules/block/src/Tests/NewDefaultThemeBlocksTest.php
View source
<?php

/**
 * @file
 * Contains \Drupal\block\Tests\NewDefaultThemeBlocksTest.
 */
namespace Drupal\block\Tests;

use Drupal\simpletest\WebTestBase;

/**
 * Tests that the new default theme gets blocks.
 *
 * @group block
 */
class NewDefaultThemeBlocksTest extends WebTestBase {

  /**
   * Modules to install.
   *
   * @var array
   */
  public static $modules = array(
    'block',
  );

  /**
   * Check the enabled Bartik blocks are correctly copied over.
   */
  function testNewDefaultThemeBlocks() {
    $default_theme = $this
      ->config('system.theme')
      ->get('default');

    // Add two instances of the user login block.
    $this
      ->drupalPlaceBlock('user_login_block', array(
      'id' => $default_theme . '_' . strtolower($this
        ->randomMachineName(8)),
    ));
    $this
      ->drupalPlaceBlock('user_login_block', array(
      'id' => $default_theme . '_' . strtolower($this
        ->randomMachineName(8)),
    ));

    // Add an instance of a different block.
    $this
      ->drupalPlaceBlock('system_powered_by_block', array(
      'id' => $default_theme . '_' . strtolower($this
        ->randomMachineName(8)),
    ));

    // Install a different theme.
    $new_theme = 'bartik';
    $this
      ->assertFalse($new_theme == $default_theme, 'The new theme is different from the previous default theme.');
    \Drupal::service('theme_handler')
      ->install(array(
      $new_theme,
    ));
    $this
      ->config('system.theme')
      ->set('default', $new_theme)
      ->save();

    // Ensure that the new theme has all the blocks as the previous default.
    $default_block_names = $this->container
      ->get('entity.query')
      ->get('block')
      ->condition('theme', $default_theme)
      ->execute();
    $new_blocks = $this->container
      ->get('entity.query')
      ->get('block')
      ->condition('theme', $new_theme)
      ->execute();
    $this
      ->assertTrue(count($default_block_names) == count($new_blocks), 'The new default theme has the same number of blocks as the previous theme.');
    foreach ($default_block_names as $default_block_name) {

      // Remove the matching block from the list of blocks in the new theme.
      // E.g., if the old theme has block.block.stark_admin,
      // unset block.block.bartik_admin.
      unset($new_blocks[str_replace($default_theme . '_', $new_theme . '_', $default_block_name)]);
    }
    $this
      ->assertTrue(empty($new_blocks), 'The new theme has exactly the same blocks as the previous default theme.');

    // Install a hidden base theme and ensure blocks are not copied.
    $base_theme = 'test_basetheme';
    \Drupal::service('theme_handler')
      ->install([
      $base_theme,
    ]);
    $new_blocks = $this->container
      ->get('entity.query')
      ->get('block')
      ->condition('theme', $base_theme)
      ->execute();
    $this
      ->assertTrue(empty($new_blocks), 'Installing a hidden base theme does not copy blocks from the default theme.');
  }

}

Classes

Namesort descending Description
NewDefaultThemeBlocksTest Tests that the new default theme gets blocks.