annotate core/tests/Drupal/FunctionalJavascriptTests/Ajax/AjaxTest.php @ 14:1fec387a4317

Update Drupal core to 8.5.2 via Composer
author Chris Cannam
date Mon, 23 Apr 2018 09:46:53 +0100
parents 4c8ae668cc8c
children 129ea1e6d783
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\FunctionalJavascriptTests\Ajax;
Chris@0 4
Chris@0 5 use Drupal\FunctionalJavascriptTests\JavascriptTestBase;
Chris@0 6
Chris@0 7 /**
Chris@0 8 * Tests AJAX responses.
Chris@0 9 *
Chris@0 10 * @group Ajax
Chris@0 11 */
Chris@0 12 class AjaxTest extends JavascriptTestBase {
Chris@0 13
Chris@0 14 /**
Chris@0 15 * {@inheritdoc}
Chris@0 16 */
Chris@0 17 public static $modules = ['ajax_test'];
Chris@0 18
Chris@0 19 public function testAjaxWithAdminRoute() {
Chris@0 20 \Drupal::service('theme_installer')->install(['stable', 'seven']);
Chris@0 21 $theme_config = \Drupal::configFactory()->getEditable('system.theme');
Chris@0 22 $theme_config->set('admin', 'seven');
Chris@0 23 $theme_config->set('default', 'stable');
Chris@0 24 $theme_config->save();
Chris@0 25
Chris@0 26 $account = $this->drupalCreateUser(['view the administration theme']);
Chris@0 27 $this->drupalLogin($account);
Chris@0 28
Chris@0 29 // First visit the site directly via the URL. This should render it in the
Chris@0 30 // admin theme.
Chris@0 31 $this->drupalGet('admin/ajax-test/theme');
Chris@0 32 $assert = $this->assertSession();
Chris@0 33 $assert->pageTextContains('Current theme: seven');
Chris@0 34
Chris@0 35 // Now click the modal, which should also use the admin theme.
Chris@0 36 $this->drupalGet('ajax-test/dialog');
Chris@0 37 $assert->pageTextNotContains('Current theme: stable');
Chris@0 38 $this->clickLink('Link 8 (ajax)');
Chris@0 39 $assert->assertWaitOnAjaxRequest();
Chris@0 40
Chris@0 41 $assert->pageTextContains('Current theme: stable');
Chris@0 42 $assert->pageTextNotContains('Current theme: seven');
Chris@0 43 }
Chris@0 44
Chris@0 45 /**
Chris@0 46 * Test that AJAX loaded libraries are not retained between requests.
Chris@0 47 *
Chris@0 48 * @see https://www.drupal.org/node/2647916
Chris@0 49 */
Chris@0 50 public function testDrupalSettingsCachingRegression() {
Chris@0 51 $this->drupalGet('ajax-test/dialog');
Chris@0 52 $assert = $this->assertSession();
Chris@0 53 $session = $this->getSession();
Chris@0 54
Chris@0 55 // Insert a fake library into the already loaded library settings.
Chris@0 56 $fake_library = 'fakeLibrary/fakeLibrary';
Chris@0 57 $session->evaluateScript("drupalSettings.ajaxPageState.libraries = drupalSettings.ajaxPageState.libraries + ',$fake_library';");
Chris@0 58
Chris@0 59 $libraries = $session->evaluateScript('drupalSettings.ajaxPageState.libraries');
Chris@0 60 // Test that the fake library is set.
Chris@0 61 $this->assertContains($fake_library, $libraries);
Chris@0 62
Chris@0 63 // Click on the AJAX link.
Chris@0 64 $this->clickLink('Link 8 (ajax)');
Chris@0 65 $assert->assertWaitOnAjaxRequest();
Chris@0 66
Chris@0 67 // Test that the fake library is still set after the AJAX call.
Chris@0 68 $libraries = $session->evaluateScript('drupalSettings.ajaxPageState.libraries');
Chris@0 69 $this->assertContains($fake_library, $libraries);
Chris@0 70
Chris@0 71 // Reload the page, this should reset the loaded libraries and remove the
Chris@0 72 // fake library.
Chris@0 73 $this->drupalGet('ajax-test/dialog');
Chris@0 74 $libraries = $session->evaluateScript('drupalSettings.ajaxPageState.libraries');
Chris@0 75 $this->assertNotContains($fake_library, $libraries);
Chris@0 76
Chris@0 77 // Click on the AJAX link again, and the libraries should still not contain
Chris@0 78 // the fake library.
Chris@0 79 $this->clickLink('Link 8 (ajax)');
Chris@0 80 $assert->assertWaitOnAjaxRequest();
Chris@0 81 $libraries = $session->evaluateScript('drupalSettings.ajaxPageState.libraries');
Chris@0 82 $this->assertNotContains($fake_library, $libraries);
Chris@0 83 }
Chris@0 84
Chris@0 85 }