You are here

public function FieldDateTest::testFieldDate in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/views/tests/src/Kernel/Handler/FieldDateTest.php \Drupal\Tests\views\Kernel\Handler\FieldDateTest::testFieldDate()

Sets up functional test of the views date field.

File

core/modules/views/tests/src/Kernel/Handler/FieldDateTest.php, line 68

Class

FieldDateTest
Tests the core Drupal\views\Plugin\views\field\Date handler.

Namespace

Drupal\Tests\views\Kernel\Handler

Code

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 https://www.php.net/manual/datetime.format.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',
  ];

  /** @var \Drupal\Core\Datetime\DateFormatterInterface $date_formatter */
  $date_formatter = $this->container
    ->get('date.formatter');

  // Check each date/time in various timezones.
  foreach ($timezones as $timezone) {
    $dates = [
      'short' => $date_formatter
        ->format($time, 'short', '', $timezone),
      'medium' => $date_formatter
        ->format($time, 'medium', '', $timezone),
      'long' => $date_formatter
        ->format($time, 'long', '', $timezone),
      'custom' => $date_formatter
        ->format($time, 'custom', 'c', $timezone),
      'fallback' => $date_formatter
        ->format($time, 'fallback', '', $timezone),
      'html_date' => $date_formatter
        ->format($time, 'html_date', '', $timezone),
      'html_datetime' => $date_formatter
        ->format($time, 'html_datetime', '', $timezone),
      'html_month' => $date_formatter
        ->format($time, 'html_month', '', $timezone),
      'html_time' => $date_formatter
        ->format($time, 'html_time', '', $timezone),
      'html_week' => $date_formatter
        ->format($time, 'html_week', '', $timezone),
      'html_year' => $date_formatter
        ->format($time, 'html_year', '', $timezone),
      'html_yearless_date' => $date_formatter
        ->format($time, 'html_yearless_date', '', $timezone),
    ];
    $this
      ->assertRenderedDatesEqual($view, $dates, $timezone);
  }

  // Check times in the past.
  $time_since = $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 = $date_formatter
    ->formatTimeDiffUntil($time);
  $intervals = [
    'raw time span' => "-{$formatted}",
    'time span' => t('%time hence', [
      '%time' => $formatted,
    ]),
  ];
  $this
    ->assertRenderedFutureDatesEqual($view, $intervals);
}