Chris@18
|
1 <?php
|
Chris@18
|
2
|
Chris@18
|
3 namespace Drupal\Tests\jsonapi\Functional;
|
Chris@18
|
4
|
Chris@18
|
5 use Drupal\Component\Serialization\Json;
|
Chris@18
|
6 use Drupal\Core\Url;
|
Chris@18
|
7 use Drupal\Tests\BrowserTestBase;
|
Chris@18
|
8 use Drupal\Tests\user\Traits\UserCreationTrait;
|
Chris@18
|
9 use GuzzleHttp\RequestOptions;
|
Chris@18
|
10
|
Chris@18
|
11 /**
|
Chris@18
|
12 * Makes assertions about the JSON:API behavior for internal entities.
|
Chris@18
|
13 *
|
Chris@18
|
14 * @group jsonapi
|
Chris@18
|
15 *
|
Chris@18
|
16 * @internal
|
Chris@18
|
17 */
|
Chris@18
|
18 class EntryPointTest extends BrowserTestBase {
|
Chris@18
|
19
|
Chris@18
|
20 use JsonApiRequestTestTrait;
|
Chris@18
|
21 use UserCreationTrait;
|
Chris@18
|
22
|
Chris@18
|
23 /**
|
Chris@18
|
24 * {@inheritdoc}
|
Chris@18
|
25 */
|
Chris@18
|
26 protected static $modules = [
|
Chris@18
|
27 'node',
|
Chris@18
|
28 'jsonapi',
|
Chris@18
|
29 'basic_auth',
|
Chris@18
|
30 ];
|
Chris@18
|
31
|
Chris@18
|
32 /**
|
Chris@18
|
33 * Test GETing the entry point.
|
Chris@18
|
34 */
|
Chris@18
|
35 public function testEntryPoint() {
|
Chris@18
|
36 $request_options = [];
|
Chris@18
|
37 $request_options[RequestOptions::HEADERS]['Accept'] = 'application/vnd.api+json';
|
Chris@18
|
38 $response = $this->request('GET', Url::fromUri('base://jsonapi'), $request_options);
|
Chris@18
|
39 $document = Json::decode((string) $response->getBody());
|
Chris@18
|
40 $expected_cache_contexts = [
|
Chris@18
|
41 'url.site',
|
Chris@18
|
42 'user.roles:authenticated',
|
Chris@18
|
43 ];
|
Chris@18
|
44 $this->assertTrue($response->hasHeader('X-Drupal-Cache-Contexts'));
|
Chris@18
|
45 $optimized_expected_cache_contexts = \Drupal::service('cache_contexts_manager')->optimizeTokens($expected_cache_contexts);
|
Chris@18
|
46 $this->assertSame($optimized_expected_cache_contexts, explode(' ', $response->getHeader('X-Drupal-Cache-Contexts')[0]));
|
Chris@18
|
47 $links = $document['links'];
|
Chris@18
|
48 $this->assertRegExp('/.*\/jsonapi/', $links['self']['href']);
|
Chris@18
|
49 $this->assertRegExp('/.*\/jsonapi\/user\/user/', $links['user--user']['href']);
|
Chris@18
|
50 $this->assertRegExp('/.*\/jsonapi\/node_type\/node_type/', $links['node_type--node_type']['href']);
|
Chris@18
|
51 $this->assertArrayNotHasKey('meta', $document);
|
Chris@18
|
52
|
Chris@18
|
53 // A `me` link must be present for authenticated users.
|
Chris@18
|
54 $user = $this->createUser();
|
Chris@18
|
55 $request_options[RequestOptions::HEADERS]['Authorization'] = 'Basic ' . base64_encode($user->name->value . ':' . $user->passRaw);
|
Chris@18
|
56 $response = $this->request('GET', Url::fromUri('base://jsonapi'), $request_options);
|
Chris@18
|
57 $document = Json::decode((string) $response->getBody());
|
Chris@18
|
58 $this->assertArrayHasKey('meta', $document);
|
Chris@18
|
59 $this->assertStringEndsWith('/jsonapi/user/user/' . $user->uuid(), $document['meta']['links']['me']['href']);
|
Chris@18
|
60 }
|
Chris@18
|
61
|
Chris@18
|
62 }
|