Chris@17
|
1 <?php
|
Chris@17
|
2
|
Chris@17
|
3 namespace Drupal\Tests\quickedit\FunctionalJavascript;
|
Chris@17
|
4
|
Chris@17
|
5 use Drupal\editor\Entity\Editor;
|
Chris@17
|
6 use Drupal\filter\Entity\FilterFormat;
|
Chris@17
|
7 use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
|
Chris@17
|
8 use Drupal\node\Entity\Node;
|
Chris@17
|
9 use Drupal\node\Entity\NodeType;
|
Chris@17
|
10 use Drupal\Tests\contextual\FunctionalJavascript\ContextualLinkClickTrait;
|
Chris@17
|
11
|
Chris@17
|
12 /**
|
Chris@17
|
13 * Tests quickedit.
|
Chris@17
|
14 *
|
Chris@17
|
15 * @group quickedit
|
Chris@17
|
16 */
|
Chris@17
|
17 class FieldTest extends WebDriverTestBase {
|
Chris@17
|
18
|
Chris@17
|
19 use ContextualLinkClickTrait;
|
Chris@17
|
20
|
Chris@17
|
21 /**
|
Chris@17
|
22 * {@inheritdoc}
|
Chris@17
|
23 */
|
Chris@17
|
24 public static $modules = [
|
Chris@17
|
25 'node',
|
Chris@17
|
26 'ckeditor',
|
Chris@17
|
27 'contextual',
|
Chris@17
|
28 'quickedit',
|
Chris@17
|
29 ];
|
Chris@17
|
30
|
Chris@17
|
31 /**
|
Chris@17
|
32 * {@inheritdoc}
|
Chris@17
|
33 */
|
Chris@17
|
34 protected function setUp() {
|
Chris@17
|
35 parent::setUp();
|
Chris@17
|
36
|
Chris@17
|
37 // Create a text format and associate CKEditor.
|
Chris@17
|
38 $filtered_html_format = FilterFormat::create([
|
Chris@17
|
39 'format' => 'filtered_html',
|
Chris@17
|
40 'name' => 'Filtered HTML',
|
Chris@17
|
41 'weight' => 0,
|
Chris@17
|
42 ]);
|
Chris@17
|
43 $filtered_html_format->save();
|
Chris@17
|
44
|
Chris@17
|
45 Editor::create([
|
Chris@17
|
46 'format' => 'filtered_html',
|
Chris@17
|
47 'editor' => 'ckeditor',
|
Chris@17
|
48 ])->save();
|
Chris@17
|
49
|
Chris@17
|
50 // Create note type with body field.
|
Chris@17
|
51 $node_type = NodeType::create(['type' => 'page', 'name' => 'Page']);
|
Chris@17
|
52 $node_type->save();
|
Chris@17
|
53 node_add_body_field($node_type);
|
Chris@17
|
54
|
Chris@17
|
55 $account = $this->drupalCreateUser([
|
Chris@17
|
56 'access content',
|
Chris@17
|
57 'administer nodes',
|
Chris@17
|
58 'edit any page content',
|
Chris@17
|
59 'use text format filtered_html',
|
Chris@17
|
60 'access contextual links',
|
Chris@17
|
61 'access in-place editing',
|
Chris@17
|
62 ]);
|
Chris@17
|
63 $this->drupalLogin($account);
|
Chris@17
|
64
|
Chris@17
|
65 }
|
Chris@17
|
66
|
Chris@17
|
67 /**
|
Chris@17
|
68 * Tests that quickeditor works correctly for field with CKEditor.
|
Chris@17
|
69 */
|
Chris@17
|
70 public function testFieldWithCkeditor() {
|
Chris@17
|
71 $body_value = '<p>Sapere aude</p>';
|
Chris@17
|
72 $node = Node::create([
|
Chris@17
|
73 'type' => 'page',
|
Chris@17
|
74 'title' => 'Page node',
|
Chris@17
|
75 'body' => [['value' => $body_value, 'format' => 'filtered_html']],
|
Chris@17
|
76 ]);
|
Chris@17
|
77 $node->save();
|
Chris@17
|
78
|
Chris@17
|
79 $page = $this->getSession()->getPage();
|
Chris@17
|
80 $assert = $this->assertSession();
|
Chris@17
|
81
|
Chris@17
|
82 $this->drupalGet('node/' . $node->id());
|
Chris@17
|
83
|
Chris@17
|
84 // Wait "Quick edit" button for node.
|
Chris@17
|
85 $this->assertSession()->waitForElement('css', '[data-quickedit-entity-id="node/' . $node->id() . '"] .contextual .quickedit');
|
Chris@17
|
86 // Click by "Quick edit".
|
Chris@17
|
87 $this->clickContextualLink('[data-quickedit-entity-id="node/' . $node->id() . '"]', 'Quick edit');
|
Chris@17
|
88 // Switch to body field.
|
Chris@17
|
89 $page->find('css', '[data-quickedit-field-id="node/' . $node->id() . '/body/en/full"]')->click();
|
Chris@17
|
90 // Wait and click by "Blockquote" button from editor for body field.
|
Chris@17
|
91 $this->assertSession()->waitForElementVisible('css', '.cke_button.cke_button__blockquote')->click();
|
Chris@17
|
92 // Wait and click by "Save" button after body field was changed.
|
Chris@17
|
93 $this->assertSession()->waitForElementVisible('css', '.quickedit-toolgroup.ops [type="submit"][aria-hidden="false"]')->click();
|
Chris@17
|
94 // Wait until the save occurs and the editor UI disappears.
|
Chris@17
|
95 $this->waitForNoElement('.cke_button.cke_button__blockquote');
|
Chris@17
|
96 // Ensure that the changes take effect.
|
Chris@17
|
97 $assert->responseMatches("|<blockquote>\s*$body_value\s*</blockquote>|");
|
Chris@17
|
98 }
|
Chris@17
|
99
|
Chris@17
|
100 /**
|
Chris@17
|
101 * Waits for an element to be removed from the page.
|
Chris@17
|
102 *
|
Chris@17
|
103 * @param string $selector
|
Chris@17
|
104 * CSS selector.
|
Chris@17
|
105 * @param int $timeout
|
Chris@17
|
106 * (optional) Timeout in milliseconds, defaults to 10000.
|
Chris@17
|
107 */
|
Chris@17
|
108 protected function waitForNoElement($selector, $timeout = 10000) {
|
Chris@17
|
109 $condition = "(typeof jQuery !== 'undefined' && jQuery('$selector').length === 0)";
|
Chris@17
|
110 $this->assertJsCondition($condition, $timeout);
|
Chris@17
|
111 }
|
Chris@17
|
112
|
Chris@17
|
113 }
|