Commit f68cb6f9 authored by Adam Nagy's avatar Adam Nagy
Browse files

Issue #3266976 by joevagyok: Wrong date shown in form after submit

parent 13a8d31a
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -33,7 +33,9 @@ class DateRangeTimezone extends DateRangeDefaultWidget {
    if ($items[$delta]->timezone) {
      $timezone = new \DateTimeZone($items[$delta]->timezone);
      $element['value']['#default_value']->setTimeZone($timezone);
      $element['value']['#date_timezone'] = $items[$delta]->timezone;
      $element['end_value']['#default_value']->setTimeZone($timezone);
      $element['end_value']['#date_timezone'] = $items[$delta]->timezone;
    }

    $element['timezone'] = [
+5 −0
Original line number Diff line number Diff line
@@ -12,6 +12,11 @@ abstract class DateRangeTimezoneTestBase extends BrowserTestBase {

  use DateRangeTimezoneHelperTrait;

  /**
   * {@inheritdoc}
   */
  protected $defaultTheme = 'stark';

  /**
   * Modules to enable.
   *
+19 −3
Original line number Diff line number Diff line
@@ -4,6 +4,8 @@ namespace Drupal\Tests\datetime_range_timezone\Functional;

use Drupal\Core\Datetime\DrupalDateTime;
use Drupal\Core\Datetime\Entity\DateFormat;
use Drupal\datetime\Plugin\Field\FieldType\DateTimeItemInterface;
use Drupal\entity_test\Entity\EntityTest;

/**
 * Test the datetime widget.
@@ -18,7 +20,7 @@ class DateRangeTimezoneWidgetTest extends DateRangeTimezoneTestBase {
  public function testWidgetDefaultValuesAreTranslated() {
    $assert = $this->assertSession();

    // Create an entity with a date that we'll enter in Amercia/New York time.
    // Create an entity with a date that we'll enter in America/New York time.
    $start_date = new DrupalDateTime('2017-03-25 10:30:00', 'America/New_York');
    $end_date = new DrupalDateTime('2017-03-28 10:30:00', 'America/New_York');

@@ -26,18 +28,32 @@ class DateRangeTimezoneWidgetTest extends DateRangeTimezoneTestBase {
    $date_format = DateFormat::load('html_date')->getPattern();
    $time_format = DateFormat::load('html_time')->getPattern();

    $this->drupalPostForm('entity_test/add', [
    $this->drupalGet('entity_test/add');

    $edit = [
      'date[0][value][date]' => $start_date->format($date_format),
      'date[0][value][time]' => $start_date->format($time_format),
      'date[0][end_value][date]' => $end_date->format($date_format),
      'date[0][end_value][time]' => $end_date->format($time_format),
      'date[0][timezone]' => 'America/New_York',
    ], 'Save');
    ];
    $this->submitForm($edit, 'Save');

    $assert->fieldValueEquals('date[0][value][date]', $start_date->format($date_format));
    $assert->fieldValueEquals('date[0][value][time]', $start_date->format($time_format));
    $assert->fieldValueEquals('date[0][end_value][date]', $end_date->format($date_format));
    $assert->fieldValueEquals('date[0][end_value][time]', $end_date->format($time_format));
    $this->assertEquals('America/New_York', $this->assertSession()->selectExists('Timezone')->getValue());

    // Assert the stored values of the entity.
    $entity = EntityTest::loadMultiple();
    $entity = reset($entity);
    // Convert the date back to storage timezone to assert the form value had
    // successfully massaged back to storage timezone.
    $start_date->setTimezone(new \DateTimeZone(DateTimeItemInterface::STORAGE_TIMEZONE));
    $this->assertEquals($start_date->format(DateTimeItemInterface::DATETIME_STORAGE_FORMAT), $entity->get('date')->value);
    $end_date->setTimezone(new \DateTimeZone(DateTimeItemInterface::STORAGE_TIMEZONE));
    $this->assertEquals($end_date->format(DateTimeItemInterface::DATETIME_STORAGE_FORMAT), $entity->get('date')->end_value);
  }

}
+1 −1
Original line number Diff line number Diff line
@@ -41,7 +41,7 @@ trait DateRangeTimezoneHelperTrait {
        'type' => 'daterange_timezone',
      ])
      ->save();
    $entity_display_repository->getViewDisplay('entity_test', 'entity_test', 'default')
    $entity_display_repository->getFormDisplay('entity_test', 'entity_test', 'default')
      ->setComponent($field_name, [
        'type' => 'daterange_timezone',
      ])