3 namespace Drupal\Tests\views\Kernel\Handler;
5 use Drupal\Tests\views\Kernel\ViewsKernelTestBase;
6 use Drupal\views\Views;
9 * Tests the core Drupal\views\Plugin\views\filter\BooleanOperator handler.
12 * @see \Drupal\views\Plugin\views\filter\BooleanOperator
14 class FilterBooleanOperatorTest extends ViewsKernelTestBase {
17 * The modules to enable for this test.
21 public static $modules = ['system'];
24 * Views used by this test.
28 public static $testViews = ['test_view'];
35 protected $columnMap = [
36 'views_test_data_id' => 'id',
40 * Tests the BooleanOperator filter.
42 public function testFilterBooleanOperator() {
43 $view = Views::getView('test_view');
46 // Add a the status boolean filter.
47 $view->displayHandlers->get('default')->overrideOption('filters', [
51 'table' => 'views_test_data',
55 $this->executeView($view);
62 $this->assertEqual(2, count($view->result));
63 $this->assertIdenticalResultset($view, $expected_result, $this->columnMap);
68 // Add the status boolean filter.
69 $view->displayHandlers->get('default')->overrideOption('filters', [
73 'table' => 'views_test_data',
77 $this->executeView($view);
85 $this->assertEqual(3, count($view->result));
86 $this->assertIdenticalResultset($view, $expected_result, $this->columnMap);
91 // Testing the same scenario but using the reverse status and operation.
92 $view->displayHandlers->get('default')->overrideOption('filters', [
96 'table' => 'views_test_data',
101 $this->executeView($view);
109 $this->assertEqual(3, count($view->result));
110 $this->assertIdenticalResultset($view, $expected_result, $this->columnMap);
114 * Tests the boolean filter with grouped exposed form enabled.
116 public function testFilterGroupedExposed() {
117 $filters = $this->getGroupedExposedFilters();
118 $view = Views::getView('test_view');
120 $view->setExposedInput(['status' => 1]);
122 $view->displayHandlers->get('default')->overrideOption('filters', $filters);
124 $this->executeView($view);
132 $this->assertEqual(3, count($view->result));
133 $this->assertIdenticalResultset($view, $expected_result, $this->columnMap);
136 $view->setExposedInput(['status' => 2]);
138 $view->displayHandlers->get('default')->overrideOption('filters', $filters);
140 $this->executeView($view);
147 $this->assertEqual(2, count($view->result));
148 $this->assertIdenticalResultset($view, $expected_result, $this->columnMap);
152 // Expecting the same results as for ['status' => 1].
153 $view->setExposedInput(['status' => 3]);
155 $view->displayHandlers->get('default')->overrideOption('filters', $filters);
157 $this->executeView($view);
165 $this->assertEqual(3, count($view->result));
166 $this->assertIdenticalResultset($view, $expected_result, $this->columnMap);
170 * Provides grouped exposed filter configuration.
174 protected function getGroupedExposedFilters() {
178 'table' => 'views_test_data',
180 'relationship' => 'none',
183 'operator' => 'status_op',
185 'identifier' => 'status',
187 'is_grouped' => TRUE,
190 'identifier' => 'status',
191 'default_group' => 'All',
199 'title' => 'Blocked',
203 // This group should return the same results as group 1, because it
204 // is the negation of group 2.
206 'title' => 'Active (reverse)',