annotate core/modules/jsonapi/tests/src/Functional/EntryPointTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents af1871eacc83
children
rev   line source
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 }