function JsonApiFunctionalDateFieldTest::testRead

Same name and namespace in other branches
  1. 9 core/modules/jsonapi/tests/src/Functional/JsonApiFunctionalDateFieldTest.php \Drupal\Tests\jsonapi\Functional\JsonApiFunctionalDateFieldTest::testRead()
  2. 10 core/modules/jsonapi/tests/src/Functional/JsonApiFunctionalDateFieldTest.php \Drupal\Tests\jsonapi\Functional\JsonApiFunctionalDateFieldTest::testRead()

Tests the GET method.

File

core/modules/jsonapi/tests/src/Functional/JsonApiFunctionalDateFieldTest.php, line 58

Class

JsonApiFunctionalDateFieldTest
JSON:API integration test for the "Date" field.

Namespace

Drupal\Tests\jsonapi\Functional

Code

public function testRead() : void {
    
    /** @var \Drupal\Core\Datetime\DateFormatterInterface $date_formatter */
    $date_formatter = $this->container
        ->get('date.formatter');
    $timestamp_1 = 5000000;
    $timestamp_2 = 6000000;
    $timestamp_3 = 7000000;
    // Expected: node 1.
    $timestamp_smaller_than_value = $timestamp_2;
    // Expected: node 1 and node 2.
    $timestamp_smaller_than_or_equal_value = $timestamp_2;
    // Expected: node 3.
    $timestamp_greater_than_value = $timestamp_2;
    // Expected: node 2 and node 3.
    $timestamp_greater_than_or_equal_value = $timestamp_2;
    $node_1 = $this->createNode([
        'type' => 'article',
        'uuid' => 'es_test_1',
        'status' => NodeInterface::PUBLISHED,
        'field_datetime' => $date_formatter->format($timestamp_1, 'custom', DateTimeItemInterface::DATETIME_STORAGE_FORMAT),
    ]);
    $node_2 = $this->createNode([
        'type' => 'article',
        'uuid' => 'es_test_2',
        'status' => NodeInterface::PUBLISHED,
        'field_datetime' => $date_formatter->format($timestamp_2, 'custom', DateTimeItemInterface::DATETIME_STORAGE_FORMAT),
    ]);
    $node_3 = $this->createNode([
        'type' => 'article',
        'uuid' => 'es_test_3',
        'status' => NodeInterface::PUBLISHED,
        'field_datetime' => $date_formatter->format($timestamp_3, 'custom', DateTimeItemInterface::DATETIME_STORAGE_FORMAT),
    ]);
    // Checks whether the date is greater than the given timestamp.
    $filter = [
        'filter_datetime' => [
            'condition' => [
                'path' => 'field_datetime',
                'operator' => '>',
                'value' => date(DateTimeItemInterface::DATETIME_STORAGE_FORMAT, $timestamp_greater_than_value),
            ],
        ],
    ];
    $output = Json::decode($this->drupalGet('/jsonapi/node/article', [
        'query' => [
            'filter' => $filter,
        ],
    ]));
    $this->assertSession()
        ->statusCodeEquals(200);
    $output_uuids = array_map(function ($result) {
        return $result['id'];
    }, $output['data']);
    $this->assertCount(1, $output_uuids);
    $this->assertSame([
        $node_3->uuid(),
    ], $output_uuids);
    // Checks whether the date is greater than or equal to the given timestamp.
    $filter = [
        'filter_datetime' => [
            'condition' => [
                'path' => 'field_datetime',
                'operator' => '>=',
                'value' => date(DateTimeItemInterface::DATETIME_STORAGE_FORMAT, $timestamp_greater_than_or_equal_value),
            ],
        ],
    ];
    $output = Json::decode($this->drupalGet('/jsonapi/node/article', [
        'query' => [
            'filter' => $filter,
        ],
    ]));
    $this->assertSession()
        ->statusCodeEquals(200);
    $output_uuids = array_map(function ($result) {
        return $result['id'];
    }, $output['data']);
    $this->assertCount(2, $output_uuids);
    $this->assertSame([
        $node_2->uuid(),
        $node_3->uuid(),
    ], $output_uuids);
    // Checks whether the date is less than the given timestamp.
    $filter = [
        'filter_datetime' => [
            'condition' => [
                'path' => 'field_datetime',
                'operator' => '<',
                'value' => date(DateTimeItemInterface::DATETIME_STORAGE_FORMAT, $timestamp_smaller_than_value),
            ],
        ],
    ];
    $output = Json::decode($this->drupalGet('/jsonapi/node/article', [
        'query' => [
            'filter' => $filter,
        ],
    ]));
    $this->assertSession()
        ->statusCodeEquals(200);
    $output_uuids = array_map(function ($result) {
        return $result['id'];
    }, $output['data']);
    $this->assertCount(1, $output_uuids);
    $this->assertSame([
        $node_1->uuid(),
    ], $output_uuids);
    // Checks whether the date is less than or equal to the given timestamp.
    $filter = [
        'filter_datetime' => [
            'condition' => [
                'path' => 'field_datetime',
                'operator' => '<=',
                'value' => date(DateTimeItemInterface::DATETIME_STORAGE_FORMAT, $timestamp_smaller_than_or_equal_value),
            ],
        ],
    ];
    $output = Json::decode($this->drupalGet('/jsonapi/node/article', [
        'query' => [
            'filter' => $filter,
        ],
    ]));
    $this->assertSession()
        ->statusCodeEquals(200);
    $output_uuids = array_map(function ($result) {
        return $result['id'];
    }, $output['data']);
    $this->assertCount(2, $output_uuids);
    $this->assertSame([
        $node_1->uuid(),
        $node_2->uuid(),
    ], $output_uuids);
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.