3 namespace Drupal\entity_embed\Tests;
5 use Drupal\editor\Entity\Editor;
8 * Tests the entity_embed dialog controller and route.
12 class EntityEmbedDialogTest extends EntityEmbedTestBase {
19 public static $modules = ['image'];
22 * Tests the entity embed dialog.
24 public function testEntityEmbedDialog() {
25 // Ensure that the route is not accessible without specifying all the
27 $this->getEmbedDialog();
28 $this->assertResponse(404, 'Embed dialog is not accessible without specifying filter format and embed button.');
29 $this->getEmbedDialog('custom_format');
30 $this->assertResponse(404, 'Embed dialog is not accessible without specifying embed button.');
32 // Ensure that the route is not accessible with an invalid embed button.
33 $this->getEmbedDialog('custom_format', 'invalid_button');
34 $this->assertResponse(404, 'Embed dialog is not accessible without specifying filter format and embed button.');
36 // Ensure that the route is not accessible with text format without the
38 $this->getEmbedDialog('plain_text', 'node');
39 $this->assertResponse(404, 'Embed dialog is not accessible with a filter that does not have an editor configuration.');
41 // Add an empty configuration for the plain_text editor configuration.
42 $editor = Editor::create([
43 'format' => 'plain_text',
44 'editor' => 'ckeditor',
47 $this->getEmbedDialog('plain_text', 'node');
48 $this->assertResponse(403, 'Embed dialog is not accessible with a filter that does not have the embed button assigned to it.');
50 // Ensure that the route is accessible with a valid embed button.
51 // 'Node' embed button is provided by default by the module and hence the
52 // request must be successful.
53 $this->getEmbedDialog('custom_format', 'node');
54 $this->assertResponse(200, 'Embed dialog is accessible with correct filter format and embed button.');
56 // Ensure form structure of the 'select' step and submit form.
57 $this->assertFieldByName('entity_id', '', 'Entity ID/UUID field is present.');
59 // $edit = ['attributes[data-entity-id]' => $this->node->id()];
60 // $this->drupalPostAjaxForm(NULL, $edit, 'op');
61 // Ensure form structure of the 'embed' step and submit form.
62 // $this->assertFieldByName('attributes[data-entity-embed-display]', 'Entity Embed Display plugin field is present.');.
66 * Tests the entity embed button markup.
68 public function testEntityEmbedButtonMarkup() {
69 // Ensure that the route is not accessible with text format without the
71 $this->getEmbedDialog('plain_text', 'node');
72 $this->assertResponse(404, 'Embed dialog is not accessible with a filter that does not have an editor configuration.');
74 // Add an empty configuration for the plain_text editor configuration.
75 $editor = Editor::create([
76 'format' => 'plain_text',
77 'editor' => 'ckeditor',
80 $this->getEmbedDialog('plain_text', 'node');
81 $this->assertResponse(403, 'Embed dialog is not accessible with a filter that does not have the embed button assigned to it.');
83 // Ensure that the route is accessible with a valid embed button.
84 // 'Node' embed button is provided by default by the module and hence the
85 // request must be successful.
86 $this->getEmbedDialog('custom_format', 'node');
87 $this->assertResponse(200, 'Embed dialog is accessible with correct filter format and embed button.');
89 // Ensure form structure of the 'select' step and submit form.
90 $this->assertFieldByName('entity_id', '', 'Entity ID/UUID field is present.');
92 // Check that 'Next' is a primary button.
93 $this->assertFieldByXPath('//input[contains(@class, "button--primary")]', 'Next', 'Next is a primary button');
95 $title = $this->node->getTitle() . ' (' . $this->node->id() . ')';
96 $edit = ['entity_id' => $title];
97 $response = $this->drupalPostAjaxForm(NULL, $edit, 'op');
99 'entity_reference:entity_reference_label',
100 'entity_reference:entity_reference_entity_id',
101 'view_mode:node.full',
102 'view_mode:node.rss',
103 'view_mode:node.search_index',
104 'view_mode:node.search_result',
105 'view_mode:node.teaser',
107 foreach ($plugins as $plugin) {
108 $this->assertTrue(strpos($response[2]['data'], $plugin), 'Plugin ' . $plugin . ' is available in selection.');
111 $this->container->get('config.factory')->getEditable('entity_embed.settings')
112 ->set('rendered_entity_mode', TRUE)->save();
113 $this->container->get('plugin.manager.entity_embed.display')->clearCachedDefinitions();
115 $this->getEmbedDialog('custom_format', 'node');
116 $title = $this->node->getTitle() . ' (' . $this->node->id() . ')';
117 $edit = ['entity_id' => $title];
118 $response = $this->drupalPostAjaxForm(NULL, $edit, 'op');
121 'entity_reference:entity_reference_label',
122 'entity_reference:entity_reference_entity_id',
123 'entity_reference:entity_reference_entity_view',
125 foreach ($plugins as $plugin) {
126 $this->assertTrue(strpos($response[2]['data'], $plugin), 'Plugin ' . $plugin . ' is available in selection.');
128 /*$this->drupalPostForm(NULL, $edit, 'Next');
129 // Ensure form structure of the 'embed' step and submit form.
130 $this->assertFieldByName('attributes[data-entity-embed-display]', 'Entity Embed Display plugin field is present.');
132 // Check that 'Embed' is a primary button.
133 $this->assertFieldByXPath('//input[contains(@class, "button--primary")]', 'Embed', 'Embed is a primary button');*/
137 * Tests entity embed functionality.
139 public function testEntityEmbedFunctionality() {
141 'entity_id' => $this->node->getTitle() . ' (' . $this->node->id() . ')',
143 $this->getEmbedDialog('custom_format', 'node');
144 $this->drupalPostForm(NULL, $edit, t('Next'));
145 // Tests that the embed dialog doesn't trow a fatal in
146 // ImageFieldFormatter::isValidImage()
147 $this->assertResponse(200);
151 * Retrieves an embed dialog based on given parameters.
153 * @param string $filter_format_id
154 * ID of the filter format.
155 * @param string $embed_button_id
156 * ID of the embed button.
159 * The retrieved HTML string.
161 public function getEmbedDialog($filter_format_id = NULL, $embed_button_id = NULL) {
162 $url = 'entity-embed/dialog';
163 if (!empty($filter_format_id)) {
164 $url .= '/' . $filter_format_id;
165 if (!empty($embed_button_id)) {
166 $url .= '/' . $embed_button_id;
169 return $this->drupalGet($url);