diff --git a/tests/field/views_filter_list.test b/tests/field/views_filter_list.test new file mode 100644 index 0000000..63871cc --- /dev/null +++ b/tests/field/views_filter_list.test @@ -0,0 +1,185 @@ + 'Tests field: list filter ', + 'description' => 'Tests the listfield filter', + 'group' => 'Views Modules', + ); + } + + protected function setUp() { + parent::setUp(); + $field = array( + 'field_name' => 'field_list', + 'type' => 'list_integer', + 'cardinality' => 1, + 'settings' => array( + 'allowed_values' => array(1 => 'One', 2 => 'Two', 3 => 'Three'), + ) + ); + $this->field = field_create_field($field); + $instance = array( + 'field_name' => 'field_list', + 'entity_type' => 'node', + 'bundle' => 'page' + ); + $this->instance = field_create_instance($instance); + + $langcode = LANGUAGE_NONE; + + $this->nodes = array(); + for ($i = 0; $i < 2; $i++) { + $edit = array( + 'field_list' => array($langcode => array(array('value' => $i))), + 'type' => 'page' + ); + + $this->nodes[] = $this->drupalcreateNode($edit); + } + } + + + /** + * Tests the filtering on operators for the handler. + */ + public function testOperators() { + $view = $this->viewTestOperators(); + $view->init_display(); + $view->init_handlers(); + + // Check the or operator. + $view->filter['field_list']->operator = 'or'; + $view->filter['field_list']->value = array(0, 1); + $this->executeView($view); + + $expected_result = array(); + $expected_result[] = array('nid' => $this->nodes[0]->nid); + $expected_result[] = array('nid' => $this->nodes[1]->nid); + + $this->assertIdenticalResultset($view, $expected_result, array('nid' => 'node_nid')); + + // Check the and operator. + $view->destroy(); + $view->init_display(); + $view->init_handlers(); + $view->filter['field_list']->operator = 'and'; + $view->filter['field_list']->value = array(0, 1); + $this->executeView($view); + + $expected_result = array(); + + $this->assertIdenticalResultset($view, $expected_result, array('nid' => 'node_nid')); + + $view->destroy(); + $view->init_display(); + $view->init_handlers(); + $view->filter['field_list']->value = array(0); + $this->executeView($view); + + $expected_result = array(); + $expected_result[] = array('nid' => $this->nodes[0]->nid); + + $this->assertIdenticalResultset($view, $expected_result, array('nid' => 'node_nid')); + + // Check the not operator. + $view->destroy(); + $view->init_display(); + $view->init_handlers(); + $view->filter['field_list']->operator = 'not'; + $view->filter['field_list']->value = array(0); + $this->executeView($view); + + $expected_result = array(); + $expected_result[] = array('nid' => $this->nodes[1]->nid); + $expected_result[] = array('nid' => $this->nodes[2]->nid); + + $this->assertIdenticalResultset($view, $expected_result, array('nid' => 'node_nid')); + + } + + /** + * Tests the update from the parent class views_handler_filter_many_to_one + * to views_handler_filter_in_operator. + */ + public function testChangedOperator() { + $view = $this->viewTestOperators(); + + // Tests the mapping of the old and the new operator and be sure that the + // validation doesn't fail on the view. + foreach (array(array('in' => 'or'), array('not in' => 'not')) as $pair) { + $view->init_display(); + list($before, $after) = $pair; + $view->display['default']->filters[$this->field['field_name']]['operator'] = $before; + $view->init_handlers(); + + $this->assertEqual($after, $view->filter['field_list']->operator); + $this->assertTrue($view->validate()); + $view->destroy(); + } + } + + protected function viewTestOperators() { + $view = new view; + $view->name = 'view_fieldapi'; + $view->description = ''; + $view->tag = 'default'; + $view->base_table = 'node'; + $view->human_name = 'view_fieldapi'; + $view->core = 7; + $view->api_version = '3.0'; + $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */ + + /* Display: Master */ + $handler = $view->new_display('default', 'Master', 'default'); + $handler->display->display_options['access']['type'] = 'perm'; + $handler->display->display_options['cache']['type'] = 'none'; + $handler->display->display_options['query']['type'] = 'views_query'; + $handler->display->display_options['exposed_form']['type'] = 'basic'; + $handler->display->display_options['pager']['type'] = 'full'; + $handler->display->display_options['style_plugin'] = 'default'; + $handler->display->display_options['row_plugin'] = 'fields'; + + $handler->display->display_options['fields']['nid']['id'] = 'nid'; + $handler->display->display_options['fields']['nid']['table'] = 'node'; + $handler->display->display_options['fields']['nid']['field'] = 'nid'; + + $handler->display->display_options['filters'][$this->field['field_name']]['id'] = $this->field['field_name']; + $handler->display->display_options['filters'][$this->field['field_name']]['table'] = 'field_data_' . $this->field['field_name']; + $handler->display->display_options['filters'][$this->field['field_name']]['field'] = $this->field['field_name']; + $handler->display->display_options['filters'][$this->field['field_name']]['operator'] = 'or'; + $handler->display->display_options['filters'][$this->field['field_name']]['value'] = array( + ); + + return $view; + } +} + diff --git a/views.info b/views.info index c0d8f14..46ed6df 100644 --- a/views.info +++ b/views.info @@ -283,6 +283,7 @@ files[] = tests/views_argument_default.test files[] = tests/views_argument_validator.test files[] = tests/views_exposed_form.test files[] = tests/field/views_fieldapi.test +files[] = tests/field/views_filter_list.test files[] = tests/views_glossary.test files[] = tests/views_groupby.test files[] = tests/views_handlers.test