1 layout.test LayoutInterfaceTest::testBlockEntityIDConditions()

Test block entity ID conditions.

File

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

Class

LayoutInterfaceTest
Tests the interface for adding, removing, and moving blocks.

Code

function testBlockEntityIDConditions() {
  // Create a new layout overriding node/%.
  $layout_title = $this->randomName();
  $layout_name = strtolower($layout_title);
  $layout_url = 'node/%';
  $edit = array(
    'title' => $layout_title,
    'name' => $layout_name,
    'layout_template' => 'moscone_flipped',
    'path' => $layout_url,
  );
  $this->backdropPost('admin/structure/layouts/add', $edit, t('Create layout'));

  // Create another post node.
  $second_post = $this->backdropCreateNode(array(
    'type' => 'post',
    'title' => $this->randomString(),
  ));

  // Add another testing block.
  $this->clickLink(t('Add block'), 3);
  $this->clickLink(t('Layout foo block'));
  $block_title = $this->randomString();
  $edit = array(
    'title_display' => LAYOUT_TITLE_CUSTOM,
    'title' => $block_title,
  );
  $this->backdropPost(NULL, $edit, t('Add condition'));
  $edit = array(
    'condition' => 'node_nid',
  );
  $this->backdropPost(NULL, $edit, t('Load condition'));
  $edit = array(
    'entity_id' => $this->test_node1->nid,
  );
  $this->backdropPost(NULL, $edit, t('Add condition'));
  $this->backdropPost(NULL, array(), t('Update block'));
  $this->backdropPost(NULL, array(), t('Save layout'));

  $this->backdropGet('node/' . $this->test_node1->nid);
  $this->assertText(check_plain($block_title), 'Block shown and node ID matches.');

  $this->backdropGet('node/' . $second_post->nid);
  $this->assertNoText(check_plain($block_title), 'Block not shown when node ID does not match.');

  // Get the block UUID.
  layout_reset_caches();
  $layout = layout_load($layout_name);
  $block_uuid = end($layout->positions['sidebar']);

  // Add another condition to show this block only for a particular user ID.
  $this->backdropGet('admin/structure/layouts/manage/' . $layout_name . '/configure-block/editor/' . $block_uuid);
  $this->backdropPost(NULL, array(), t('Add condition'));
  $edit = array(
    'condition' => 'user_uid',
  );
  $this->backdropPost(NULL, $edit, t('Load condition'));
  $edit = array(
    'entity_id' => $this->web_user->uid,
  );
  $this->backdropPost(NULL, $edit, t('Add condition'));
  $this->backdropPost(NULL, array(), t('Update block'));
  $this->backdropPost(NULL, array(), t('Save layout'));

  $this->backdropGet('node/' . $this->test_node1->nid);
  $this->assertNoText(check_plain($block_title), 'Block not shown when user ID does not match.');

  $this->backdropGet('node/' . $second_post->nid);
  $this->assertNoText(check_plain($block_title), 'Block not shown when user ID does not match.');

  // Login as a the web user and test that the block is now shown.
  $this->backdropLogin($this->web_user);

  $this->backdropGet('node/' . $this->test_node1->nid);
  $this->assertText(check_plain($block_title), 'Block shown when user ID and node ID matches.');

  $this->backdropGet('node/' . $second_post->nid);
  $this->assertNoText(check_plain($block_title), 'Block not shown when user ID and node ID does not match.');
}