EntryPointTest.php

Same filename in other branches
  1. 8.9.x core/modules/jsonapi/tests/src/Functional/EntryPointTest.php
  2. 10 core/modules/jsonapi/tests/src/Functional/EntryPointTest.php
  3. 11.x core/modules/jsonapi/tests/src/Functional/EntryPointTest.php

Namespace

Drupal\Tests\jsonapi\Functional

File

core/modules/jsonapi/tests/src/Functional/EntryPointTest.php

View source
<?php

namespace Drupal\Tests\jsonapi\Functional;

use Drupal\Component\Serialization\Json;
use Drupal\Core\Url;
use Drupal\Tests\BrowserTestBase;
use Drupal\Tests\user\Traits\UserCreationTrait;
use GuzzleHttp\RequestOptions;

/**
 * Makes assertions about the JSON:API behavior for internal entities.
 *
 * @group jsonapi
 *
 * @internal
 */
class EntryPointTest extends BrowserTestBase {
    use JsonApiRequestTestTrait;
    use UserCreationTrait;
    
    /**
     * {@inheritdoc}
     */
    protected static $modules = [
        'node',
        'jsonapi',
        'basic_auth',
    ];
    
    /**
     * {@inheritdoc}
     */
    protected $defaultTheme = 'stark';
    
    /**
     * Test GET to the entry point.
     */
    public function testEntryPoint() {
        $request_options = [];
        $request_options[RequestOptions::HEADERS]['Accept'] = 'application/vnd.api+json';
        $response = $this->request('GET', Url::fromUri('base://jsonapi'), $request_options);
        $document = Json::decode((string) $response->getBody());
        $expected_cache_contexts = [
            'url.site',
            'user.roles:authenticated',
        ];
        $this->assertTrue($response->hasHeader('X-Drupal-Cache-Contexts'));
        $optimized_expected_cache_contexts = \Drupal::service('cache_contexts_manager')->optimizeTokens($expected_cache_contexts);
        $this->assertSame($optimized_expected_cache_contexts, explode(' ', $response->getHeader('X-Drupal-Cache-Contexts')[0]));
        $links = $document['links'];
        $this->assertMatchesRegularExpression('/.*\\/jsonapi/', $links['self']['href']);
        $this->assertMatchesRegularExpression('/.*\\/jsonapi\\/user\\/user/', $links['user--user']['href']);
        $this->assertMatchesRegularExpression('/.*\\/jsonapi\\/node_type\\/node_type/', $links['node_type--node_type']['href']);
        $this->assertArrayNotHasKey('meta', $document);
        // A `me` link must be present for authenticated users.
        $user = $this->createUser();
        $request_options[RequestOptions::HEADERS]['Authorization'] = 'Basic ' . base64_encode($user->name->value . ':' . $user->passRaw);
        $response = $this->request('GET', Url::fromUri('base://jsonapi'), $request_options);
        $document = Json::decode((string) $response->getBody());
        $this->assertArrayHasKey('meta', $document);
        $this->assertStringEndsWith('/jsonapi/user/user/' . $user->uuid(), $document['meta']['links']['me']['href']);
    }

}

Classes

Title Deprecated Summary
EntryPointTest Makes assertions about the JSON:API behavior for internal entities.

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