function CKEditor5DialogTest::testOpenDialogSettings

Same name and namespace in other branches
  1. main core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5DialogTest.php \Drupal\Tests\ckeditor5\FunctionalJavascript\CKEditor5DialogTest::testOpenDialogSettings()

Tests that openDialog() applies defaults only when settings are undefined.

File

core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5DialogTest.php, line 95

Class

CKEditor5DialogTest
Tests for CKEditor 5 dialog behavior.

Namespace

Drupal\Tests\ckeditor5\FunctionalJavascript

Code

public function testOpenDialogSettings() : void {
  FilterFormat::create([
    'format' => 'ckeditor5',
    'name' => 'CKEditor 5',
    'roles' => [
      RoleInterface::AUTHENTICATED_ID,
    ],
  ])->save();
  Editor::create([
    'format' => 'ckeditor5',
    'editor' => 'ckeditor5',
    'image_upload' => [
      'status' => FALSE,
    ],
    'settings' => [
      'toolbar' => [
        'items' => [
          'link',
        ],
      ],
    ],
  ])->save();
  $this->assertSame([], array_map(function (ConstraintViolationInterface $v) : string {
    return (string) $v->getMessage();
  }, iterator_to_array(CKEditor5::validatePair(Editor::load('ckeditor5'), FilterFormat::load('ckeditor5')))));
  $this->drupalGet('/node/add/page');
  $this->waitForEditor();
  // When neither width nor autoResize is set, defaults should be applied.
  $result = $this->getSession()
    ->evaluateScript(<<<JS
    (function() {
      let captured = null;
      const originalAjax = Drupal.ajax;
      Drupal.ajax = function(settings) { captured = settings; return { execute: function() {} }; };
      Drupal.ckeditor5.openDialog('/test', function() {}, {});
      Drupal.ajax = originalAjax;
      return { width: captured.dialog.width, autoResizeType: typeof captured.dialog.autoResize };
    })()
  JS);
  $this->assertSame('auto', $result['width']);
  $this->assertSame('boolean', $result['autoResizeType']);
  // A pre-defined width must not be overwritten by the 'auto' default.
  $result = $this->getSession()
    ->evaluateScript(<<<JS
    (function() {
      let captured = null;
      const originalAjax = Drupal.ajax;
      Drupal.ajax = function(settings) { captured = settings; return { execute: function() {} }; };
      Drupal.ckeditor5.openDialog('/test', function() {}, { width: '500px' });
      Drupal.ajax = originalAjax;
      return captured.dialog.width;
    })()
  JS);
  $this->assertSame('500px', $result);
  // A pre-defined autoResize: false must not be overwritten.
  $result = $this->getSession()
    ->evaluateScript(<<<JS
    (function() {
      let captured = null;
      const originalAjax = Drupal.ajax;
      Drupal.ajax = function(settings) { captured = settings; return { execute: function() {} }; };
      Drupal.ckeditor5.openDialog('/test', function() {}, { autoResize: false });
      Drupal.ajax = originalAjax;
      return captured.dialog.autoResize;
    })()
  JS);
  $this->assertFalse($result);
  // A pre-defined autoResize: true must not be overwritten.
  $result = $this->getSession()
    ->evaluateScript(<<<JS
    (function() {
      let captured = null;
      const originalAjax = Drupal.ajax;
      Drupal.ajax = function(settings) { captured = settings; return { execute: function() {} }; };
      Drupal.ckeditor5.openDialog('/test', function() {}, { autoResize: true });
      Drupal.ajax = originalAjax;
      return captured.dialog.autoResize;
    })()
  JS);
  $this->assertTrue($result);
  // The ui-dialog--narrow class must always be appended, even alongside
  // custom existing classes.
  $result = $this->getSession()
    ->evaluateScript(<<<JS
    (function() {
      let captured = null;
      const originalAjax = Drupal.ajax;
      Drupal.ajax = function(settings) { captured = settings; return { execute: function() {} }; };
      Drupal.ckeditor5.openDialog('/test', function() {}, { classes: { 'ui-dialog': 'my-custom-class' } });
      Drupal.ajax = originalAjax;
      return captured.dialog.classes['ui-dialog'];
    })()
  JS);
  $this->assertStringContainsString('ui-dialog--narrow', $result);
  $this->assertStringContainsString('my-custom-class', $result);
}

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