annotate core/modules/contextual/tests/src/FunctionalJavascript/EditModeTest.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children 1fec387a4317
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\Tests\contextual\FunctionalJavascript;
Chris@0 4
Chris@0 5 use Drupal\FunctionalJavascriptTests\JavascriptTestBase;
Chris@0 6
Chris@0 7 /**
Chris@0 8 * Tests edit mode.
Chris@0 9 *
Chris@0 10 * @group contextual
Chris@0 11 */
Chris@0 12 class EditModeTest extends JavascriptTestBase {
Chris@0 13
Chris@0 14 /**
Chris@0 15 * CSS selector for Drupal's announce element.
Chris@0 16 */
Chris@0 17 const ANNOUNCE_SELECTOR = '#drupal-live-announce';
Chris@0 18
Chris@0 19 /**
Chris@0 20 * {@inheritdoc}
Chris@0 21 */
Chris@0 22 public static $modules = [
Chris@0 23 'node',
Chris@0 24 'block',
Chris@0 25 'user',
Chris@0 26 'system',
Chris@0 27 'breakpoint',
Chris@0 28 'toolbar',
Chris@0 29 'contextual',
Chris@0 30 ];
Chris@0 31
Chris@0 32 /**
Chris@0 33 * {@inheritdoc}
Chris@0 34 */
Chris@0 35 protected function setUp() {
Chris@0 36 parent::setUp();
Chris@0 37
Chris@0 38 $this->drupalLogin($this->createUser([
Chris@0 39 'administer blocks',
Chris@0 40 'access contextual links',
Chris@0 41 'access toolbar',
Chris@0 42 ]));
Chris@0 43 $this->placeBlock('system_powered_by_block', ['id' => 'powered']);
Chris@0 44 }
Chris@0 45
Chris@0 46 /**
Chris@0 47 * Tests that Drupal.announce messages appear.
Chris@0 48 */
Chris@0 49 public function testAnnounceEditMode() {
Chris@0 50 $web_assert = $this->assertSession();
Chris@0 51 $this->drupalGet('user');
Chris@0 52
Chris@0 53 // After the page loaded we need to additionally wait until the settings
Chris@0 54 // tray Ajax activity is done.
Chris@0 55 $web_assert->assertWaitOnAjaxRequest();
Chris@0 56
Chris@0 57 // Enable edit mode.
Chris@0 58 $this->pressToolbarEditButton();
Chris@0 59 $this->assertAnnounceEditMode();
Chris@0 60 // Disable edit mode.
Chris@0 61 $this->pressToolbarEditButton();
Chris@0 62 $this->assertAnnounceLeaveEditMode();
Chris@0 63 // Enable edit mode again.
Chris@0 64 $this->pressToolbarEditButton();
Chris@0 65 // Finally assert that the 'edit mode enabled' announcement is still correct
Chris@0 66 // after toggling the edit mode at least once.
Chris@0 67 $this->assertAnnounceEditMode();
Chris@0 68 }
Chris@0 69
Chris@0 70 /**
Chris@0 71 * Presses the toolbar edit mode.
Chris@0 72 */
Chris@0 73 protected function pressToolbarEditButton() {
Chris@0 74 $edit_button = $this->getSession()->getPage()->find('css', '#toolbar-bar div.contextual-toolbar-tab button');
Chris@0 75 $edit_button->press();
Chris@0 76 }
Chris@0 77
Chris@0 78 /**
Chris@0 79 * Asserts that the correct message was announced when entering edit mode.
Chris@0 80 */
Chris@0 81 protected function assertAnnounceEditMode() {
Chris@0 82 $web_assert = $this->assertSession();
Chris@0 83 // Wait for contextual trigger button.
Chris@0 84 $web_assert->waitForElementVisible('css', '.contextual trigger');
Chris@0 85 $web_assert->elementContains('css', static::ANNOUNCE_SELECTOR, 'Tabbing is constrained to a set of');
Chris@0 86 $web_assert->elementNotContains('css', static::ANNOUNCE_SELECTOR, 'Tabbing is no longer constrained by the Contextual module.');
Chris@0 87 }
Chris@0 88
Chris@0 89 /**
Chris@0 90 * Assert that the correct message was announced when leaving edit mode.
Chris@0 91 */
Chris@0 92 protected function assertAnnounceLeaveEditMode() {
Chris@0 93 $web_assert = $this->assertSession();
Chris@0 94 $page = $this->getSession()->getPage();
Chris@0 95 // Wait till all the contextual links are hidden.
Chris@0 96 $page->waitFor(1, function () use ($page, $web_assert) {
Chris@0 97 return empty($page->find('css', '.contextual .trigger.visually-hidden'));
Chris@0 98 });
Chris@0 99 $web_assert->elementContains('css', static::ANNOUNCE_SELECTOR, 'Tabbing is no longer constrained by the Contextual module.');
Chris@0 100 $web_assert->elementNotContains('css', static::ANNOUNCE_SELECTOR, 'Tabbing is constrained to a set of');
Chris@0 101 }
Chris@0 102
Chris@0 103 }