public function FilterTest::testFilterQuery

Test query of the row plugin.

File

drupal/core/modules/views/lib/Drupal/views/Tests/Plugin/FilterTest.php, line 61
Definition of Drupal\views\Tests\Plugin\FilterTest.

Class

FilterTest
Tests general filter plugin functionality.

Namespace

Drupal\views\Tests\Plugin

Code

public function testFilterQuery() {

  // Check that we can find the test filter plugin.
  $plugin = Views::pluginManager('filter')
    ->createInstance('test_filter');
  $this
    ->assertTrue($plugin instanceof FilterPlugin, 'Test filter plugin found.');
  $view = views_get_view('test_filter');
  $view
    ->initDisplay();

  // Change the filtering.
  $view->displayHandlers
    ->get('default')
    ->overrideOption('filters', array(
    'test_filter' => array(
      'id' => 'test_filter',
      'table' => 'views_test_data',
      'field' => 'name',
      'operator' => '=',
      'value' => 'John',
      'group' => 0,
    ),
  ));
  $this
    ->executeView($view);

  // Make sure the query have where data.
  $this
    ->assertTrue(!empty($view->query->where));

  // Check the data added.
  $where = $view->query->where;
  $this
    ->assertIdentical($where[0]['conditions'][0]['field'], 'views_test_data.name', 'Where condition field matches');
  $this
    ->assertIdentical($where[0]['conditions'][0]['value'], 'John', 'Where condition value matches');
  $this
    ->assertIdentical($where[0]['conditions'][0]['operator'], '=', 'Where condition operator matches');
  $this
    ->executeView($view);

  // Check that our operator and value match on the filter.
  $this
    ->assertIdentical($view->filter['test_filter']->operator, '=');
  $this
    ->assertIdentical($view->filter['test_filter']->value, 'John');

  // Check that we have some results.
  $this
    ->assertEqual(count($view->result), 1, format_string('Results were returned. @count results.', array(
    '@count' => count($view->result),
  )));
  $view
    ->destroy();
  $view
    ->initDisplay();

  // Change the filtering.
  $view->displayHandlers
    ->get('default')
    ->overrideOption('filters', array(
    'test_filter' => array(
      'id' => 'test_filter',
      'table' => 'views_test_data',
      'field' => 'name',
      'operator' => '<>',
      'value' => 'John',
      'group' => 0,
    ),
  ));
  $this
    ->executeView($view);

  // Check that our operator and value match on the filter.
  $this
    ->assertIdentical($view->filter['test_filter']->operator, '<>');
  $this
    ->assertIdentical($view->filter['test_filter']->value, 'John');

  // Test that no nodes have been returned (Only 'page' type nodes should
  // exist).
  $this
    ->assertEqual(count($view->result), 4, format_string('No results were returned. @count results.', array(
    '@count' => count($view->result),
  )));
  $view
    ->destroy();
  $view
    ->initDisplay();

  // Set the test_enable option to FALSE. The 'where' clause should not be
  // added to the query.
  $view->displayHandlers
    ->get('default')
    ->overrideOption('filters', array(
    'test_filter' => array(
      'id' => 'test_filter',
      'table' => 'views_test_data',
      'field' => 'name',
      'operator' => '<>',
      'value' => 'John',
      'group' => 0,
      // Disable this option, so nothing should be added to the query.
      'test_enable' => FALSE,
    ),
  ));

  // Execute the view again.
  $this
    ->executeView($view);

  // Check if we have all 5 results.
  $this
    ->assertEqual(count($view->result), 5, format_string('All @count results returned', array(
    '@count' => count($view->displayHandlers),
  )));
}