function MediaEntityMetadataApiTest::testApi

Same name and namespace in other branches
  1. 9 core/modules/ckeditor5/tests/src/Functional/MediaEntityMetadataApiTest.php \Drupal\Tests\ckeditor5\Functional\MediaEntityMetadataApiTest::testApi()
  2. 11.x core/modules/ckeditor5/tests/src/Functional/MediaEntityMetadataApiTest.php \Drupal\Tests\ckeditor5\Functional\MediaEntityMetadataApiTest::testApi()

Tests the media entity metadata API.

File

core/modules/ckeditor5/tests/src/Functional/MediaEntityMetadataApiTest.php, line 215

Class

MediaEntityMetadataApiTest
Tests the media entity metadata API.

Namespace

Drupal\Tests\ckeditor5\Functional

Code

public function testApi() : void {
  $path = '/ckeditor5/filtered_html/media-entity-metadata';
  $token = $this->container
    ->get('csrf_token')
    ->get(ltrim($path, '/'));
  $uuid = $this->mediaImage
    ->uuid();
  $this->drupalGet($path, [
    'query' => [
      'token' => $token,
    ],
  ]);
  $this->assertSession()
    ->statusCodeEquals(400);
  $this->drupalGet($path, [
    'query' => [
      'uuid' => $uuid,
      'token' => $token,
    ],
  ]);
  $this->assertSession()
    ->statusCodeEquals(200);
  $this->assertSame(json_encode([
    "type" => "image",
    'imageSourceMetadata' => [
      'alt' => 'default alt',
    ],
  ]), $this->getSession()
    ->getPage()
    ->getContent());
  $this->mediaImage
    ->set('field_media_image', [
    'target_id' => 1,
    'alt' => '',
    'title' => 'default title',
  ])
    ->save();
  $this->drupalGet($path, [
    'query' => [
      'uuid' => $uuid,
      'token' => $token,
    ],
  ]);
  $this->assertSession()
    ->statusCodeEquals(200);
  $this->assertSame(json_encode([
    'type' => 'image',
    'imageSourceMetadata' => [
      'alt' => '',
    ],
  ]), $this->getSession()
    ->getPage()
    ->getContent());
  // Test that setting the media image field to not display alt field also
  // omits it from the API (which will in turn instruct the CKE5 plugin to not
  // show it).
  FieldConfig::loadByName('media', 'image', 'field_media_image')->setSetting('alt_field', FALSE)
    ->save();
  $this->drupalGet($path, [
    'query' => [
      'uuid' => $uuid,
      'token' => $token,
    ],
  ]);
  $this->assertSession()
    ->statusCodeEquals(200);
  $this->assertSame(json_encode([
    'type' => 'image',
  ]), $this->getSession()
    ->getPage()
    ->getContent());
  $this->drupalGet($path, [
    'query' => [
      'uuid' => $this->mediaFile
        ->uuid(),
      'token' => $token,
    ],
  ]);
  $this->assertSession()
    ->statusCodeEquals(200);
  $this->assertSame(json_encode([
    'type' => 'file',
  ]), $this->getSession()
    ->getPage()
    ->getContent());
  // Ensure that unpublished media returns 403.
  $this->mediaImage
    ->setUnpublished()
    ->save();
  $this->drupalGet($path, [
    'query' => [
      'uuid' => $uuid,
      'token' => $token,
    ],
  ]);
  $this->assertSession()
    ->statusCodeEquals(403);
  // Ensure that valid, but non-existing UUID returns 404.
  $this->drupalGet($path, [
    'query' => [
      'uuid' => $this->uuidService
        ->generate(),
      'token' => $token,
    ],
  ]);
  $this->assertSession()
    ->statusCodeEquals(404);
  // Ensure that invalid UUID returns 400.
  $this->drupalGet($path, [
    'query' => [
      'uuid' => '🦙',
      'token' => $token,
    ],
  ]);
  $this->assertSession()
    ->statusCodeEquals(400);
  // Ensure that users that don't have access to the filter format receive
  // either 404 or 403.
  $this->drupalLogout();
  $token = $this->container
    ->get('csrf_token')
    ->get(ltrim($path, '/'));
  $this->drupalGet($path, [
    'token' => $token,
  ]);
  $this->assertSession()
    ->statusCodeEquals(400);
  $this->drupalGet($path, [
    'query' => [
      'uuid' => $uuid,
      'token' => $token,
    ],
  ]);
  $this->assertSession()
    ->statusCodeEquals(403);
  $this->mediaImage
    ->setPublished()
    ->save();
  $this->drupalGet($path, [
    'query' => [
      'uuid' => $uuid,
      'token' => $token,
    ],
  ]);
  $this->assertSession()
    ->statusCodeEquals(403);
}

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