You are here

public function CKEditor5AllowedTagsTest::testMediaElementAllowedTags in Drupal 10

Test that <drupal-media> is added to allowed tags when media embed enabled.

File

core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5AllowedTagsTest.php, line 366

Class

CKEditor5AllowedTagsTest
Tests for CKEditor5.

Namespace

Drupal\Tests\ckeditor5\FunctionalJavascript

Code

public function testMediaElementAllowedTags() {
  $page = $this
    ->getSession()
    ->getPage();
  $assert_session = $this
    ->assertSession();
  $this
    ->createNewTextFormat($page, $assert_session);
  EntityViewMode::create([
    'id' => 'media.view_mode_1',
    'targetEntityType' => 'media',
    'status' => TRUE,
    'enabled' => TRUE,
    'label' => 'View Mode 1',
  ])
    ->save();
  EntityViewMode::create([
    'id' => 'media.view_mode_2',
    'targetEntityType' => 'media',
    'status' => TRUE,
    'enabled' => TRUE,
    'label' => 'View Mode 2',
  ])
    ->save();

  // Allowed HTML field is readonly and its wrapper has a form-disabled class.
  $this
    ->assertNotEmpty($assert_session
    ->waitForElement('css', '.js-form-item-filters-filter-html-settings-allowed-html.form-disabled'));
  $allowed_html_field = $assert_session
    ->fieldExists('filters[filter_html][settings][allowed_html]');
  $this
    ->assertTrue($allowed_html_field
    ->hasAttribute('readonly'));

  // Allowed tags are currently the default, with no <drupal-media>.
  $this
    ->assertEquals($this->allowedElements, $allowed_html_field
    ->getValue());

  // Enable media embed.
  $this
    ->assertTrue($page
    ->hasUncheckedField('filters[media_embed][status]'));
  $page
    ->checkField('filters[media_embed][status]');
  $assert_session
    ->assertWaitOnAjaxRequest();
  $assert_session
    ->responseContains('Media types selectable in the Media Library');
  $page
    ->clickLink('Embed media');
  $page
    ->checkField('filters[media_embed][settings][allowed_view_modes][view_mode_1]');
  $page
    ->checkField('filters[media_embed][settings][allowed_view_modes][view_mode_2]');
  $assert_session
    ->assertWaitOnAjaxRequest();
  $allowed_with_media = $this->allowedElements . ' <drupal-media data-entity-type data-entity-uuid alt data-view-mode>';
  $allowed_with_media_without_view_mode = $this->allowedElements . ' <drupal-media data-entity-type data-entity-uuid alt>';
  $assert_session
    ->responseContains('Media types selectable in the Media Library');
  $page
    ->clickLink('Media');
  $assert_session
    ->waitForText('Allow the user to override the default view mode');
  $this
    ->assertTrue($page
    ->hasUncheckedField('editor[settings][plugins][media_media][allow_view_mode_override]'));
  $this
    ->assertHtmlEsqueFieldValueEquals('filters[filter_html][settings][allowed_html]', $allowed_with_media_without_view_mode);
  $page
    ->checkField('editor[settings][plugins][media_media][allow_view_mode_override]');
  $assert_session
    ->assertWaitOnAjaxRequest();
  $this
    ->assertHtmlEsqueFieldValueEquals('filters[filter_html][settings][allowed_html]', $allowed_with_media);
  $this
    ->saveNewTextFormat($page, $assert_session);
  $assert_session
    ->pageTextContains('Added text format ckeditor5.');

  // Confirm <drupal-media> was added to allowed tags on save, as a result of
  // enabling the media embed filter.
  $this
    ->assertSame($allowed_with_media, FilterFormat::load('ckeditor5')
    ->filters('filter_html')
    ->getConfiguration()['settings']['allowed_html']);
  $page
    ->find('css', '[data-drupal-selector="edit-formats-ckeditor5"]')
    ->clickLink('Configure');

  // Confirm that <drupal-media> is now included in the "Allowed tags" form
  // field.
  $this
    ->assertHtmlEsqueFieldValueEquals('filters[filter_html][settings][allowed_html]', $allowed_with_media);

  // Ensure that data-align attribute is added to <drupal-media> when
  // filter_align is enabled.
  $page
    ->checkField('filters[filter_align][status]');
  $assert_session
    ->assertWaitOnAjaxRequest();
  $this
    ->assertEquals($this->allowedElements . ' <drupal-media data-entity-type data-entity-uuid alt data-view-mode data-align>', $allowed_html_field
    ->getValue());

  // Disable media embed.
  $this
    ->assertTrue($page
    ->hasCheckedField('filters[media_embed][status]'));
  $page
    ->uncheckField('filters[media_embed][status]');
  $assert_session
    ->assertWaitOnAjaxRequest();

  // Confirm allowed tags no longer has <drupal-media>.
  $this
    ->assertHtmlEsqueFieldValueEquals('filters[filter_html][settings][allowed_html]', $this->allowedElements);
}