public function JsonApiDefaultsFunctionalTest::testRead in JSON:API Extras 8.3
Test the GET method.
File
- modules/jsonapi_defaults/ tests/ src/ Functional/ JsonApiDefaultsFunctionalTest.php, line 33 
Class
- JsonApiDefaultsFunctionalTest
- The test class for the JSON API Defaults functionality.
Namespace
Drupal\Tests\jsonapi_defaults\FunctionalCode
public function testRead() {
  $this
    ->createDefaultContent(4, 5, TRUE, TRUE, static::IS_NOT_MULTILINGUAL);
  // 1. Apply default filters and includes on a resource and a related
  // resource.
  $response = $this
    ->drupalGet('/api/articles');
  $parsed_response = Json::decode($response);
  $this
    ->assertArrayHasKey('data', $parsed_response);
  $this
    ->assertCount(1, $parsed_response['data']);
  $this
    ->assertEquals(3, $parsed_response['data'][0]['attributes']['internalId']);
  $this
    ->assertArrayHasKey('included', $parsed_response);
  $this
    ->assertGreaterThan(0, count($parsed_response['included']));
  // Make sure related resources don't fail.
  $response = $this
    ->drupalGet('/api/articles/' . $this->nodes[0]
    ->uuid() . '/owner');
  $parsed_response = Json::decode($response);
  $this
    ->assertArrayHasKey('data', $parsed_response);
  $this
    ->assertEquals('user--user', $parsed_response['data']['type']);
  // 2. Merge default filters with explicit filters.
  $response = $this
    ->drupalGet('/api/articles', [
    'query' => [
      'filter' => [
        'i' => [
          'condition' => [
            'path' => 'internalId',
            'value' => '2',
          ],
        ],
      ],
    ],
  ]);
  $parsed_response = Json::decode($response);
  $this
    ->assertArrayHasKey('data', $parsed_response);
  // internalId cannot be 2 and 3 at the same time.
  $this
    ->assertCount(0, $parsed_response['data']);
  // 3. Override the default includes.
  $response = $this
    ->drupalGet('/api/articles', [
    'query' => [
      'include' => '',
    ],
  ]);
  $parsed_response = Json::decode($response);
  $this
    ->assertArrayNotHasKey('included', $parsed_response);
  // 4. Using the default sorting check the order.
  // Unset filters of resource config in this test as those limit the results.
  $this
    ->setResouceConfigValue([
    'default_filter' => [],
  ]);
  $this->nodes[0]
    ->setTitle('a');
  $this->nodes[0]
    ->save();
  $this->nodes[1]
    ->setTitle('b');
  $this->nodes[1]
    ->save();
  $this->nodes[2]
    ->setTitle('c');
  $this->nodes[2]
    ->save();
  $this->nodes[3]
    ->setTitle('d');
  $this->nodes[3]
    ->save();
  $response = $this
    ->drupalGet('/api/articles');
  $parsed_response = Json::decode($response);
  // Check if order is as expected.
  $this
    ->assertEquals('d', $parsed_response['data'][0]['attributes']['title']);
  $this
    ->assertEquals('c', $parsed_response['data'][1]['attributes']['title']);
  $this
    ->assertEquals('b', $parsed_response['data'][2]['attributes']['title']);
  $this
    ->assertEquals('a', $parsed_response['data'][3]['attributes']['title']);
  // 5. Override default sorting with explicit sorting.
  $response = $this
    ->drupalGet('/api/articles', [
    'query' => [
      'sort' => [
        'title' => [
          'path' => 'title',
          'direction' => 'ASC',
        ],
      ],
    ],
  ]);
  $parsed_response = Json::decode($response);
  // Check if order changed as expected.
  $this
    ->assertEquals('a', $parsed_response['data'][0]['attributes']['title']);
  $this
    ->assertEquals('b', $parsed_response['data'][1]['attributes']['title']);
  $this
    ->assertEquals('c', $parsed_response['data'][2]['attributes']['title']);
  $this
    ->assertEquals('d', $parsed_response['data'][3]['attributes']['title']);
}