You are here

public function AjaxTest::testDrupalSettingsCachingRegression in Drupal 9

Same name and namespace in other branches
  1. 8 core/tests/Drupal/FunctionalJavascriptTests/Ajax/AjaxTest.php \Drupal\FunctionalJavascriptTests\Ajax\AjaxTest::testDrupalSettingsCachingRegression()

Tests that AJAX loaded libraries are not retained between requests.

See also

https://www.drupal.org/node/2647916

File

core/tests/Drupal/FunctionalJavascriptTests/Ajax/AjaxTest.php, line 55

Class

AjaxTest
Tests AJAX responses.

Namespace

Drupal\FunctionalJavascriptTests\Ajax

Code

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
    ->assertStringContainsString($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
    ->assertStringContainsString($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
    ->assertStringNotContainsString($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
    ->assertStringNotContainsString($fake_library, $libraries);
}