1 layout.test LayoutBlockTest::testCustomTextBlocks()

Test Custom Text blocks.

File

core/modules/layout/tests/layout.test, line 1951
Tests for the Layout module.

Class

LayoutBlockTest
Tests the blocks title, content, and display settings.

Code

function testCustomTextBlocks() {
  $this->backdropGet('admin/structure/layouts/manage/default');
  $block_title_1 = 'Title of block one';
  $block_content_1 = 'Content of block one';
  $block_content_2 = 'Content of block two';
  $block_title_3 = 'Title of block three';

  // Add a Custom Text block to the sidebar.
  $this->clickLink(t('Add block'), 3);
  $this->clickLink(t('Custom block'));
  $edit = array(
    'title' => $block_title_1,
    'content[value]' => $block_content_1,
  );
  $this->backdropPost(NULL, $edit, t('Add block'));
  $first_block = $this->xpath('(//*[@id="layout-content-form"]//*[contains(@class,:region)]//*[@data-block-id])[last()]', array(
    ':region' => 'l-sidebar',
  ));
  $first_block_uuid = (string) $first_block[0]['data-block-id'];

  // Add a Custom Text block without subject.
  $this->clickLink(t('Add block'), 3);
  $this->clickLink(t('Custom block'));
  $edit = array(
    'content[value]' => $block_content_2,
  );
  $this->backdropPost(NULL, $edit, t('Add block'));

  // Add a Custom Text block without content.
  $this->clickLink(t('Add block'), 3);
  $this->clickLink(t('Custom block'));
  $edit = array(
    'title' => $block_title_3,
  );
  $this->backdropPost(NULL, $edit, t('Add block'));

  // Save the layout.
  $this->backdropPost(NULL, array(), t('Save layout'));

  // Go to the home page and check that the text shows.
  $this->backdropGet('<front>');

  $elements = $this->xpath('//*[contains(@class,:region)]//*[contains(@class,:block)]', array(
    ':region' => 'l-sidebar',
    ':block' => 'block-layout-custom-block',
  ));
  $this->assertEqual(count($elements), 2, 'Two custom text blocks were found in the sidebar.');

  // Both title and content are visible for block one.
  $this->assertText($block_title_1);
  $this->assertText($block_content_1);

  // Block two content is visible.
  $this->assertText($block_content_2);
  // Block two has no title.
  $title_2 = $this->xpath('(//div[contains(@class, "block-layout-text-block")])[2]//h2');
  $this->assertFalse($title_2);

  // Block three doesn't appear.
  $this->assertNoText($block_title_3);
  $block_3 = $this->xpath('(//div[contains(@class, "block-layout-text-block")])[3]');
  $this->assertFalse($block_3);

  // Convert the first block from being a text block into a custom block.
  module_enable(array('block'));
  $edit = array(
    'reusable' => TRUE,
  );
  $this->backdropPost('admin/structure/layouts/manage/default/configure-block/editor/' . $first_block_uuid, $edit, t('Update block'));
  $this->assertText(t('Admin label is required when making a block reusable.'));
  $edit['admin_label'] = 'My custom block label';
  $this->backdropPost(NULL, $edit, t('Update block'));
  $this->assertText(t('An internal name is required when making a block reusable.'));
  $edit['delta'] = 'my_custom_block';
  $this->backdropPost(NULL, $edit, t('Update block'));

  // Now back on the layout main page. Check the new admin label is shown.
  $this->assertText('My custom block label');
  $this->backdropPost(NULL, array(), t('Save layout'));

  // Check that the new block.module provided configuration form is now used.
  $this->backdropGet('admin/structure/layouts/manage/default/configure-block/editor/' . $first_block_uuid);
  // The reusable checkbox should exist but be disabled.
  $this->assertFieldByXPath('//input[@name="block_settings[reusable]"][@disabled="disabled"]');

  // Go to the home page and check that the converted block shows up.
  $this->backdropGet('<front>');
  $custom_block = $this->xpath('//*[contains(@class,:region)]//*[contains(@class,:block)]', array(
    ':region' => 'l-sidebar',
    ':block' => 'block-block-my-custom-block',
  ));
  $this->assertEqual(count($custom_block), 1, 'Converted custom block found.');
  if (count($custom_block)) {
    $custom_block_title = $custom_block[0]->xpath('.//*[contains(@class, "block-title")]');
    $custom_block_content = $custom_block[0]->xpath('.//*[contains(@class, "block-content")]/p');
    $this->assertEqual((string) $custom_block_title[0], $block_title_1, 'Converted custom block title found.');
    $this->assertEqual((string) $custom_block_content[0], $block_content_1, 'Converted custom block content.');
  }
}