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); } }