diff --git a/core/modules/datetime/src/Plugin/views/argument/Date.php b/core/modules/datetime/src/Plugin/views/argument/Date.php index 3615bad..91338fe 100644 --- a/core/modules/datetime/src/Plugin/views/argument/Date.php +++ b/core/modules/datetime/src/Plugin/views/argument/Date.php @@ -32,4 +32,4 @@ class Date extends NumericDate { public function getDateField() { return "$this->tableAlias.$this->realField"; } -} \ No newline at end of file +} diff --git a/core/modules/datetime/src/Tests/Views/FilterDateTimeTest.php b/core/modules/datetime/src/Tests/Views/FilterDateTimeTest.php new file mode 100644 index 0000000..b966a66 --- /dev/null +++ b/core/modules/datetime/src/Tests/Views/FilterDateTimeTest.php @@ -0,0 +1,196 @@ + 'page', 'name' => 'page')); + $node_type->save(); + $fieldStorage = entity_create('field_storage_config', array( + 'field_name' => static::$field_name, + 'entity_type' => 'node', + 'type' => 'datetime', + 'settings' => array('datetime_type' => 'date'), + )); + $fieldStorage->save(); + $field = entity_create('field_config', array( + 'field_storage' => $fieldStorage, + 'bundle' => 'page', + 'required' => TRUE, + )); + $field->save(); + + // Views needs to be aware of the new field. + $this->container->get('views.views_data')->clear(); + + // Add some basic test nodes. + $dates = array( + '2000-10-10', + '2001-10-10', + '2002-10-10', + date('Y-m-d', REQUEST_TIME + 86400), + ); + foreach ($dates as $date) { + $this->nodes[] = $this->drupalCreateNode(array( + 'field_date' => array( + 'value' => $date, + ) + )); + } + + // Set column map. + $this->map = array( + 'nid' => 'nid', + ); + } + + /** + * Test filter operations. + */ + public function testDatetimeFilter() { + $this->_testOffset(); + $this->_testBetween(); + } + + /** + * Test offset operations. + */ + protected function _testOffset() { + $view = Views::getView('test_filter_datetime'); + $field = static::$field_name . '_value'; + + // Test simple operations. + $view->initHandlers(); + + $view->filter[$field]->operator = '>'; + $view->filter[$field]->value['type'] = 'offset'; + $view->filter[$field]->value['value'] = '+1 hour'; + $view->executeDisplay('default'); + $expected_result = array( + array('nid' => $this->nodes[3]->id()), + ); + $this->assertIdenticalResultset($view, $expected_result, $this->map); + $view->destroy(); + + // Test offset for between operator. + $view->initHandlers(); + $view->filter[$field]->operator = 'between'; + $view->filter[$field]->value['type'] = 'offset'; + $view->filter[$field]->value['max'] = '+2 days'; + $view->filter[$field]->value['min'] = '+1 hour'; + $view->executeDisplay('default'); + $expected_result = array( + array('nid' => $this->nodes[3]->id()), + ); + $this->assertIdenticalResultset($view, $expected_result, $this->map); + } + + /** + * Test between operations. + */ + protected function _testBetween() { + $view = Views::getView('test_filter_datetime'); + $field = static::$field_name . '_value'; + + // Test between with min and max. + $view->initHandlers(); + $view->filter[$field]->operator = 'between'; + $view->filter[$field]->value['min'] = '2001-01-01'; + $view->filter[$field]->value['max'] = '2002-01-01'; + $view->executeDisplay('default'); + $expected_result = array( + array('nid' => $this->nodes[1]->id()), + ); + $this->assertIdenticalResultset($view, $expected_result, $this->map); + $view->destroy(); + + // Test between with just max. + $view->initHandlers(); + $view->filter[$field]->operator = 'between'; + $view->filter[$field]->value['max'] = '2002-01-01'; + $view->executeDisplay('default'); + $expected_result = array( + array('nid' => $this->nodes[0]->id()), + array('nid' => $this->nodes[1]->id()), + ); + $this->assertIdenticalResultset($view, $expected_result, $this->map); + $view->destroy(); + + // Test not between with min and max. + $view->initHandlers(); + $view->filter[$field]->operator = 'not between'; + $view->filter[$field]->value['min'] = '2001-01-01'; + $view->filter[$field]->value['max'] = '2002-01-01'; + $view->executeDisplay('default'); + $expected_result = array( + array('nid' => $this->nodes[0]->id()), + array('nid' => $this->nodes[2]->id()), + array('nid' => $this->nodes[3]->id()), + ); + $this->assertIdenticalResultset($view, $expected_result, $this->map); + $view->destroy(); + + // Test not between with just max. + $view->initHandlers(); + $view->filter[$field]->operator = 'not between'; + $view->filter[$field]->value['max'] = '2001-01-01'; + $view->executeDisplay('default'); + $expected_result = array( + array('nid' => $this->nodes[1]->id()), + array('nid' => $this->nodes[2]->id()), + array('nid' => $this->nodes[3]->id()), + ); + $this->assertIdenticalResultset($view, $expected_result, $this->map); + } + +} diff --git a/core/modules/datetime/tests/modules/datetime_test/datetime_test.info.yml b/core/modules/datetime/tests/modules/datetime_test/datetime_test.info.yml new file mode 100644 index 0000000..84ba9e4 --- /dev/null +++ b/core/modules/datetime/tests/modules/datetime_test/datetime_test.info.yml @@ -0,0 +1,8 @@ +name: 'Datetime test' +type: module +description: 'Provides default views for tests.' +package: Testing +version: VERSION +core: 8.x +dependencies: + - views diff --git a/core/modules/datetime/tests/modules/datetime_test/test_views/views.view.test_filter_datetime.yml b/core/modules/datetime/tests/modules/datetime_test/test_views/views.view.test_filter_datetime.yml new file mode 100644 index 0000000..f1210d0 --- /dev/null +++ b/core/modules/datetime/tests/modules/datetime_test/test_views/views.view.test_filter_datetime.yml @@ -0,0 +1,50 @@ +langcode: und +status: true +dependencies: + module: + - node +id: test_filter_datetime +label: '' +module: views +description: '' +tag: '' +base_table: node +base_field: nid +core: '8' +display: + default: + display_options: + access: + type: none + cache: + type: none + exposed_form: + type: basic + fields: + nid: + field: nid + id: nid + table: node + plugin_id: node + filters: + field_date_value: + id: field_date_value + table: node__field_date + field: field_date_value + plugin_id: datetime + pager: + type: full + query: + options: + query_comment: false + type: views_query + style: + type: default + row: + type: fields + field_langcode: '***LANGUAGE_language_content***' + field_langcode_add_to_query: null + display_plugin: default + display_title: Master + id: default + position: 0