annotate core/modules/contextual/tests/src/FunctionalJavascript/ContextualLinksTest.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@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\Tests\contextual\FunctionalJavascript;
Chris@0 4
Chris@17 5 use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
Chris@0 6 use Drupal\user\Entity\Role;
Chris@0 7
Chris@0 8 /**
Chris@0 9 * Tests the UI for correct contextual links.
Chris@0 10 *
Chris@0 11 * @group contextual
Chris@0 12 */
Chris@17 13 class ContextualLinksTest extends WebDriverTestBase {
Chris@0 14
Chris@0 15 use ContextualLinkClickTrait;
Chris@0 16
Chris@0 17 /**
Chris@0 18 * {@inheritdoc}
Chris@0 19 */
Chris@0 20 public static $modules = ['block', 'contextual'];
Chris@0 21
Chris@0 22 /**
Chris@0 23 * {@inheritdoc}
Chris@0 24 */
Chris@0 25 protected function setUp() {
Chris@0 26 parent::setUp();
Chris@0 27
Chris@0 28 $this->drupalLogin($this->createUser(['access contextual links']));
Chris@0 29 $this->placeBlock('system_branding_block', ['id' => 'branding']);
Chris@0 30 }
Chris@0 31
Chris@0 32 /**
Chris@0 33 * Tests the visibility of contextual links.
Chris@0 34 */
Chris@0 35 public function testContextualLinksVisibility() {
Chris@0 36 $this->drupalGet('user');
Chris@0 37 $contextualLinks = $this->assertSession()->waitForElement('css', '.contextual button');
Chris@0 38 $this->assertEmpty($contextualLinks);
Chris@0 39
Chris@0 40 // Ensure visibility remains correct after cached paged load.
Chris@0 41 $this->drupalGet('user');
Chris@0 42 $contextualLinks = $this->assertSession()->waitForElement('css', '.contextual button');
Chris@0 43 $this->assertEmpty($contextualLinks);
Chris@0 44
Chris@0 45 // Grant permissions to use contextual links on blocks.
Chris@0 46 $this->grantPermissions(Role::load(Role::AUTHENTICATED_ID), [
Chris@0 47 'access contextual links',
Chris@0 48 'administer blocks',
Chris@0 49 ]);
Chris@0 50
Chris@0 51 $this->drupalGet('user');
Chris@0 52 $contextualLinks = $this->assertSession()->waitForElement('css', '.contextual button');
Chris@0 53 $this->assertNotEmpty($contextualLinks);
Chris@0 54
Chris@0 55 // Ensure visibility remains correct after cached paged load.
Chris@0 56 $this->drupalGet('user');
Chris@0 57 $contextualLinks = $this->assertSession()->waitForElement('css', '.contextual button');
Chris@0 58 $this->assertNotEmpty($contextualLinks);
Chris@0 59 }
Chris@0 60
Chris@0 61 /**
Chris@0 62 * Test clicking contextual links.
Chris@0 63 */
Chris@0 64 public function testContextualLinksClick() {
Chris@0 65 $this->container->get('module_installer')->install(['contextual_test']);
Chris@0 66 // Test clicking contextual link without toolbar.
Chris@0 67 $this->drupalGet('user');
Chris@0 68 $this->assertSession()->assertWaitOnAjaxRequest();
Chris@0 69 $this->clickContextualLink('#block-branding', 'Test Link');
Chris@0 70 $this->assertSession()->pageTextContains('Everything is contextual!');
Chris@0 71
Chris@14 72 // Test click a contextual link that uses ajax.
Chris@14 73 $this->drupalGet('user');
Chris@14 74 $this->assertSession()->assertWaitOnAjaxRequest();
Chris@14 75 $current_page_string = 'NOT_RELOADED_IF_ON_PAGE';
Chris@14 76 $this->getSession()->executeScript('document.body.appendChild(document.createTextNode("' . $current_page_string . '"));');
Chris@14 77 $this->clickContextualLink('#block-branding', 'Test Link with Ajax');
Chris@14 78 $this->assertNotEmpty($this->assertSession()->waitForElementVisible('css', '#drupal-modal'));
Chris@14 79 $this->assertSession()->elementContains('css', '#drupal-modal', 'Everything is contextual!');
Chris@14 80 // Check to make sure that page was not reloaded.
Chris@14 81 $this->assertSession()->pageTextContains($current_page_string);
Chris@14 82
Chris@0 83 // Test clicking contextual link with toolbar.
Chris@0 84 $this->container->get('module_installer')->install(['toolbar']);
Chris@0 85 $this->grantPermissions(Role::load(Role::AUTHENTICATED_ID), ['access toolbar']);
Chris@0 86 $this->drupalGet('user');
Chris@0 87 $this->assertSession()->assertWaitOnAjaxRequest();
Chris@0 88
Chris@0 89 // Click "Edit" in toolbar to show contextual links.
Chris@0 90 $this->getSession()->getPage()->find('css', '.contextual-toolbar-tab button')->press();
Chris@0 91 $this->clickContextualLink('#block-branding', 'Test Link', FALSE);
Chris@0 92 $this->assertSession()->pageTextContains('Everything is contextual!');
Chris@0 93 }
Chris@0 94
Chris@17 95 /**
Chris@17 96 * Test the contextual links destination.
Chris@17 97 */
Chris@17 98 public function testContextualLinksDestination() {
Chris@17 99 $this->grantPermissions(Role::load(Role::AUTHENTICATED_ID), [
Chris@17 100 'access contextual links',
Chris@17 101 'administer blocks',
Chris@17 102 ]);
Chris@17 103 $this->drupalGet('user');
Chris@17 104 $this->assertSession()->waitForElement('css', '.contextual button');
Chris@17 105 $expected_destination_value = (string) $this->loggedInUser->toUrl()->toString();
Chris@17 106 $contextual_link_url_parsed = parse_url($this->getSession()->getPage()->findLink('Configure block')->getAttribute('href'));
Chris@17 107 $this->assertEquals("destination=$expected_destination_value", $contextual_link_url_parsed['query']);
Chris@17 108 }
Chris@17 109
Chris@0 110 }