You are here

trait BlockCreationTrait in Drupal 10

Same name and namespace in other branches
  1. 8 core/modules/block/tests/src/Traits/BlockCreationTrait.php \Drupal\Tests\block\Traits\BlockCreationTrait
  2. 9 core/modules/block/tests/src/Traits/BlockCreationTrait.php \Drupal\Tests\block\Traits\BlockCreationTrait

Provides methods to create and place block with default settings.

This trait is meant to be used only by test classes.

Hierarchy

9 files declare their use of BlockCreationTrait
AreaEntityTest.php in core/modules/views/tests/src/Kernel/Handler/AreaEntityTest.php
AreaOrderTest.php in core/modules/views/tests/src/Kernel/Handler/AreaOrderTest.php
BlockRebuildTest.php in core/modules/block/tests/src/Kernel/BlockRebuildTest.php
Breadcrumb404Test.php in core/tests/Drupal/FunctionalTests/Breadcrumb/Breadcrumb404Test.php
BrowserTestBase.php in core/tests/Drupal/Tests/BrowserTestBase.php

... See full list

File

core/modules/block/tests/src/Traits/BlockCreationTrait.php, line 12

Namespace

Drupal\Tests\block\Traits
View source
trait BlockCreationTrait {

  /**
   * Creates a block instance based on default settings.
   *
   * @param string $plugin_id
   *   The plugin ID of the block type for this block instance.
   * @param array $settings
   *   (optional) An associative array of settings for the block entity.
   *   Override the defaults by specifying the key and value in the array, for
   *   example:
   *   @code
   *     $this->drupalPlaceBlock('system_powered_by_block', array(
   *       'label' => t('Hello, world!'),
   *     ));
   *   @endcode
   *   The following defaults are provided:
   *   - label: Random string.
   *   - id: Random string.
   *   - region: 'sidebar_first'.
   *   - theme: The default theme.
   *   - visibility: Empty array.
   *
   * @return \Drupal\block\Entity\Block
   *   The block entity.
   *
   * @todo
   *   Add support for creating custom block instances.
   */
  protected function placeBlock($plugin_id, array $settings = []) {
    $config = \Drupal::configFactory();
    $settings += [
      'plugin' => $plugin_id,
      'region' => 'content',
      'id' => strtolower($this
        ->randomMachineName(8)),
      'theme' => $config
        ->get('system.theme')
        ->get('default'),
      'label' => $this
        ->randomMachineName(8),
      'visibility' => [],
      'weight' => 0,
    ];
    $values = [];
    foreach ([
      'region',
      'id',
      'theme',
      'plugin',
      'weight',
      'visibility',
    ] as $key) {
      $values[$key] = $settings[$key];

      // Remove extra values that do not belong in the settings array.
      unset($settings[$key]);
    }
    foreach ($values['visibility'] as $id => $visibility) {
      $values['visibility'][$id]['id'] = $id;
    }
    $values['settings'] = $settings;
    $block = Block::create($values);
    $block
      ->save();
    return $block;
  }

}

Members