You are here

public function ApiTest::testAllowed in Lightning API 8.4

Same name and namespace in other branches
  1. 8.3 tests/src/Functional/ApiTest.php \Drupal\Tests\lightning_api\Functional\ApiTest::testAllowed()

Tests Getting data as anon and authenticated user.

File

tests/src/Functional/ApiTest.php, line 228

Class

ApiTest
Tests that OAuth and JSON:API authenticate and authorize entity operations.

Namespace

Drupal\Tests\lightning_api\Functional

Code

public function testAllowed() {
  $this
    ->createContentType([
    'type' => 'page',
  ]);

  // Create some sample content for testing. One published and one unpublished
  // basic page.
  $published_node = $this
    ->drupalCreateNode();
  $unpublished_node = $published_node
    ->createDuplicate()
    ->setUnpublished();
  $unpublished_node
    ->save();

  // Get data that is available anonymously.
  $response = $this
    ->request('/jsonapi/node/page/' . $published_node
    ->uuid());
  $this
    ->assertSame(200, $response
    ->getStatusCode());
  $body = $this
    ->decodeResponse($response);
  $this
    ->assertSame($published_node
    ->getTitle(), $body['data']['attributes']['title']);

  // Get data that requires authentication.
  $access_token = $this
    ->getCreator('page');
  $response = $this
    ->request('/jsonapi/node/page/' . $unpublished_node
    ->uuid(), 'get', $access_token);
  $this
    ->assertSame(200, $response
    ->getStatusCode());
  $body = $this
    ->decodeResponse($response);
  $this
    ->assertSame($unpublished_node
    ->getTitle(), $body['data']['attributes']['title']);

  // Post new content that requires authentication.
  $count = (int) \Drupal::entityQuery('node')
    ->count()
    ->execute();
  $this
    ->request('/jsonapi/node/page', 'post', $access_token, [
    'data' => [
      'type' => 'node--page',
      'attributes' => [
        'title' => 'With my own two hands',
      ],
    ],
  ]);
  $this
    ->assertSame(++$count, (int) \Drupal::entityQuery('node')
    ->count()
    ->execute());
}