You are here

public function BlockTest::testBlockToggleVisibility in Drupal 8

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

Tests that visibility can be properly toggled.

File

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

Class

BlockTest
Tests basic block functionality.

Namespace

Drupal\Tests\block\Functional

Code

public function testBlockToggleVisibility() {
  $block_name = 'system_powered_by_block';

  // Create a random title for the block.
  $title = $this
    ->randomMachineName(8);

  // Enable a standard block.
  $default_theme = $this
    ->config('system.theme')
    ->get('default');
  $edit = [
    'id' => strtolower($this
      ->randomMachineName(8)),
    'region' => 'sidebar_first',
    'settings[label]' => $title,
  ];
  $block_id = $edit['id'];

  // Set the block to be shown only to authenticated users.
  $edit['visibility[user_role][roles][' . RoleInterface::AUTHENTICATED_ID . ']'] = TRUE;
  $this
    ->drupalPostForm('admin/structure/block/add/' . $block_name . '/' . $default_theme, $edit, t('Save block'));
  $this
    ->clickLink('Configure');
  $this
    ->assertFieldChecked('edit-visibility-user-role-roles-authenticated');
  $edit = [
    'visibility[user_role][roles][' . RoleInterface::AUTHENTICATED_ID . ']' => FALSE,
  ];
  $this
    ->drupalPostForm(NULL, $edit, 'Save block');
  $this
    ->clickLink('Configure');
  $this
    ->assertNoFieldChecked('edit-visibility-user-role-roles-authenticated');

  // Ensure that no visibility is configured.

  /** @var \Drupal\block\BlockInterface $block */
  $block = Block::load($block_id);
  $visibility_config = $block
    ->getVisibilityConditions()
    ->getConfiguration();
  $this
    ->assertIdentical([], $visibility_config);
  $this
    ->assertIdentical([], $block
    ->get('visibility'));
}