function CKEditorIntegrationTest::testConfigurationValidation

Tests validation that DrupalMediaLibrary requires media_embed filter.

File

core/modules/media_library/tests/src/FunctionalJavascript/CKEditorIntegrationTest.php, line 147

Class

CKEditorIntegrationTest
@coversDefaultClass \Drupal\media_library\Plugin\CKEditorPlugin\DrupalMediaLibrary @group media_library

Namespace

Drupal\Tests\media_library\FunctionalJavascript

Code

public function testConfigurationValidation() {
    $page = $this->getSession()
        ->getPage();
    $assert_session = $this->assertSession();
    $admin_user = $this->drupalCreateUser([
        'access administration pages',
        'administer site configuration',
        'administer filters',
    ]);
    $this->drupalLogin($admin_user);
    $this->drupalGet('/admin/config/content/formats/manage/test_format');
    $page->uncheckField('filters[media_embed][status]');
    $page->pressButton('Save configuration');
    $assert_session->pageTextContains('The Embed media filter must be enabled to use the Insert from Media Library button.');
    $page->checkField('filters[media_embed][status]');
    $page->pressButton('Save configuration');
    $assert_session->pageTextContains('The text format Test format has been updated.');
    // Now test adding a new format.
    $this->drupalGet('/admin/config/content/formats/add');
    $page->fillField('name', 'Sulaco');
    // Wait for machine name to be filled in.
    $this->assertNotEmpty($assert_session->waitForText('sulaco'));
    $page->checkField('roles[authenticated]');
    $page->selectFieldOption('editor[editor]', 'ckeditor');
    $targetSelector = 'ul.ckeditor-toolbar-group-buttons';
    $buttonSelector = 'li[data-drupal-ckeditor-button-name="DrupalMediaLibrary"]';
    $this->assertNotEmpty($target = $assert_session->waitForElementVisible('css', $targetSelector));
    $this->assertNotEmpty($button = $assert_session->elementExists('css', $buttonSelector));
    $this->sortableTo($buttonSelector, 'ul.ckeditor-available-buttons', $targetSelector);
    $page->pressButton('Save configuration');
    $assert_session->pageTextContains('The Embed media filter must be enabled to use the Insert from Media Library button.');
    $page->checkField('filters[media_embed][status]');
    $page->pressButton('Save configuration');
    $assert_session->pageTextContains('Added text format Sulaco.');
    // Test that when adding the DrupalMediaLibrary button to the editor the
    // correct attributes are added to the <drupal-media> tag in the Allowed
    // HTML tags.
    $this->drupalGet('/admin/config/content/formats/manage/sulaco');
    $page->checkField('filters[filter_html][status]');
    $expected = 'drupal-media data-entity-type data-entity-uuid data-view-mode data-align data-caption alt title';
    $allowed_html = $assert_session->fieldExists('filters[filter_html][settings][allowed_html]')
        ->getValue();
    $this->assertStringContainsString($expected, $allowed_html);
    $page->pressButton('Save configuration');
    $assert_session->pageTextContains('The text format Sulaco has been updated.');
    // Test that the config form allows removing non-required attributes from
    // the <drupal-media> tag.
    $this->drupalGet('/admin/config/content/formats/manage/sulaco');
    $allowed_html_field = $assert_session->fieldExists('filters[filter_html][settings][allowed_html]');
    $allowed_html = $allowed_html_field->getValue();
    $search = 'drupal-media data-entity-type data-entity-uuid data-view-mode data-align data-caption alt title';
    $replace = 'drupal-media data-entity-type data-entity-uuid';
    $allowed_html = str_replace($search, $replace, $allowed_html);
    $page->clickLink('Limit allowed HTML tags and correct faulty HTML');
    $this->assertTrue($allowed_html_field->waitFor(10, function ($allowed_html_field) {
        return $allowed_html_field->isVisible();
    }));
    $allowed_html_field->setValue($allowed_html);
    $page->pressButton('Save configuration');
    $assert_session->pageTextContains('The text format Sulaco has been updated.');
}

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