View source
<?php
namespace Drupal\Tests\contextual\FunctionalJavascript;
use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
use Drupal\user\Entity\Role;
class ContextualLinksTest extends WebDriverTestBase {
use ContextualLinkClickTrait;
protected static $modules = [
'block',
'contextual',
];
protected $defaultTheme = 'stark';
protected function setUp() : void {
parent::setUp();
$this
->drupalLogin($this
->createUser([
'access contextual links',
]));
$this
->placeBlock('system_branding_block', [
'id' => 'branding',
]);
}
public function testContextualLinksVisibility() {
$this
->drupalGet('user');
$contextualLinks = $this
->assertSession()
->waitForElement('css', '.contextual button');
$this
->assertEmpty($contextualLinks);
$this
->drupalGet('user');
$contextualLinks = $this
->assertSession()
->waitForElement('css', '.contextual button');
$this
->assertEmpty($contextualLinks);
$this
->grantPermissions(Role::load(Role::AUTHENTICATED_ID), [
'access contextual links',
'administer blocks',
]);
$this
->drupalGet('user');
$contextualLinks = $this
->assertSession()
->waitForElement('css', '.contextual button');
$this
->assertNotEmpty($contextualLinks);
$this
->assertSession()
->elementExists('css', 'html.no-touchevents');
$this
->drupalGet('user');
$contextualLinks = $this
->assertSession()
->waitForElement('css', '.contextual button');
$this
->assertNotEmpty($contextualLinks);
}
public function testContextualLinksClick() {
$this->container
->get('module_installer')
->install([
'contextual_test',
]);
$this
->drupalGet('user');
$this
->assertSession()
->assertWaitOnAjaxRequest();
$this
->clickContextualLink('#block-branding', 'Test Link');
$this
->assertSession()
->pageTextContains('Everything is contextual!');
$this
->drupalGet('user');
$this
->assertSession()
->assertWaitOnAjaxRequest();
$current_page_string = 'NOT_RELOADED_IF_ON_PAGE';
$this
->getSession()
->executeScript('document.body.appendChild(document.createTextNode("' . $current_page_string . '"));');
$this
->clickContextualLink('#block-branding', 'Test Link with Ajax');
$this
->assertNotEmpty($this
->assertSession()
->waitForElementVisible('css', '#drupal-modal'));
$this
->assertSession()
->elementContains('css', '#drupal-modal', 'Everything is contextual!');
$this
->assertSession()
->pageTextContains($current_page_string);
$this->container
->get('module_installer')
->install([
'toolbar',
]);
$this
->grantPermissions(Role::load(Role::AUTHENTICATED_ID), [
'access toolbar',
]);
$this
->drupalGet('user');
$this
->assertSession()
->assertWaitOnAjaxRequest();
$this
->getSession()
->getPage()
->find('css', '.contextual-toolbar-tab button')
->press();
$this
->clickContextualLink('#block-branding', 'Test Link', FALSE);
$this
->assertSession()
->pageTextContains('Everything is contextual!');
}
public function testContextualLinksDestination() {
$this
->grantPermissions(Role::load(Role::AUTHENTICATED_ID), [
'access contextual links',
'administer blocks',
]);
$this
->drupalGet('user');
$this
->assertSession()
->waitForElement('css', '.contextual button');
$expected_destination_value = (string) $this->loggedInUser
->toUrl()
->toString();
$contextual_link_url_parsed = parse_url($this
->getSession()
->getPage()
->findLink('Configure block')
->getAttribute('href'));
$this
->assertEquals("destination={$expected_destination_value}", $contextual_link_url_parsed['query']);
}
}