You are here

public function BlockTest::testBlock in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/block/tests/src/Functional/BlockTest.php \Drupal\Tests\block\Functional\BlockTest::testBlock()
  2. 10 core/modules/block/tests/src/Functional/BlockTest.php \Drupal\Tests\block\Functional\BlockTest::testBlock()

Tests configuring and moving a module-define block to specific regions.

File

core/modules/block/tests/src/Functional/BlockTest.php, line 197

Class

BlockTest
Tests basic block functionality.

Namespace

Drupal\Tests\block\Functional

Code

public function testBlock() {

  // Place page title block to test error messages.
  $this
    ->drupalPlaceBlock('page_title_block');

  // Disable the block.
  $this
    ->drupalGet('admin/structure/block');
  $this
    ->clickLink('Disable');

  // Select the 'Powered by Drupal' block to be configured and moved.
  $block = [];
  $block['id'] = 'system_powered_by_block';
  $block['settings[label]'] = $this
    ->randomMachineName(8);
  $block['settings[label_display]'] = TRUE;
  $block['theme'] = $this
    ->config('system.theme')
    ->get('default');
  $block['region'] = 'header';

  // Set block title to confirm that interface works and override any custom titles.
  $this
    ->drupalGet('admin/structure/block/add/' . $block['id'] . '/' . $block['theme']);
  $this
    ->submitForm([
    'settings[label]' => $block['settings[label]'],
    'settings[label_display]' => $block['settings[label_display]'],
    'id' => $block['id'],
    'region' => $block['region'],
  ], 'Save block');
  $this
    ->assertSession()
    ->pageTextContains('The block configuration has been saved.');

  // Check to see if the block was created by checking its configuration.
  $instance = Block::load($block['id']);
  $this
    ->assertEquals($block['settings[label]'], $instance
    ->label(), 'Stored block title found.');

  // Check whether the block can be moved to all available regions.
  foreach ($this->regions as $region) {
    $this
      ->moveBlockToRegion($block, $region);
  }

  // Disable the block.
  $this
    ->drupalGet('admin/structure/block');
  $this
    ->clickLink('Disable');

  // Confirm that the block is now listed as disabled.
  $this
    ->assertSession()
    ->pageTextContains('The block settings have been updated.');

  // Confirm that the block instance title and markup are not displayed.
  $this
    ->drupalGet('node');
  $this
    ->assertSession()
    ->pageTextNotContains($block['settings[label]']);

  // Check for <div id="block-my-block-instance-name"> if the machine name
  // is my_block_instance_name.
  $xpath = $this
    ->assertSession()
    ->buildXPathQuery('//div[@id=:id]/*', [
    ':id' => 'block-' . str_replace('_', '-', strtolower($block['id'])),
  ]);
  $this
    ->assertSession()
    ->elementNotExists('xpath', $xpath);

  // Test deleting the block from the edit form.
  $this
    ->drupalGet('admin/structure/block/manage/' . $block['id']);
  $this
    ->clickLink('Remove block');
  $this
    ->assertSession()
    ->pageTextContains('Are you sure you want to remove the block ' . $block['settings[label]'] . ' from the Footer region?');
  $this
    ->submitForm([], 'Remove');
  $this
    ->assertSession()
    ->pageTextContains('The block ' . $block['settings[label]'] . ' has been removed from the Footer region.');

  // Test deleting a block via "Configure block" link.
  $block = $this
    ->drupalPlaceBlock('system_powered_by_block');
  $this
    ->drupalGet('admin/structure/block/manage/' . $block
    ->id(), [
    'query' => [
      'destination' => 'admin',
    ],
  ]);
  $this
    ->clickLink('Remove block');
  $this
    ->assertSession()
    ->pageTextContains('Are you sure you want to remove the block ' . $block
    ->label() . ' from the Left sidebar region?');
  $this
    ->submitForm([], 'Remove');
  $this
    ->assertSession()
    ->pageTextContains('The block ' . $block
    ->label() . ' has been removed from the Left sidebar region.');
  $this
    ->assertSession()
    ->addressEquals('admin');
  $this
    ->assertSession()
    ->responseNotContains($block
    ->id());
}