'name', 'views_test_data_age' => 'age', ]; public function viewsData() { $data = parent::viewsData(); $data['views_test_data']['age']['filter']['allow empty'] = TRUE; $data['views_test_data']['id']['filter']['allow empty'] = FALSE; return $data; } public function testFilterNumericSimple() { $view = Views::getView('test_view'); $view->setDisplay(); // Change the filtering $view->displayHandlers->get('default')->overrideOption('filters', [ 'age' => [ 'id' => 'age', 'table' => 'views_test_data', 'field' => 'age', 'relationship' => 'none', 'operator' => '=', 'value' => ['value' => 28], ], ]); $this->executeView($view); $resultset = [ [ 'name' => 'Ringo', 'age' => 28, ], ]; $this->assertIdenticalResultset($view, $resultset, $this->columnMap); } public function testFilterNumericExposedGroupedSimple() { $filters = $this->getGroupedExposedFilters(); $view = Views::getView('test_view'); $view->newDisplay('page', 'Page', 'page_1'); // Filter: Age, Operator: =, Value: 28 $filters['age']['group_info']['default_group'] = 1; $view->setDisplay('page_1'); $view->displayHandlers->get('page_1')->overrideOption('filters', $filters); $view->save(); $this->container->get('router.builder')->rebuild(); $this->executeView($view); $resultset = [ [ 'name' => 'Ringo', 'age' => 28, ], ]; $this->assertIdenticalResultset($view, $resultset, $this->columnMap); } public function testFilterNumericBetween() { $view = Views::getView('test_view'); $view->setDisplay(); // Change the filtering $view->displayHandlers->get('default')->overrideOption('filters', [ 'age' => [ 'id' => 'age', 'table' => 'views_test_data', 'field' => 'age', 'relationship' => 'none', 'operator' => 'between', 'value' => [ 'min' => 26, 'max' => 29, ], ], ]); $this->executeView($view); $resultset = [ [ 'name' => 'George', 'age' => 27, ], [ 'name' => 'Ringo', 'age' => 28, ], [ 'name' => 'Paul', 'age' => 26, ], ]; $this->assertIdenticalResultset($view, $resultset, $this->columnMap); // test not between $view->destroy(); $view->setDisplay(); // Change the filtering $view->displayHandlers->get('default')->overrideOption('filters', [ 'age' => [ 'id' => 'age', 'table' => 'views_test_data', 'field' => 'age', 'relationship' => 'none', 'operator' => 'not between', 'value' => [ 'min' => 26, 'max' => 29, ], ], ]); $this->executeView($view); $resultset = [ [ 'name' => 'John', 'age' => 25, ], [ 'name' => 'Meredith', 'age' => 30, ], ]; $this->assertIdenticalResultset($view, $resultset, $this->columnMap); } public function testFilterNumericExposedGroupedBetween() { $filters = $this->getGroupedExposedFilters(); $view = Views::getView('test_view'); $view->newDisplay('page', 'Page', 'page_1'); // Filter: Age, Operator: between, Value: 26 and 29 $filters['age']['group_info']['default_group'] = 2; $view->setDisplay('page_1'); $view->displayHandlers->get('page_1')->overrideOption('filters', $filters); $view->save(); $this->container->get('router.builder')->rebuild(); $this->executeView($view); $resultset = [ [ 'name' => 'George', 'age' => 27, ], [ 'name' => 'Ringo', 'age' => 28, ], [ 'name' => 'Paul', 'age' => 26, ], ]; $this->assertIdenticalResultset($view, $resultset, $this->columnMap); } public function testFilterNumericExposedGroupedNotBetween() { $filters = $this->getGroupedExposedFilters(); $view = Views::getView('test_view'); $view->newDisplay('page', 'Page', 'page_1'); // Filter: Age, Operator: between, Value: 26 and 29 $filters['age']['group_info']['default_group'] = 3; $view->setDisplay('page_1'); $view->displayHandlers->get('page_1')->overrideOption('filters', $filters); $view->save(); $this->container->get('router.builder')->rebuild(); $this->executeView($view); $resultset = [ [ 'name' => 'John', 'age' => 25, ], [ 'name' => 'Meredith', 'age' => 30, ], ]; $this->assertIdenticalResultset($view, $resultset, $this->columnMap); } /** * Tests the numeric filter handler with the 'regular_expression' operator. */ public function testFilterNumericRegularExpression() { $view = Views::getView('test_view'); $view->setDisplay(); // Filtering by regular expression pattern. $view->displayHandlers->get('default')->overrideOption('filters', [ 'age' => [ 'id' => 'age', 'table' => 'views_test_data', 'field' => 'age', 'relationship' => 'none', 'operator' => 'regular_expression', 'value' => [ 'value' => '2[8]', ], ], ]); $this->executeView($view); $resultset = [ [ 'name' => 'Ringo', 'age' => 28, ], ]; $this->assertIdenticalResultset($view, $resultset, $this->columnMap); } /** * Tests the numeric filter handler with the 'regular_expression' operator * to grouped exposed filters. */ public function testFilterNumericExposedGroupedRegularExpression() { $filters = $this->getGroupedExposedFilters(); $view = Views::getView('test_view'); $view->newDisplay('page', 'Page', 'page_1'); // Filter: Age, Operator: regular_expression, Value: 2[7-8] $filters['age']['group_info']['default_group'] = 6; $view->setDisplay('page_1'); $view->displayHandlers->get('page_1')->overrideOption('filters', $filters); $view->save(); $this->executeView($view); $resultset = [ [ 'name' => 'George', 'age' => 27, ], [ 'name' => 'Ringo', 'age' => 28, ], ]; $this->assertIdenticalResultset($view, $resultset, $this->columnMap); } public function testFilterNumericEmpty() { $view = Views::getView('test_view'); $view->setDisplay(); // Change the filtering $view->displayHandlers->get('default')->overrideOption('filters', [ 'age' => [ 'id' => 'age', 'table' => 'views_test_data', 'field' => 'age', 'relationship' => 'none', 'operator' => 'empty', ], ]); $this->executeView($view); $resultset = [ ]; $this->assertIdenticalResultset($view, $resultset, $this->columnMap); $view->destroy(); $view->setDisplay(); // Change the filtering $view->displayHandlers->get('default')->overrideOption('filters', [ 'age' => [ 'id' => 'age', 'table' => 'views_test_data', 'field' => 'age', 'relationship' => 'none', 'operator' => 'not empty', ], ]); $this->executeView($view); $resultset = [ [ 'name' => 'John', 'age' => 25, ], [ 'name' => 'George', 'age' => 27, ], [ 'name' => 'Ringo', 'age' => 28, ], [ 'name' => 'Paul', 'age' => 26, ], [ 'name' => 'Meredith', 'age' => 30, ], ]; $this->assertIdenticalResultset($view, $resultset, $this->columnMap); } public function testFilterNumericExposedGroupedEmpty() { $filters = $this->getGroupedExposedFilters(); $view = Views::getView('test_view'); $view->newDisplay('page', 'Page', 'page_1'); // Filter: Age, Operator: empty, Value: $filters['age']['group_info']['default_group'] = 4; $view->setDisplay('page_1'); $view->displayHandlers->get('page_1')->overrideOption('filters', $filters); $view->save(); $this->container->get('router.builder')->rebuild(); $this->executeView($view); $resultset = [ ]; $this->assertIdenticalResultset($view, $resultset, $this->columnMap); } public function testFilterNumericExposedGroupedNotEmpty() { $filters = $this->getGroupedExposedFilters(); $view = Views::getView('test_view'); $view->newDisplay('page', 'Page', 'page_1'); // Filter: Age, Operator: empty, Value: $filters['age']['group_info']['default_group'] = 5; $view->setDisplay('page_1'); $view->displayHandlers->get('page_1')->overrideOption('filters', $filters); $view->save(); $this->container->get('router.builder')->rebuild(); $this->executeView($view); $resultset = [ [ 'name' => 'John', 'age' => 25, ], [ 'name' => 'George', 'age' => 27, ], [ 'name' => 'Ringo', 'age' => 28, ], [ 'name' => 'Paul', 'age' => 26, ], [ 'name' => 'Meredith', 'age' => 30, ], ]; $this->assertIdenticalResultset($view, $resultset, $this->columnMap); } public function testAllowEmpty() { $view = Views::getView('test_view'); $view->setDisplay(); $view->displayHandlers->get('default')->overrideOption('filters', [ 'id' => [ 'id' => 'id', 'table' => 'views_test_data', 'field' => 'id', 'relationship' => 'none', ], 'age' => [ 'id' => 'age', 'table' => 'views_test_data', 'field' => 'age', 'relationship' => 'none', ], ]); $view->initHandlers(); $id_operators = $view->filter['id']->operators(); $age_operators = $view->filter['age']->operators(); $this->assertFalse(isset($id_operators['empty'])); $this->assertFalse(isset($id_operators['not empty'])); $this->assertTrue(isset($age_operators['empty'])); $this->assertTrue(isset($age_operators['not empty'])); } protected function getGroupedExposedFilters() { $filters = [ 'age' => [ 'id' => 'age', 'plugin_id' => 'numeric', 'table' => 'views_test_data', 'field' => 'age', 'relationship' => 'none', 'exposed' => TRUE, 'expose' => [ 'operator' => 'age_op', 'label' => 'age', 'identifier' => 'age', ], 'is_grouped' => TRUE, 'group_info' => [ 'label' => 'age', 'identifier' => 'age', 'default_group' => 'All', 'group_items' => [ 1 => [ 'title' => 'Age is 28', 'operator' => '=', 'value' => ['value' => 28], ], 2 => [ 'title' => 'Age is between 26 and 29', 'operator' => 'between', 'value' => [ 'min' => 26, 'max' => 29, ], ], 3 => [ 'title' => 'Age is not between 26 and 29', 'operator' => 'not between', 'value' => [ 'min' => 26, 'max' => 29, ], ], 4 => [ 'title' => 'Age is empty', 'operator' => 'empty', ], 5 => [ 'title' => 'Age is not empty', 'operator' => 'not empty', ], 6 => [ 'title' => 'Age is regexp 2[7-8]', 'operator' => 'regular_expression', 'value' => [ 'value' => '2[7-8]', ], ], ], ], ], ]; return $filters; } }