Chris@0: drupalLogin($this->createUser(['access contextual links'])); Chris@0: $this->placeBlock('system_branding_block', ['id' => 'branding']); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests the visibility of contextual links. Chris@0: */ Chris@0: public function testContextualLinksVisibility() { Chris@0: $this->drupalGet('user'); Chris@0: $contextualLinks = $this->assertSession()->waitForElement('css', '.contextual button'); Chris@0: $this->assertEmpty($contextualLinks); Chris@0: Chris@0: // Ensure visibility remains correct after cached paged load. Chris@0: $this->drupalGet('user'); Chris@0: $contextualLinks = $this->assertSession()->waitForElement('css', '.contextual button'); Chris@0: $this->assertEmpty($contextualLinks); Chris@0: Chris@0: // Grant permissions to use contextual links on blocks. Chris@0: $this->grantPermissions(Role::load(Role::AUTHENTICATED_ID), [ Chris@0: 'access contextual links', Chris@0: 'administer blocks', Chris@0: ]); Chris@0: Chris@0: $this->drupalGet('user'); Chris@0: $contextualLinks = $this->assertSession()->waitForElement('css', '.contextual button'); Chris@0: $this->assertNotEmpty($contextualLinks); Chris@0: Chris@0: // Ensure visibility remains correct after cached paged load. Chris@0: $this->drupalGet('user'); Chris@0: $contextualLinks = $this->assertSession()->waitForElement('css', '.contextual button'); Chris@0: $this->assertNotEmpty($contextualLinks); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Test clicking contextual links. Chris@0: */ Chris@0: public function testContextualLinksClick() { Chris@0: $this->container->get('module_installer')->install(['contextual_test']); Chris@0: // Test clicking contextual link without toolbar. Chris@0: $this->drupalGet('user'); Chris@0: $this->assertSession()->assertWaitOnAjaxRequest(); Chris@0: $this->clickContextualLink('#block-branding', 'Test Link'); Chris@0: $this->assertSession()->pageTextContains('Everything is contextual!'); Chris@0: Chris@14: // Test click a contextual link that uses ajax. Chris@14: $this->drupalGet('user'); Chris@14: $this->assertSession()->assertWaitOnAjaxRequest(); Chris@14: $current_page_string = 'NOT_RELOADED_IF_ON_PAGE'; Chris@14: $this->getSession()->executeScript('document.body.appendChild(document.createTextNode("' . $current_page_string . '"));'); Chris@14: $this->clickContextualLink('#block-branding', 'Test Link with Ajax'); Chris@14: $this->assertNotEmpty($this->assertSession()->waitForElementVisible('css', '#drupal-modal')); Chris@14: $this->assertSession()->elementContains('css', '#drupal-modal', 'Everything is contextual!'); Chris@14: // Check to make sure that page was not reloaded. Chris@14: $this->assertSession()->pageTextContains($current_page_string); Chris@14: Chris@0: // Test clicking contextual link with toolbar. Chris@0: $this->container->get('module_installer')->install(['toolbar']); Chris@0: $this->grantPermissions(Role::load(Role::AUTHENTICATED_ID), ['access toolbar']); Chris@0: $this->drupalGet('user'); Chris@0: $this->assertSession()->assertWaitOnAjaxRequest(); Chris@0: Chris@0: // Click "Edit" in toolbar to show contextual links. Chris@0: $this->getSession()->getPage()->find('css', '.contextual-toolbar-tab button')->press(); Chris@0: $this->clickContextualLink('#block-branding', 'Test Link', FALSE); Chris@0: $this->assertSession()->pageTextContains('Everything is contextual!'); Chris@0: } Chris@0: Chris@17: /** Chris@17: * Test the contextual links destination. Chris@17: */ Chris@17: public function testContextualLinksDestination() { Chris@17: $this->grantPermissions(Role::load(Role::AUTHENTICATED_ID), [ Chris@17: 'access contextual links', Chris@17: 'administer blocks', Chris@17: ]); Chris@17: $this->drupalGet('user'); Chris@17: $this->assertSession()->waitForElement('css', '.contextual button'); Chris@17: $expected_destination_value = (string) $this->loggedInUser->toUrl()->toString(); Chris@17: $contextual_link_url_parsed = parse_url($this->getSession()->getPage()->findLink('Configure block')->getAttribute('href')); Chris@17: $this->assertEquals("destination=$expected_destination_value", $contextual_link_url_parsed['query']); Chris@17: } Chris@17: Chris@0: }