You are here

public function JsonApiRegressionTest::testPatchingDateTimeNormalizedWrongTimeZoneIssue3021194 in JSON:API 8.2

Ensures datetime fields are normalized using the correct timezone.

See also

https://www.drupal.org/project/jsonapi/issues/2999438

File

tests/src/Functional/JsonApiRegressionTest.php, line 657

Class

JsonApiRegressionTest
JSON:API regression tests.

Namespace

Drupal\Tests\jsonapi\Functional

Code

public function testPatchingDateTimeNormalizedWrongTimeZoneIssue3021194() {

  // Set up data model.
  $this
    ->assertTrue($this->container
    ->get('module_installer')
    ->install([
    'datetime',
  ], TRUE), 'Installed modules.');
  $this
    ->drupalCreateContentType([
    'type' => 'page',
  ]);
  $this
    ->rebuildAll();
  FieldStorageConfig::create([
    'field_name' => 'when',
    'type' => 'datetime',
    'entity_type' => 'node',
    'settings' => [
      'datetime_type' => DateTimeItem::DATETIME_TYPE_DATETIME,
    ],
  ])
    ->save();
  FieldConfig::create([
    'field_name' => 'when',
    'entity_type' => 'node',
    'bundle' => 'page',
  ])
    ->save();

  // Create data.
  $page = Node::create([
    'title' => 'Stegosaurus',
    'type' => 'page',
    'when' => [
      'value' => '2018-09-16T12:00:00',
    ],
  ]);
  $page
    ->save();

  // Test.
  $user = $this
    ->drupalCreateUser([
    'access content',
  ]);
  $response = $this
    ->request('GET', Url::fromUri('internal:/jsonapi/node/page/' . $page
    ->uuid()), [
    RequestOptions::AUTH => [
      $user
        ->getUsername(),
      $user->pass_raw,
    ],
  ]);
  $this
    ->assertSame(200, $response
    ->getStatusCode());
  $doc = Json::decode((string) $response
    ->getBody());
  $this
    ->assertSame('2018-09-16T22:00:00+10:00', $doc['data']['attributes']['when']);
}