View source
<?php
namespace Drupal\Tests\editor_advanced_image\FunctionalJavascript;
use Drupal\Core\Entity\Entity\EntityFormDisplay;
use Drupal\editor\Entity\Editor;
use Drupal\field\Entity\FieldConfig;
use Drupal\field\Entity\FieldStorageConfig;
use Drupal\filter\Entity\FilterFormat;
use Drupal\node\Entity\NodeType;
use Drupal\Tests\ckeditor\Traits\CKEditorTestTrait;
class UiDialogTest extends UiTestBase {
use CKEditorTestTrait;
public static $modules = [
'filter',
'editor',
'ckeditor',
'editor_advanced_image',
];
protected $profile = 'minimal';
protected $adminUser;
protected $editor;
protected $editorFilterFormat;
protected function setUp() {
parent::setUp();
$this->editorFilterFormat = FilterFormat::create([
'format' => 'full_html',
'name' => 'Full HTML',
'weight' => 0,
'filters' => [],
]);
$this->editorFilterFormat
->save();
$this->editor = Editor::create([
'format' => 'full_html',
'editor' => 'ckeditor',
]);
$settings['toolbar']['rows'] = [
[
[
'name' => 'Image',
'items' => [
'DrupalImage',
],
],
],
];
$this->editor
->setSettings($settings);
$this->editor
->save();
NodeType::create([
'type' => 'page',
'name' => 'page',
])
->save();
$field_storage = FieldStorageConfig::loadByName('node', 'body');
FieldConfig::create([
'field_storage' => $field_storage,
'bundle' => 'page',
'label' => 'Body',
'settings' => [
'display_summary' => TRUE,
],
'required' => TRUE,
])
->save();
EntityFormDisplay::create([
'targetEntityType' => 'node',
'bundle' => 'page',
'mode' => 'default',
'status' => TRUE,
])
->setComponent('body', [
'type' => 'text_textarea_with_summary',
])
->save();
$this->adminUser = $this
->drupalCreateUser([
'administer nodes',
'create page content',
'use text format full_html',
]);
}
public function testNodeAddPageReachable() {
$this
->drupalLogin($this->adminUser);
$this
->drupalGet('node/add/page');
$this
->assertSession()
->elementExists('css', 'form.node-page-form');
}
public function testImageBaseDialogWorks() {
$this
->drupalLogin($this->adminUser);
$this
->drupalGet('node/add/page');
$this
->assertElementPresent('#cke_edit-body-0-value .cke_button__drupalimage');
$this
->clickOnElement('css', '.cke_button__drupalimage');
$this
->assertSession()
->assertWaitOnAjaxRequest();
$this
->assertElementPresent('.ui-dialog');
$this
->assertSession()
->elementContains('css', '.ui-dialog .ui-dialog-titlebar', 'Insert Image');
}
public function testFilterHtmlDisable() {
$this->editorFilterFormat
->setFilterConfig('filter_html', [
'status' => 0,
]);
$this->editorFilterFormat
->save();
$this
->testImageBaseDialogWorks();
$this
->assertElementPresent('.ui-dialog .form-item-attributes-title');
$this
->assertElementPresent('.ui-dialog .form-item-attributes-class');
$this
->assertElementPresent('.ui-dialog .form-item-attributes-id');
}
public function testFilterHtmlEnable() {
$this->editorFilterFormat
->setFilterConfig('filter_html', [
'status' => 1,
'settings' => [
'allowed_html' => '<img src alt data-entity-type data-entity-uuid data-align data-caption>',
],
]);
$this->editorFilterFormat
->save();
$this
->testImageBaseDialogWorks();
$this
->assertElementNotPresent('.ui-dialog .form-item-attributes-title');
$this
->assertElementNotPresent('.ui-dialog .form-item-attributes-class');
$this
->assertElementNotPresent('.ui-dialog .form-item-attributes-id');
$this->editorFilterFormat
->setFilterConfig('filter_html', [
'status' => 1,
'settings' => [
'allowed_html' => '<img src alt data-entity-type data-entity-uuid data-align data-caption title>',
],
]);
$this->editorFilterFormat
->save();
$this
->testImageBaseDialogWorks();
$this
->assertElementPresent('.ui-dialog .form-item-attributes-title');
$this
->assertElementNotPresent('.ui-dialog .form-item-attributes-class');
$this
->assertElementNotPresent('.ui-dialog .form-item-attributes-id');
$this->editorFilterFormat
->setFilterConfig('filter_html', [
'status' => 1,
'settings' => [
'allowed_html' => '<img src alt data-entity-type data-entity-uuid data-align data-caption class>',
],
]);
$this->editorFilterFormat
->save();
$this
->testImageBaseDialogWorks();
$this
->assertElementNotPresent('.ui-dialog .form-item-attributes-title');
$this
->assertElementPresent('.ui-dialog .form-item-attributes-class');
$this
->assertElementNotPresent('.ui-dialog .form-item-attributes-id');
$this->editorFilterFormat
->setFilterConfig('filter_html', [
'status' => 1,
'settings' => [
'allowed_html' => '<img src alt data-entity-type data-entity-uuid data-align data-caption id>',
],
]);
$this->editorFilterFormat
->save();
$this
->testImageBaseDialogWorks();
$this
->assertElementNotPresent('.ui-dialog .form-item-attributes-title');
$this
->assertElementNotPresent('.ui-dialog .form-item-attributes-class');
$this
->assertElementPresent('.ui-dialog .form-item-attributes-id');
$this->editorFilterFormat
->setFilterConfig('filter_html', [
'status' => 1,
'settings' => [
'allowed_html' => '<img src alt data-entity-type data-entity-uuid data-align data-caption class id title>',
],
]);
$this->editorFilterFormat
->save();
$this
->testImageBaseDialogWorks();
$this
->assertElementPresent('.ui-dialog .form-item-attributes-title');
$this
->assertElementPresent('.ui-dialog .form-item-attributes-class');
$this
->assertElementPresent('.ui-dialog .form-item-attributes-id');
}
public function testDefaultClass() {
$this->editorFilterFormat
->setFilterConfig('filter_html', [
'status' => 0,
]);
$this->editorFilterFormat
->save();
$settings = [
'toolbar' => [
'rows' => [
[
[
'name' => 'Image',
'items' => [
'DrupalImage',
],
],
],
],
],
'plugins' => [
'editoradvancedimage' => [
'default_class' => 'test-default-class',
],
],
];
$this->editor
->setSettings($settings);
$this->editor
->save();
$this
->testImageBaseDialogWorks();
$this
->assertElementPresent('.ui-dialog .form-item-attributes-class');
$this
->assertSession()
->elementContains('css', '.ui-dialog .form-item-attributes-class', 'Default: <code>test-default-class</code>');
}
public function testWhenImageNotEnabled() {
$settings = [
'toolbar' => [
'rows' => [
[
[
'name' => 'All the things',
'items' => [
'Source',
'Bold',
'Italic',
'DrupalLink',
'DrupalUnlink',
],
],
],
],
],
'plugins' => [],
];
$this->editor
->setSettings($settings);
$this->editor
->save();
$this
->drupalLogin($this->adminUser);
$this
->drupalGet('node/add/page');
$this
->waitForEditor();
$this
->assignNameToCkeditorIframe();
$this
->getSession()
->switchToIFrame('ckeditor');
$assert_session = $this
->assertSession();
$this
->assertTrue($assert_session
->waitForElementVisible('css', '.cke_editable', 1000));
}
}