Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\Tests\toolbar\Functional;
|
Chris@0
|
4
|
Chris@0
|
5 use Drupal\Core\Cache\Cache;
|
Chris@0
|
6 use Drupal\Core\EventSubscriber\MainContentViewSubscriber;
|
Chris@0
|
7 use Drupal\Tests\system\Functional\Cache\AssertPageCacheContextsAndTagsTrait;
|
Chris@0
|
8 use Drupal\Tests\BrowserTestBase;
|
Chris@0
|
9
|
Chris@0
|
10 /**
|
Chris@0
|
11 * Tests the cache contexts for toolbar.
|
Chris@0
|
12 *
|
Chris@0
|
13 * @group toolbar
|
Chris@0
|
14 */
|
Chris@0
|
15 class ToolbarCacheContextsTest extends BrowserTestBase {
|
Chris@0
|
16
|
Chris@0
|
17 use AssertPageCacheContextsAndTagsTrait;
|
Chris@0
|
18
|
Chris@0
|
19 /**
|
Chris@0
|
20 * Modules to enable.
|
Chris@0
|
21 *
|
Chris@0
|
22 * @var array
|
Chris@0
|
23 */
|
Chris@0
|
24 public static $modules = ['toolbar', 'test_page_test'];
|
Chris@0
|
25
|
Chris@0
|
26 /**
|
Chris@0
|
27 * An authenticated user to use for testing.
|
Chris@0
|
28 *
|
Chris@0
|
29 * @var \Drupal\user\UserInterface
|
Chris@0
|
30 */
|
Chris@0
|
31 protected $adminUser;
|
Chris@0
|
32
|
Chris@0
|
33 /**
|
Chris@0
|
34 * An authenticated user to use for testing.
|
Chris@0
|
35 *
|
Chris@0
|
36 * @var \Drupal\user\UserInterface
|
Chris@0
|
37 */
|
Chris@0
|
38 protected $adminUser2;
|
Chris@0
|
39
|
Chris@0
|
40 /**
|
Chris@0
|
41 * A list of default permissions for test users.
|
Chris@0
|
42 *
|
Chris@0
|
43 * @var array
|
Chris@0
|
44 */
|
Chris@0
|
45 protected $perms = [
|
Chris@0
|
46 'access toolbar',
|
Chris@0
|
47 'access administration pages',
|
Chris@0
|
48 'administer site configuration',
|
Chris@0
|
49 ];
|
Chris@0
|
50
|
Chris@0
|
51 /**
|
Chris@0
|
52 * {@inheritdoc}
|
Chris@0
|
53 */
|
Chris@0
|
54 protected function setUp() {
|
Chris@0
|
55 parent::setUp();
|
Chris@0
|
56
|
Chris@0
|
57 $this->adminUser = $this->drupalCreateUser($this->perms);
|
Chris@0
|
58 $this->adminUser2 = $this->drupalCreateUser($this->perms);
|
Chris@0
|
59 }
|
Chris@0
|
60
|
Chris@0
|
61 /**
|
Chris@14
|
62 * Tests toolbar cache integration.
|
Chris@14
|
63 */
|
Chris@14
|
64 public function testCacheIntegration() {
|
Chris@14
|
65 $this->installExtraModules(['dynamic_page_cache']);
|
Chris@14
|
66 $this->drupalLogin($this->adminUser);
|
Chris@14
|
67 $this->drupalGet('test-page');
|
Chris@14
|
68 $this->assertSame('MISS', $this->getSession()->getResponseHeader('X-Drupal-Dynamic-Cache'));
|
Chris@14
|
69 $this->drupalGet('test-page');
|
Chris@14
|
70 $this->assertSame('HIT', $this->getSession()->getResponseHeader('X-Drupal-Dynamic-Cache'));
|
Chris@14
|
71 }
|
Chris@14
|
72
|
Chris@14
|
73 /**
|
Chris@0
|
74 * Tests toolbar cache contexts.
|
Chris@0
|
75 */
|
Chris@0
|
76 public function testToolbarCacheContextsCaller() {
|
Chris@0
|
77 // Test with default combination and permission to see toolbar.
|
Chris@0
|
78 $this->assertToolbarCacheContexts(['user'], 'Expected cache contexts found for default combination and permission to see toolbar.');
|
Chris@0
|
79
|
Chris@0
|
80 // Test without user toolbar tab. User module is a required module so we have to
|
Chris@0
|
81 // manually remove the user toolbar tab.
|
Chris@0
|
82 $this->installExtraModules(['toolbar_disable_user_toolbar']);
|
Chris@0
|
83 $this->assertToolbarCacheContexts(['user.permissions'], 'Expected cache contexts found without user toolbar tab.');
|
Chris@0
|
84
|
Chris@0
|
85 // Test with the toolbar and contextual enabled.
|
Chris@0
|
86 $this->installExtraModules(['contextual']);
|
Chris@0
|
87 $this->adminUser2 = $this->drupalCreateUser(array_merge($this->perms, ['access contextual links']));
|
Chris@0
|
88 $this->assertToolbarCacheContexts(['user.permissions'], 'Expected cache contexts found with contextual module enabled.');
|
Chris@0
|
89 \Drupal::service('module_installer')->uninstall(['contextual']);
|
Chris@0
|
90
|
Chris@0
|
91 // Test with the tour module enabled.
|
Chris@0
|
92 $this->installExtraModules(['tour']);
|
Chris@0
|
93 $this->adminUser2 = $this->drupalCreateUser(array_merge($this->perms, ['access tour']));
|
Chris@0
|
94 $this->assertToolbarCacheContexts(['user.permissions'], 'Expected cache contexts found with tour module enabled.');
|
Chris@0
|
95 \Drupal::service('module_installer')->uninstall(['tour']);
|
Chris@0
|
96
|
Chris@0
|
97 // Test with shortcut module enabled.
|
Chris@0
|
98 $this->installExtraModules(['shortcut']);
|
Chris@0
|
99 $this->adminUser2 = $this->drupalCreateUser(array_merge($this->perms, ['access shortcuts', 'administer shortcuts']));
|
Chris@0
|
100 $this->assertToolbarCacheContexts(['user'], 'Expected cache contexts found with shortcut module enabled.');
|
Chris@0
|
101 }
|
Chris@0
|
102
|
Chris@0
|
103 /**
|
Chris@0
|
104 * Tests that cache contexts are applied for both users.
|
Chris@0
|
105 *
|
Chris@0
|
106 * @param string[] $cache_contexts
|
Chris@0
|
107 * Expected cache contexts for both users.
|
Chris@0
|
108 * @param string $message
|
Chris@0
|
109 * (optional) A verbose message to output.
|
Chris@0
|
110 *
|
Chris@0
|
111 * @return
|
Chris@0
|
112 * TRUE if the assertion succeeded, FALSE otherwise.
|
Chris@0
|
113 */
|
Chris@0
|
114 protected function assertToolbarCacheContexts(array $cache_contexts, $message = NULL) {
|
Chris@0
|
115 // Default cache contexts that should exist on all test cases.
|
Chris@0
|
116 $default_cache_contexts = [
|
Chris@0
|
117 'languages:language_interface',
|
Chris@0
|
118 'theme',
|
Chris@0
|
119 'url.query_args:' . MainContentViewSubscriber::WRAPPER_FORMAT,
|
Chris@0
|
120 ];
|
Chris@0
|
121 $cache_contexts = Cache::mergeContexts($default_cache_contexts, $cache_contexts);
|
Chris@0
|
122
|
Chris@0
|
123 // Assert contexts for user1 which has only default permissions.
|
Chris@0
|
124 $this->drupalLogin($this->adminUser);
|
Chris@0
|
125 $this->drupalGet('test-page');
|
Chris@0
|
126 $return = $this->assertCacheContexts($cache_contexts);
|
Chris@0
|
127 $this->drupalLogout();
|
Chris@0
|
128
|
Chris@0
|
129 // Assert contexts for user2 which has some additional permissions.
|
Chris@0
|
130 $this->drupalLogin($this->adminUser2);
|
Chris@0
|
131 $this->drupalGet('test-page');
|
Chris@0
|
132 $return = $return && $this->assertCacheContexts($cache_contexts);
|
Chris@0
|
133
|
Chris@0
|
134 if ($return) {
|
Chris@0
|
135 $this->pass($message);
|
Chris@0
|
136 }
|
Chris@0
|
137 else {
|
Chris@0
|
138 $this->fail($message);
|
Chris@0
|
139 }
|
Chris@0
|
140 return $return;
|
Chris@0
|
141 }
|
Chris@0
|
142
|
Chris@0
|
143 /**
|
Chris@0
|
144 * Installs a given list of modules and rebuilds the cache.
|
Chris@0
|
145 *
|
Chris@0
|
146 * @param string[] $module_list
|
Chris@0
|
147 * An array of module names.
|
Chris@0
|
148 */
|
Chris@0
|
149 protected function installExtraModules(array $module_list) {
|
Chris@0
|
150 \Drupal::service('module_installer')->install($module_list);
|
Chris@0
|
151
|
Chris@0
|
152 // Installing modules updates the container and needs a router rebuild.
|
Chris@0
|
153 $this->container = \Drupal::getContainer();
|
Chris@0
|
154 $this->container->get('router.builder')->rebuildIfNeeded();
|
Chris@0
|
155 }
|
Chris@0
|
156
|
Chris@0
|
157 }
|