function CToolsViewsEntityViewBlockTest::testConfigureFiltersTextfield

Test ctools_views 'configure_filters' configuration with text field values.

File

modules/ctools_views/tests/src/Functional/CToolsViewsEntityViewBlockTest.php, line 182

Class

CToolsViewsEntityViewBlockTest
Tests the ctools_views block display plugin overriding entity View filters.

Namespace

Drupal\Tests\ctools_views\Functional

Code

public function testConfigureFiltersTextfield() {
  $default_theme = $this->config('system.theme')
    ->get('default');
  $filter_id = 'field_ctools_views_text_value';
  $filter_op_id = $filter_id . '_op';
  $block = [];
  $block['id'] = 'views_block:ctools_views_entity_test-block_filter_text';
  $block['region'] = 'sidebar_first';
  $block['theme'] = $this->config('system.theme')
    ->get('default');
  // Get the "Configure block" form for our Views block.
  $this->drupalGet('admin/structure/block/add/' . $block['id'] . '/' . $block['theme']);
  $this->assertSession()
    ->fieldExists('settings[exposed][filter-' . $filter_id . '][' . $filter_id . '_wrapper][' . $filter_id . ']');
  $this->assertSession()
    ->fieldExists('settings[exposed][filter-' . $filter_id . '][' . $filter_id . '_wrapper][' . $filter_op_id . ']');
  // Add block to sidebar_first region with default settings.
  $this->submitForm([
    'region' => $block['region'],
    'id' => 'views_block__ctools_views_entity_test_block_filter_text',
  ], 'Save block');
  // @todo Remove this after debugging.
  $this->assertSession()
    ->pageTextContains('The block configuration has been saved.');
  // Assert configure_filters default settings.
  $this->drupalGet('<front>');
  $this->assertSession()
    ->fieldNotExists($filter_id);
  $this->assertSession()
    ->fieldNotExists($filter_op_id);
  $this->assertSession()
    ->buttonNotExists('Apply');
  $this->assertSession()
    ->elementNotExists('xpath', '//fieldset[@id="edit-field-ctools-views-text-value-wrapper"]');
  // @todo Remove this after debugging.
  $this->assertSession()
    ->elementExists('xpath', '//div');
  $this->assertEquals(1, count($this->xpath('//div[contains(@class, "view-display-id-block_filter_text")]//table')), 'Found the view table.');
  // Check that the default settings return all results.
  $this->assertEquals(3, count($this->xpath('//div[contains(@class, "view-display-id-block_filter_text")]//table/tbody/tr')));
  $this->assertSession()
    ->fieldNotExists($filter_id);
  // Override configure_filters settings.
  $edit = [];
  $edit['region'] = 'sidebar_first';
  $edit['settings[exposed][filter-' . $filter_id . '][' . $filter_id . '_wrapper][' . $filter_id . ']'] = 'text_1';
  $edit['settings[exposed][filter-' . $filter_id . '][exposed]'] = '1';
  $edit['settings[exposed][filter-' . $filter_id . '][use_operator]'] = '1';
  $this->drupalGet('admin/structure/block/manage/views_block__ctools_views_entity_test_block_filter_text');
  $this->submitForm($edit, 'Save block');
  $block = $this->storage
    ->load('views_block__ctools_views_entity_test_block_filter_text');
  $config = $block->getPlugin()
    ->getConfiguration();
  $this->assertEquals('text_1', $config['exposed']['filter-' . $filter_id]['value'], "'configure_filters' value is properly saved.");
  $this->assertEquals('=', $config['exposed']['filter-' . $filter_id]['operator'], "'configure_filters' operator is properly saved.");
  $this->assertEquals('string', $config['exposed']['filter-' . $filter_id]['plugin_id'], "'configure_filters' plugin_id is properly saved.");
  // Assert configure_filters overridden settings.
  $this->drupalGet('<front>');
  $this->assertSession()
    ->fieldExists($filter_id);
  $this->assertSession()
    ->fieldExists($filter_op_id);
  $this->assertSession()
    ->buttonExists('Apply');
  $this->assertSession()
    ->elementExists('xpath', '//fieldset[@id="edit-field-ctools-views-text-value-wrapper"]');
  // Check that the overridden settings return proper results.
  $this->assertEquals(2, count($this->xpath('//div[contains(@class, "view-display-id-block_filter_text")]//table/tbody/tr')));
  // Override operator setting.
  $edit = [];
  $edit['region'] = 'sidebar_first';
  $edit['settings[exposed][filter-' . $filter_id . '][' . $filter_id . '_wrapper][' . $filter_id . ']'] = 'text_1';
  $edit['settings[exposed][filter-' . $filter_id . '][' . $filter_id . '_wrapper][' . $filter_op_id . ']'] = '!=';
  $edit['settings[exposed][filter-' . $filter_id . '][exposed]'] = '1';
  $edit['settings[exposed][filter-' . $filter_id . '][use_operator]'] = '0';
  $this->drupalGet('admin/structure/block/manage/views_block__ctools_views_entity_test_block_filter_text');
  $this->submitForm($edit, 'Save block');
  // Check that operator was saved.
  $block = $this->storage
    ->load('views_block__ctools_views_entity_test_block_filter_text');
  $config = $block->getPlugin()
    ->getConfiguration();
  $this->assertEquals('!=', $config['exposed']['filter-' . $filter_id]['operator'], "'configure_filters' operator is properly saved.");
  $this->assertEquals(TRUE, $config['exposed']['filter-' . $filter_id]['exposed'], "'configure_filters' exposed is properly saved.");
  $this->assertEquals(FALSE, $config['exposed']['filter-' . $filter_id]['expose']['use_operator'], "'configure_filters' exposed is properly saved.");
  // Assert overriden operator.
  $this->drupalGet('<front>');
  $this->assertSession()
    ->fieldExists($filter_id);
  $this->assertSession()
    ->fieldNotExists($filter_op_id);
  $this->assertSession()
    ->buttonExists('Apply');
  $this->assertSession()
    ->elementNotExists('xpath', '//fieldset[@id="edit-field-taxonomy-term-reference-target-id-wrapper"]');
  // Check that the overridden operator returns proper results.
  $this->assertEquals(1, count($this->xpath('//div[contains(@class, "view-display-id-block_filter_text")]//table/tbody/tr')));
}