function SmartDefaultSettingsTest::setUp

Same name in other branches
  1. 10 core/modules/ckeditor5/tests/src/Kernel/SmartDefaultSettingsTest.php \Drupal\Tests\ckeditor5\Kernel\SmartDefaultSettingsTest::setUp()
  2. 11.x core/modules/ckeditor5/tests/src/Kernel/SmartDefaultSettingsTest.php \Drupal\Tests\ckeditor5\Kernel\SmartDefaultSettingsTest::setUp()

Overrides KernelTestBase::setUp

File

core/modules/ckeditor5/tests/src/Kernel/SmartDefaultSettingsTest.php, line 85

Class

SmartDefaultSettingsTest
@covers \Drupal\ckeditor5\SmartDefaultSettings::computeSmartDefaultSettings() @group ckeditor5 @internal

Namespace

Drupal\Tests\ckeditor5\Kernel

Code

protected function setUp() : void {
    parent::setUp();
    $this->manager = $this->container
        ->get('plugin.manager.ckeditor5.plugin');
    $this->typedConfig = $this->container
        ->get('config.typed');
    $this->smartDefaultSettings = $this->container
        ->get('ckeditor5.smart_default_settings');
    $this->database = $this->container
        ->get('database');
    $this->installSchema('dblog', [
        'watchdog',
    ]);
    FilterFormat::create([
        'format' => 'minimal_ckeditor_wrong_allowed_html',
        'name' => 'Most basic HTML, but with allowed_html misconfigured',
        'filters' => [
            'filter_html' => [
                'status' => 1,
                'settings' => [
                    // Misconfiguration aspects:
                    // 1. `<a>`, not `<a href>`, while `DrupalLink` is enabled
                    // 2. `<p style>` even though `style` is globally disallowed by
                    //    filter_html
                    // 3. `<a onclick>` even though `on*` is globally disallowed by
                    //    filter_html
'allowed_html' => '<p style> <br> <a onclick>',
                ],
            ],
        ],
    ])->setSyncing(TRUE)
        ->save();
    Editor::create([
        'format' => 'minimal_ckeditor_wrong_allowed_html',
        'editor' => 'ckeditor',
        'settings' => [
            'toolbar' => [
                'rows' => [
                    0 => [
                        [
                            'name' => 'Basic Formatting',
                            'items' => [
                                'DrupalLink',
                            ],
                        ],
                    ],
                ],
            ],
            'plugins' => [],
        ],
    ])->setSyncing(TRUE)
        ->save();
    FilterFormat::create(Yaml::parseFile('core/modules/ckeditor5/tests/fixtures/ckeditor4_config/filter.format.full_html.yml'))->setSyncing(TRUE)
        ->save();
    Editor::create(Yaml::parseFile('core/modules/ckeditor5/tests/fixtures/ckeditor4_config/editor.editor.full_html.yml'))->setSyncing(TRUE)
        ->save();
    $basic_html_format = Yaml::parseFile('core/modules/ckeditor5/tests/fixtures/ckeditor4_config/filter.format.basic_html.yml');
    FilterFormat::create($basic_html_format)->setSyncing(TRUE)
        ->save();
    Editor::create(Yaml::parseFile('core/modules/ckeditor5/tests/fixtures/ckeditor4_config/editor.editor.basic_html.yml'))->setSyncing(TRUE)
        ->save();
    FilterFormat::create(Yaml::parseFile('core/modules/ckeditor5/tests/fixtures/ckeditor4_config/filter.format.restricted_html.yml'))->setSyncing(TRUE)
        ->save();
    $basic_html_format_without_image_uploads = $basic_html_format;
    $basic_html_format_without_image_uploads['name'] .= ' (without image uploads)';
    $basic_html_format_without_image_uploads['format'] = 'basic_html_without_image_uploads';
    FilterFormat::create($basic_html_format_without_image_uploads)->save();
    Editor::create([
        'format' => 'basic_html_without_image_uploads',
    ] + Yaml::parseFile('core/modules/ckeditor5/tests/fixtures/ckeditor4_config/editor.editor.basic_html.yml'))->setImageUploadSettings([
        'status' => FALSE,
    ])
        ->setSyncing(TRUE)
        ->save();
    $allowed_html_parents = [
        'filters',
        'filter_html',
        'settings',
        'allowed_html',
    ];
    $current_value = NestedArray::getValue($basic_html_format, $allowed_html_parents);
    $new_value = str_replace([
        '<h4 id> ',
        '<h6 id> ',
    ], '', $current_value);
    $basic_html_format_without_h4_h6 = $basic_html_format;
    $basic_html_format_without_h4_h6['name'] .= ' (without H4 and H6)';
    $basic_html_format_without_h4_h6['format'] = 'basic_html_without_h4_h6';
    NestedArray::setValue($basic_html_format_without_h4_h6, $allowed_html_parents, $new_value);
    FilterFormat::create($basic_html_format_without_h4_h6)->setSyncing(TRUE)
        ->save();
    Editor::create([
        'format' => 'basic_html_without_h4_h6',
    ] + Yaml::parseFile('core/modules/ckeditor5/tests/fixtures/ckeditor4_config/editor.editor.basic_html.yml'))->setSyncing(TRUE)
        ->save();
    $new_value = str_replace([
        '<h2 id> ',
        '<h3 id> ',
        '<h4 id> ',
        '<h5 id> ',
        '<h6 id> ',
    ], '', $current_value);
    $basic_html_format_without_headings = $basic_html_format;
    $basic_html_format_without_headings['name'] .= ' (without H*)';
    $basic_html_format_without_headings['format'] = 'basic_html_without_headings';
    NestedArray::setValue($basic_html_format_without_headings, $allowed_html_parents, $new_value);
    FilterFormat::create($basic_html_format_without_headings)->setSyncing(TRUE)
        ->save();
    Editor::create([
        'format' => 'basic_html_without_headings',
    ] + Yaml::parseFile('core/modules/ckeditor5/tests/fixtures/ckeditor4_config/editor.editor.basic_html.yml'))->setSyncing(TRUE)
        ->save();
    $basic_html_format_with_pre = $basic_html_format;
    $basic_html_format_with_pre['name'] .= ' (with <pre>)';
    $basic_html_format_with_pre['format'] = 'basic_html_with_pre';
    NestedArray::setValue($basic_html_format_with_pre, $allowed_html_parents, $current_value . ' <pre>');
    FilterFormat::create($basic_html_format_with_pre)->setSyncing(TRUE)
        ->save();
    Editor::create([
        'format' => 'basic_html_with_pre',
    ] + Yaml::parseFile('core/modules/ckeditor5/tests/fixtures/ckeditor4_config/editor.editor.basic_html.yml'))->setSyncing(TRUE)
        ->save();
    $basic_html_format_with_h1 = $basic_html_format;
    $basic_html_format_with_h1['name'] .= ' (with <h1>)';
    $basic_html_format_with_h1['format'] = 'basic_html_with_h1';
    NestedArray::setValue($basic_html_format_with_h1, $allowed_html_parents, $current_value . ' <h1>');
    FilterFormat::create($basic_html_format_with_h1)->setSyncing(TRUE)
        ->save();
    Editor::create([
        'format' => 'basic_html_with_h1',
    ] + Yaml::parseFile('core/modules/ckeditor5/tests/fixtures/ckeditor4_config/editor.editor.basic_html.yml'))->setSyncing(TRUE)
        ->save();
    $new_value = str_replace('<p>', '<p class="text-align-center text-align-justify">', $current_value);
    $basic_html_format_with_alignable_p = $basic_html_format;
    $basic_html_format_with_alignable_p['name'] .= ' (with alignable paragraph support)';
    $basic_html_format_with_alignable_p['format'] = 'basic_html_with_alignable_p';
    NestedArray::setValue($basic_html_format_with_alignable_p, $allowed_html_parents, $new_value);
    FilterFormat::create($basic_html_format_with_alignable_p)->setSyncing(TRUE)
        ->save();
    Editor::create([
        'format' => 'basic_html_with_alignable_p',
    ] + Yaml::parseFile('core/modules/ckeditor5/tests/fixtures/ckeditor4_config/editor.editor.basic_html.yml'))->setSyncing(TRUE)
        ->save();
    $basic_html_format_with_media_embed = $basic_html_format;
    $basic_html_format_with_media_embed['name'] .= ' (with Media Embed support)';
    $basic_html_format_with_media_embed['format'] = 'basic_html_with_media_embed';
    // Add media_embed filter, update filter_html filter settings.
    $basic_html_format_with_media_embed['filters']['media_embed'] = [
        'status' => TRUE,
    ];
    $new_value = $current_value . ' <drupal-media data-entity-type data-entity-uuid data-align data-caption alt>';
    NestedArray::setValue($basic_html_format_with_media_embed, $allowed_html_parents, $new_value);
    FilterFormat::create($basic_html_format_with_media_embed)->setSyncing(TRUE)
        ->save();
    $basic_html_editor_with_media_embed = Editor::create([
        'format' => 'basic_html_with_media_embed',
    ] + Yaml::parseFile('core/modules/ckeditor5/tests/fixtures/ckeditor4_config/editor.editor.basic_html.yml'));
    $settings = $basic_html_editor_with_media_embed->getSettings();
    // Add "insert media from library" button to CKEditor 4 configuration, the
    // pre-existing toolbar item group labeled "Media".
    $settings['toolbar']['rows'][0][3]['items'][] = 'DrupalMediaLibrary';
    $basic_html_editor_with_media_embed->setSettings($settings);
    $basic_html_editor_with_media_embed->setSyncing(TRUE)
        ->save();
    $basic_html_format_with_media_embed_view_mode_invalid = $basic_html_format_with_media_embed;
    $basic_html_format_with_media_embed_view_mode_invalid['name'] = ' (with Media Embed support, view mode enabled but no view modes configured)';
    $basic_html_format_with_media_embed_view_mode_invalid['format'] = 'basic_html_with_media_embed_view_mode_enabled_no_view_modes_configured';
    $current_value_media_embed = NestedArray::getValue($basic_html_format_with_media_embed, $allowed_html_parents);
    $new_value = str_replace('<drupal-media data-entity-type data-entity-uuid data-align data-caption alt>', '<drupal-media data-entity-type data-entity-uuid data-align data-caption alt data-view-mode>', $current_value_media_embed);
    NestedArray::setValue($basic_html_format_with_media_embed_view_mode_invalid, $allowed_html_parents, $new_value);
    FilterFormat::create($basic_html_format_with_media_embed_view_mode_invalid)->setSyncing(TRUE)
        ->save();
    $basic_html_editor_with_media_embed_view_mode_enabled_no_view_modes_configured = Editor::create([
        'format' => 'basic_html_with_media_embed_view_mode_enabled_no_view_modes_configured',
    ] + Yaml::parseFile('core/modules/ckeditor5/tests/fixtures/ckeditor4_config/editor.editor.basic_html.yml'));
    $settings = $basic_html_editor_with_media_embed_view_mode_enabled_no_view_modes_configured->getSettings();
    // Add "insert media from library" button to CKEditor 4 configuration, the
    // pre-existing toolbar item group labeled "Media".
    $settings['toolbar']['rows'][0][3]['items'][] = 'DrupalMediaLibrary';
    $basic_html_editor_with_media_embed_view_mode_enabled_no_view_modes_configured->setSettings($settings);
    $basic_html_editor_with_media_embed_view_mode_enabled_no_view_modes_configured->setSyncing(TRUE)
        ->save();
    $new_value = str_replace('<img src alt height width data-entity-type data-entity-uuid data-align data-caption>', '<img src alt height width data-*>', $current_value);
    $basic_html_format_with_any_data_attr = $basic_html_format;
    $basic_html_format_with_any_data_attr['name'] .= ' (with any data-* attribute on images)';
    $basic_html_format_with_any_data_attr['format'] = 'basic_html_with_any_data_attr';
    NestedArray::setValue($basic_html_format_with_any_data_attr, $allowed_html_parents, $new_value);
    FilterFormat::create($basic_html_format_with_any_data_attr)->setSyncing(TRUE)
        ->save();
    Editor::create([
        'format' => 'basic_html_with_any_data_attr',
    ] + Yaml::parseFile('core/modules/ckeditor5/tests/fixtures/ckeditor4_config/editor.editor.basic_html.yml'))->setSyncing(TRUE)
        ->save();
    $basic_html_format_with_media_embed_view_mode_enabled_two_view_modes_configured = $basic_html_format_with_media_embed_view_mode_invalid;
    $basic_html_format_with_media_embed_view_mode_enabled_two_view_modes_configured['name'] = ' (with Media Embed support, view mode enabled and two view modes configured )';
    $basic_html_format_with_media_embed_view_mode_enabled_two_view_modes_configured['format'] = 'basic_html_with_media_embed_view_mode_enabled_two_view_modes_configured';
    FilterFormat::create($basic_html_format_with_media_embed_view_mode_enabled_two_view_modes_configured)->setSyncing(TRUE)
        ->save();
    $basic_html_editor_with_media_embed_view_mode_enabled_two_view_modes_configured = Editor::create([
        'format' => 'basic_html_with_media_embed_view_mode_enabled_two_view_modes_configured',
    ] + Yaml::parseFile('core/modules/ckeditor5/tests/fixtures/ckeditor4_config/editor.editor.basic_html.yml'));
    $settings = $basic_html_editor_with_media_embed_view_mode_enabled_two_view_modes_configured->getSettings();
    // Add "insert media from library" button to CKEditor 4 configuration, the
    // pre-existing toolbar item group labeled "Media".
    $settings['toolbar']['rows'][0][3]['items'][] = 'DrupalMediaLibrary';
    $basic_html_editor_with_media_embed_view_mode_enabled_two_view_modes_configured->setSettings($settings);
    $basic_html_editor_with_media_embed_view_mode_enabled_two_view_modes_configured->setSyncing(TRUE)
        ->save();
    EntityViewMode::create([
        'id' => 'media.view_mode_1',
        'targetEntityType' => 'media',
        'status' => TRUE,
        'enabled' => TRUE,
        'label' => 'View Mode 1',
    ])->setSyncing(TRUE)
        ->save();
    EntityViewMode::create([
        'id' => 'media.view_mode_2',
        'targetEntityType' => 'media',
        'status' => TRUE,
        'enabled' => TRUE,
        'label' => 'View Mode 2',
    ])->setSyncing(TRUE)
        ->save();
    $filter_format = FilterFormat::load('basic_html_with_media_embed_view_mode_enabled_two_view_modes_configured');
    $filter_format->setFilterConfig('media_embed', [
        'status' => TRUE,
        'settings' => [
            'default_view_mode' => 'view_mode_1',
            'allowed_media_types' => [],
            'allowed_view_modes' => [
                'view_mode_1' => 'view_mode_1',
                'view_mode_2' => 'view_mode_2',
            ],
        ],
    ])
        ->setSyncing(TRUE)
        ->save();
    $filter_plugin_manager = $this->container
        ->get('plugin.manager.filter');
    FilterFormat::create([
        'format' => 'filter_only__filter_html',
        'name' => 'Only the "filter_html" filter and its default settings',
        'filters' => [
            'filter_html' => [
                'status' => 1,
                'settings' => $filter_plugin_manager->getDefinition('filter_html')['settings'],
            ],
        ],
    ])
        ->setSyncing(TRUE)
        ->save();
    FilterFormat::create([
        'format' => 'cke4_plugins_with_settings',
        'name' => 'All CKEditor 4 core plugins with settings',
    ])->setSyncing(TRUE)
        ->save();
    Editor::create([
        'format' => 'cke4_plugins_with_settings',
        'editor' => 'ckeditor',
        'settings' => [
            'toolbar' => [
                'rows' => [
                    0 => [
                        [
                            'name' => 'Buttons with settings',
                            'items' => [
                                'Language',
                                'Styles',
                                // Blockquote does not have settings. It's present only to
                                // support an additional tag, to test realistic styles.
'Blockquote',
                            ],
                        ],
                        [
                            'name' => 'Button without upgrade path',
                            'items' => [
                                'Llama',
                            ],
                        ],
                    ],
                ],
            ],
            'plugins' => [
                'language' => [
                    'language_list' => 'all',
                ],
                'stylescombo' => [
                    'styles' => "p.callout|Callout\r\nblockquote.interesting.highlighted|Interesting & highlighted quote\n\nblockquote.famous |    Famous\n",
                ],
                // Plugin setting without upgrade path.
'llama_contextual_and_button' => [
                    'ultra_llama_mode' => TRUE,
                ],
            ],
        ],
    ])->setSyncing(TRUE)
        ->save();
    FilterFormat::create([
        'format' => 'cke4_stylescombo_span',
        'name' => 'A CKEditor 4 configured to have span styles',
        'filters' => [
            'filter_html' => [
                'status' => 1,
                'settings' => [
                    'allowed_html' => '<p> <br> <span class="llama">',
                ] + $filter_plugin_manager->getDefinition('filter_html')['settings'],
            ],
        ],
    ])
        ->setSyncing(TRUE)
        ->save();
    Editor::create([
        'format' => 'cke4_stylescombo_span',
        'editor' => 'ckeditor',
        'settings' => [
            'toolbar' => [
                'rows' => [
                    0 => [
                        [
                            'name' => 'Whatever',
                            'items' => [
                                'Styles',
                            ],
                        ],
                    ],
                ],
            ],
            'plugins' => [
                'stylescombo' => [
                    'styles' => "span.llama|Llama span",
                ],
            ],
        ],
    ])->setSyncing(TRUE)
        ->save();
    FilterFormat::create([
        'format' => 'cke4_contrib_plugins_now_in_core',
        'name' => 'All CKEditor 4 contrib plugins now in core',
    ])->setSyncing(TRUE)
        ->save();
    Editor::create([
        'format' => 'cke4_contrib_plugins_now_in_core',
        'editor' => 'ckeditor',
        'settings' => [
            'toolbar' => [
                'rows' => [
                    0 => [
                        [
                            'name' => 'Contributed modules providing buttons without settings',
                            'items' => [
                                // @see https://www.drupal.org/project/codetag
'Code',
                            ],
                        ],
                    ],
                ],
            ],
            'plugins' => [],
        ],
    ])->setSyncing(TRUE)
        ->save();
}

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