86 lines
2.9 KiB
PHP
86 lines
2.9 KiB
PHP
<?php
|
|
|
|
namespace Drupal\FunctionalJavascriptTests\Ajax;
|
|
|
|
use Drupal\FunctionalJavascriptTests\JavascriptTestBase;
|
|
|
|
/**
|
|
* Tests AJAX responses.
|
|
*
|
|
* @group Ajax
|
|
*/
|
|
class AjaxTest extends JavascriptTestBase {
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public static $modules = ['ajax_test'];
|
|
|
|
public function testAjaxWithAdminRoute() {
|
|
\Drupal::service('theme_installer')->install(['stable', 'seven']);
|
|
$theme_config = \Drupal::configFactory()->getEditable('system.theme');
|
|
$theme_config->set('admin', 'seven');
|
|
$theme_config->set('default', 'stable');
|
|
$theme_config->save();
|
|
|
|
$account = $this->drupalCreateUser(['view the administration theme']);
|
|
$this->drupalLogin($account);
|
|
|
|
// First visit the site directly via the URL. This should render it in the
|
|
// admin theme.
|
|
$this->drupalGet('admin/ajax-test/theme');
|
|
$assert = $this->assertSession();
|
|
$assert->pageTextContains('Current theme: seven');
|
|
|
|
// Now click the modal, which should also use the admin theme.
|
|
$this->drupalGet('ajax-test/dialog');
|
|
$assert->pageTextNotContains('Current theme: stable');
|
|
$this->clickLink('Link 8 (ajax)');
|
|
$assert->assertWaitOnAjaxRequest();
|
|
|
|
$assert->pageTextContains('Current theme: stable');
|
|
$assert->pageTextNotContains('Current theme: seven');
|
|
}
|
|
|
|
/**
|
|
* Test that AJAX loaded libraries are not retained between requests.
|
|
*
|
|
* @see https://www.drupal.org/node/2647916
|
|
*/
|
|
public function testDrupalSettingsCachingRegression() {
|
|
$this->drupalGet('ajax-test/dialog');
|
|
$assert = $this->assertSession();
|
|
$session = $this->getSession();
|
|
|
|
// Insert a fake library into the already loaded library settings.
|
|
$fake_library = 'fakeLibrary/fakeLibrary';
|
|
$session->evaluateScript("drupalSettings.ajaxPageState.libraries = drupalSettings.ajaxPageState.libraries + ',$fake_library';");
|
|
|
|
$libraries = $session->evaluateScript('drupalSettings.ajaxPageState.libraries');
|
|
// Test that the fake library is set.
|
|
$this->assertContains($fake_library, $libraries);
|
|
|
|
// Click on the AJAX link.
|
|
$this->clickLink('Link 8 (ajax)');
|
|
$assert->assertWaitOnAjaxRequest();
|
|
|
|
// Test that the fake library is still set after the AJAX call.
|
|
$libraries = $session->evaluateScript('drupalSettings.ajaxPageState.libraries');
|
|
$this->assertContains($fake_library, $libraries);
|
|
|
|
// Reload the page, this should reset the loaded libraries and remove the
|
|
// fake library.
|
|
$this->drupalGet('ajax-test/dialog');
|
|
$libraries = $session->evaluateScript('drupalSettings.ajaxPageState.libraries');
|
|
$this->assertNotContains($fake_library, $libraries);
|
|
|
|
// Click on the AJAX link again, and the libraries should still not contain
|
|
// the fake library.
|
|
$this->clickLink('Link 8 (ajax)');
|
|
$assert->assertWaitOnAjaxRequest();
|
|
$libraries = $session->evaluateScript('drupalSettings.ajaxPageState.libraries');
|
|
$this->assertNotContains($fake_library, $libraries);
|
|
}
|
|
|
|
}
|