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