'id', ]; /** * {@inheritdoc} */ protected function schemaDefinition() { $schema = parent::schemaDefinition(); $schema['views_test_data']['fields']['status'] = [ 'description' => 'The status of this record', 'type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => '', ]; return $schema; } /** * {@inheritdoc} */ protected function viewsData() { $views_data = parent::viewsData(); $views_data['views_test_data']['status']['filter']['id'] = 'boolean_string'; return $views_data; } /** * {@inheritdoc} */ protected function dataSet() { $data = parent::dataSet(); foreach ($data as &$row) { if ($row['status']) { $row['status'] = 'Enabled'; } else { $row['status'] = ''; } } return $data; } /** * Tests the BooleanOperatorString filter. */ public function testFilterBooleanOperatorString() { $view = Views::getView('test_view'); $view->setDisplay(); // Add a the status boolean filter. $view->displayHandlers->get('default')->overrideOption('filters', [ 'status' => [ 'id' => 'status', 'field' => 'status', 'table' => 'views_test_data', 'value' => 0, ], ]); $this->executeView($view); $expected_result = [ ['id' => 2], ['id' => 4], ]; $this->assertEqual(2, count($view->result)); $this->assertIdenticalResultset($view, $expected_result, $this->columnMap); $view->destroy(); $view->setDisplay(); // Add the status boolean filter. $view->displayHandlers->get('default')->overrideOption('filters', [ 'status' => [ 'id' => 'status', 'field' => 'status', 'table' => 'views_test_data', 'value' => 1, ], ]); $this->executeView($view); $expected_result = [ ['id' => 1], ['id' => 3], ['id' => 5], ]; $this->assertEqual(3, count($view->result)); $this->assertIdenticalResultset($view, $expected_result, $this->columnMap); } /** * Tests the Boolean filter with grouped exposed form enabled. */ public function testFilterGroupedExposed() { $filters = $this->getGroupedExposedFilters(); $view = Views::getView('test_view'); $view->setExposedInput(['status' => 1]); $view->setDisplay(); $view->displayHandlers->get('default')->overrideOption('filters', $filters); $this->executeView($view); $expected_result = [ ['id' => 1], ['id' => 3], ['id' => 5], ]; $this->assertEqual(3, count($view->result)); $this->assertIdenticalResultset($view, $expected_result, $this->columnMap); $view->destroy(); $view->setExposedInput(['status' => 2]); $view->setDisplay(); $view->displayHandlers->get('default')->overrideOption('filters', $filters); $this->executeView($view); $expected_result = [ ['id' => 2], ['id' => 4], ]; $this->assertEqual(2, count($view->result)); $this->assertIdenticalResultset($view, $expected_result, $this->columnMap); } /** * Provides grouped exposed filter configuration. * * @return array * Returns the filter configuration for exposed filters. */ protected function getGroupedExposedFilters() { $filters = [ 'status' => [ 'id' => 'status', 'table' => 'views_test_data', 'field' => 'status', 'relationship' => 'none', 'exposed' => TRUE, 'expose' => [ 'operator' => 'status_op', 'label' => 'status', 'identifier' => 'status', ], 'is_grouped' => TRUE, 'group_info' => [ 'label' => 'status', 'identifier' => 'status', 'default_group' => 'All', 'group_items' => [ 1 => [ 'title' => 'Active', 'operator' => '=', 'value' => '1', ], 2 => [ 'title' => 'Blocked', 'operator' => '=', 'value' => '0', ], ], ], ], ]; return $filters; } }