1 views_plugin_display_block.test public ViewsPluginDisplayBlockTestCase::testViewBlocks()

Tests, whether and how the reset button can be renamed.

File

core/modules/views/tests/plugins/views_plugin_display_block.test, line 42
Definition of ViewsBasicTest.

Class

ViewsPluginDisplayBlockTestCase
Basic test class for Views query builder tests.

Code

public function testViewBlocks() {
  $layout = layout_load('default');
  $layout_block = $layout->addBlock('views', 'test_block-block', 'content');
  $layout->save();

  $node = reset($this->test_content);
  $this->backdropGet('node/' . $node->nid);

  $block_element = $this->xpath('//div[contains(@class,"block-views-test-block-block")]');
  $this->assertEqual(count($block_element), 1, 'The block is shown in the default layout.');
  $block_element = $block_element[0];

  $rows = $block_element->xpath('//div[contains(@class,"views-row")]');
  $this->assertEqual(count($rows), 5, 'The block has the expected 5 default rows');
  $first_row = (string) $rows[0]->asXML();
  $this->assertTrue(strpos($first_row, $node->title), 'First node found on first row as expected.');

  // Load the UI for this block in Layouts and check no options are enabled.
  $this->backdropGet('admin/structure/layouts/manage/default/configure-block/editor/' . $layout_block->uuid);
  $this->assertNoField('link_to_view');
  $this->assertNoField('more_link');
  $this->assertNoField('path_override');
  $this->assertNoField('path');
  $this->assertNoField('fields_override[title]');
  $this->assertNoField('fields_override[nid]');
  $this->assertNoField('exposed[status]');
  $this->assertNoField('use_pager');
  $this->assertNoField('items_per_page');
  $this->assertNoField('offset');

  // Enable all override options.
  $view = views_get_view('test_block');
  $view->set_display('block');
  $view->display_handler->override_option('allow', array(
    'use_pager' => 'use_pager',
    'items_per_page' => 'items_per_page',
    'offset' => 'offset',
    'link_to_view' => 'link_to_view',
    'more_link' => 'more_link',
    'path_override' => 'path_override',
    'exposed_form' => 'exposed_form',
    'fields_override' => 'fields_override',
  ));
  $view->save();

  // Load the UI for this block in Layouts and check options are defaults.
  $this->backdropGet('admin/structure/layouts/manage/default/configure-block/editor/' . $layout_block->uuid);
  $this->assertField('link_to_view', 0);
  $this->assertField('more_link', 0);
  $this->assertField('path_override', 0);
  $this->assertField('path', 'block-test');
  $this->assertField('fields_override[title]', 1);
  $this->assertField('fields_override[nid]', 1);
  $this->assertField('exposed[status]', 1);
  $this->assertField('use_pager', 0);
  $this->assertField('items_per_page', 5);
  $this->assertField('offset', 0);

  // Adjust all settings we can at the same time.
  $data = array(
    'link_to_view' => TRUE,
    'more_link' => TRUE,
    'path_override' => TRUE,
    'path' => 'other-path',
    'fields_override[nid]' => FALSE,
    'use_pager' => TRUE,
    'items_per_page' => 3,
    'offset' => 2,
  );
  $this->backdropPost(NULL, $data, t('Update block'));
  $this->backdropPost('admin/structure/layouts/manage/default', array(), t('Save layout'));

  // Check the adjustments had effect.
  $this->backdropGet('node/' . $node->nid);

  $block_element = $this->xpath('//div[contains(@class,"block-views-test-block-block")]');
  $rows = $block_element[0]->xpath('//div[contains(@class,"views-row")]');

  // Check link_to_view (and path_override).
  $title_link = $block_element[0]->xpath('//*[contains(@class,"block-title")]/a');
  $this->assertEqual($title_link[0]['href'], url('other-path'));

  // Check more_link (and path_override).
  $more_link = $block_element[0]->xpath('//*[contains(@class,"more-link")]/a');
  $this->assertEqual($more_link[0]['href'], url('other-path', array('query' => array('status' => '1'))));

  // Check fields_override.
  $nid_field = $block_element[0]->xpath('//*[contains(@class,"views-field-nid")]');
  $this->assertEqual(count($nid_field), 0, 'NID field has been disabled.');

  // Check use_pager.
  $pager = $block_element[0]->xpath('//ul[contains(@class,"pager")]');
  $this->assertEqual(count($pager), 1, 'Pager now enabled on the block.');

  // Check items_per_page.
  $this->assertEqual(count($rows), 3, 'Three rows shown, reflecting items_per_page override setting.');

  // Check offset.
  $first_row = (string) $rows[0]->asXML();
  $this->assertTrue(strpos($first_row, $this->test_content[2]->title), 'Third node found on first row as expected (offset is 2).');

  // Modify title and exposed filter settings.
  $data = array(
    'title_display' => 'custom',
    'title' => 'Customized block title',
    'exposed[status]' => '0',
    'offset' => 0,
    'fields_override[title]' => TRUE,
    'fields_override[nid]' => TRUE,
  );
  $this->backdropPost('admin/structure/layouts/manage/default/configure-block/editor/' . $layout_block->uuid, $data, t('Update block'));
  $this->backdropPost('admin/structure/layouts/manage/default', array(), t('Save layout'));

  // Unpublish a node for checking.
  $node->status = 0;
  $node->save();

  // Check the adjustments had effect.
  $this->backdropGet('node/' . $node->nid);

  $block_element = $this->xpath('//div[contains(@class,"block-views-test-block-block")]');
  $rows = isset($block_element[0]) ? $block_element[0]->xpath('//div[contains(@class,"views-row")]') : array();
  $this->assertEqual(count($rows), 1, 'One unpublished node found.');

  // Check a custom title is still linked to the view path.
  $title_link = isset($block_element[0]) ? $block_element[0]->xpath('//*[contains(@class,"block-title")]/a') : array();
  $this->assertEqual($title_link[0]['href'], url('other-path'));
  $this->assertEqual((string) $title_link[0], 'Customized block title');
}