annotate core/modules/quickedit/tests/src/FunctionalJavascript/FieldTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
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 }