X-Git-Url: http://www.aleph1.co.uk/gitweb/?a=blobdiff_plain;f=web%2Fcore%2Fmodules%2Fviews%2Ftests%2Fsrc%2FKernel%2FHandler%2FFieldDateTest.php;fp=web%2Fcore%2Fmodules%2Fviews%2Ftests%2Fsrc%2FKernel%2FHandler%2FFieldDateTest.php;h=833b5c99d193f579cba1c71fe21b5247cf4b6153;hb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;hp=0000000000000000000000000000000000000000;hpb=57c063afa3f66b07c4bbddc2d6129a96d90f0aad;p=yaffs-website diff --git a/web/core/modules/views/tests/src/Kernel/Handler/FieldDateTest.php b/web/core/modules/views/tests/src/Kernel/Handler/FieldDateTest.php new file mode 100644 index 000000000..833b5c99d --- /dev/null +++ b/web/core/modules/views/tests/src/Kernel/Handler/FieldDateTest.php @@ -0,0 +1,193 @@ + "The destruction date of this record", + 'type' => 'int', + 'unsigned' => TRUE, + 'not null' => FALSE, + 'default' => 0, + ]; + return $schema; + } + + /** + * {@inheritdoc} + */ + public function viewsData() { + $data = parent::viewsData(); + $data['views_test_data']['created']['field']['id'] = 'date'; + $data['views_test_data']['destroyed'] = [ + 'title' => 'Destroyed', + 'help' => 'Date in future this will be destroyed.', + 'field' => ['id' => 'date'], + 'argument' => ['id' => 'date'], + 'filter' => ['id' => 'date'], + 'sort' => ['id' => 'date'], + ]; + return $data; + } + + /** + * {@inheritdoc} + */ + public function dataSet() { + $datas = parent::dataSet(); + foreach ($datas as $i => $data) { + $datas[$i]['destroyed'] = gmmktime(0, 0, 0, 1, 1, 2050); + } + return $datas; + } + + /** + * Sets up functional test of the views date field. + */ + public function testFieldDate() { + $view = Views::getView('test_view'); + $view->setDisplay(); + + $view->displayHandlers->get('default')->overrideOption('fields', [ + 'created' => [ + 'id' => 'created', + 'table' => 'views_test_data', + 'field' => 'created', + 'relationship' => 'none', + // ISO 8601 format, see http://php.net/manual/function.date.php + 'custom_date_format' => 'c', + ], + 'destroyed' => [ + 'id' => 'destroyed', + 'table' => 'views_test_data', + 'field' => 'destroyed', + 'relationship' => 'none', + 'custom_date_format' => 'c', + ], + ]); + $time = gmmktime(0, 0, 0, 1, 1, 2000); + + $this->executeView($view); + + $timezones = [ + NULL, + 'UTC', + 'America/New_York', + ]; + + // Check each date/time in various timezones. + foreach ($timezones as $timezone) { + $dates = [ + 'short' => format_date($time, 'short', '', $timezone), + 'medium' => format_date($time, 'medium', '', $timezone), + 'long' => format_date($time, 'long', '', $timezone), + 'custom' => format_date($time, 'custom', 'c', $timezone), + 'fallback' => format_date($time, 'fallback', '', $timezone), + 'html_date' => format_date($time, 'html_date', '', $timezone), + 'html_datetime' => format_date($time, 'html_datetime', '', $timezone), + 'html_month' => format_date($time, 'html_month', '', $timezone), + 'html_time' => format_date($time, 'html_time', '', $timezone), + 'html_week' => format_date($time, 'html_week', '', $timezone), + 'html_year' => format_date($time, 'html_year', '', $timezone), + 'html_yearless_date' => format_date($time, 'html_yearless_date', '', $timezone), + ]; + $this->assertRenderedDatesEqual($view, $dates, $timezone); + } + + // Check times in the past. + $time_since = $this->container->get('date.formatter')->formatTimeDiffSince($time); + $intervals = [ + 'raw time ago' => $time_since, + 'time ago' => t('%time ago', ['%time' => $time_since]), + 'raw time span' => $time_since, + 'inverse time span' => "-$time_since", + 'time span' => t('%time ago', ['%time' => $time_since]), + ]; + $this->assertRenderedDatesEqual($view, $intervals); + + // Check times in the future. + $time = gmmktime(0, 0, 0, 1, 1, 2050); + $formatted = $this->container->get('date.formatter')->formatTimeDiffUntil($time); + $intervals = [ + 'raw time span' => "-$formatted", + 'time span' => t('%time hence', [ + '%time' => $formatted, + ]), + ]; + $this->assertRenderedFutureDatesEqual($view, $intervals); + } + + /** + * Asserts properly formatted display against 'created' field in view. + * + * @param mixed $view + * View to be tested. + * @param array $map + * Data map. + * @param null $timezone + * Optional timezone. + */ + protected function assertRenderedDatesEqual($view, $map, $timezone = NULL) { + foreach ($map as $date_format => $expected_result) { + $view->field['created']->options['date_format'] = $date_format; + $t_args = [ + '%value' => $expected_result, + '%format' => $date_format, + ]; + if (isset($timezone)) { + $t_args['%timezone'] = $timezone; + $message = t('Value %value in %format format for timezone %timezone matches.', $t_args); + $view->field['created']->options['timezone'] = $timezone; + } + else { + $message = t('Value %value in %format format matches.', $t_args); + } + $actual_result = $view->field['created']->advancedRender($view->result[0]); + $this->assertEqual($expected_result, $actual_result, $message); + } + } + + /** + * Asserts properly formatted display against 'destroyed' field in view. + * + * @param mixed $view + * View to be tested. + * @param array $map + * Data map. + */ + protected function assertRenderedFutureDatesEqual($view, $map) { + foreach ($map as $format => $result) { + $view->field['destroyed']->options['date_format'] = $format; + $view_result = $view->field['destroyed']->advancedRender($view->result[0]); + $t_args = [ + '%value' => $result, + '%format' => $format, + '%actual' => $view_result, + ]; + $message = t('Value %value in %format matches %actual', $t_args); + $this->assertEqual($view_result, $result, $message); + } + } + +}