Updated Drupal to 8.6. This goes with the following updates because it's possible...
[yaffs-website] / web / core / modules / quickedit / tests / src / FunctionalJavascript / FieldTest.php
diff --git a/web/core/modules/quickedit/tests/src/FunctionalJavascript/FieldTest.php b/web/core/modules/quickedit/tests/src/FunctionalJavascript/FieldTest.php
new file mode 100644 (file)
index 0000000..7555220
--- /dev/null
@@ -0,0 +1,113 @@
+<?php
+
+namespace Drupal\Tests\quickedit\FunctionalJavascript;
+
+use Drupal\editor\Entity\Editor;
+use Drupal\filter\Entity\FilterFormat;
+use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
+use Drupal\node\Entity\Node;
+use Drupal\node\Entity\NodeType;
+use Drupal\Tests\contextual\FunctionalJavascript\ContextualLinkClickTrait;
+
+/**
+ * Tests quickedit.
+ *
+ * @group quickedit
+ */
+class FieldTest extends WebDriverTestBase {
+
+  use ContextualLinkClickTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = [
+    'node',
+    'ckeditor',
+    'contextual',
+    'quickedit',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    // Create a text format and associate CKEditor.
+    $filtered_html_format = FilterFormat::create([
+      'format' => 'filtered_html',
+      'name' => 'Filtered HTML',
+      'weight' => 0,
+    ]);
+    $filtered_html_format->save();
+
+    Editor::create([
+      'format' => 'filtered_html',
+      'editor' => 'ckeditor',
+    ])->save();
+
+    // Create note type with body field.
+    $node_type = NodeType::create(['type' => 'page', 'name' => 'Page']);
+    $node_type->save();
+    node_add_body_field($node_type);
+
+    $account = $this->drupalCreateUser([
+      'access content',
+      'administer nodes',
+      'edit any page content',
+      'use text format filtered_html',
+      'access contextual links',
+      'access in-place editing',
+    ]);
+    $this->drupalLogin($account);
+
+  }
+
+  /**
+   * Tests that quickeditor works correctly for field with CKEditor.
+   */
+  public function testFieldWithCkeditor() {
+    $body_value = '<p>Sapere aude</p>';
+    $node = Node::create([
+      'type' => 'page',
+      'title' => 'Page node',
+      'body' => [['value' => $body_value, 'format' => 'filtered_html']],
+    ]);
+    $node->save();
+
+    $page = $this->getSession()->getPage();
+    $assert = $this->assertSession();
+
+    $this->drupalGet('node/' . $node->id());
+
+    // Wait "Quick edit" button for node.
+    $this->assertSession()->waitForElement('css', '[data-quickedit-entity-id="node/' . $node->id() . '"] .contextual .quickedit');
+    // Click by "Quick edit".
+    $this->clickContextualLink('[data-quickedit-entity-id="node/' . $node->id() . '"]', 'Quick edit');
+    // Switch to body field.
+    $page->find('css', '[data-quickedit-field-id="node/' . $node->id() . '/body/en/full"]')->click();
+    // Wait and click by "Blockquote" button from editor for body field.
+    $this->assertSession()->waitForElementVisible('css', '.cke_button.cke_button__blockquote')->click();
+    // Wait and click by "Save" button after body field was changed.
+    $this->assertSession()->waitForElementVisible('css', '.quickedit-toolgroup.ops [type="submit"][aria-hidden="false"]')->click();
+    // Wait until the save occurs and the editor UI disappears.
+    $this->waitForNoElement('.cke_button.cke_button__blockquote');
+    // Ensure that the changes take effect.
+    $assert->responseMatches("|<blockquote>\s*$body_value\s*</blockquote>|");
+  }
+
+  /**
+   * Waits for an element to be removed from the page.
+   *
+   * @param string $selector
+   *   CSS selector.
+   * @param int $timeout
+   *   (optional) Timeout in milliseconds, defaults to 10000.
+   */
+  protected function waitForNoElement($selector, $timeout = 10000) {
+    $condition = "(typeof jQuery !== 'undefined' && jQuery('$selector').length === 0)";
+    $this->assertJsCondition($condition, $timeout);
+  }
+
+}