Chris@0: adminUser = $this->drupalCreateUser($this->perms); Chris@0: $this->adminUser2 = $this->drupalCreateUser($this->perms); Chris@0: } Chris@0: Chris@0: /** Chris@14: * Tests toolbar cache integration. Chris@14: */ Chris@14: public function testCacheIntegration() { Chris@14: $this->installExtraModules(['dynamic_page_cache']); Chris@14: $this->drupalLogin($this->adminUser); Chris@14: $this->drupalGet('test-page'); Chris@14: $this->assertSame('MISS', $this->getSession()->getResponseHeader('X-Drupal-Dynamic-Cache')); Chris@14: $this->drupalGet('test-page'); Chris@14: $this->assertSame('HIT', $this->getSession()->getResponseHeader('X-Drupal-Dynamic-Cache')); Chris@14: } Chris@14: Chris@14: /** Chris@0: * Tests toolbar cache contexts. Chris@0: */ Chris@0: public function testToolbarCacheContextsCaller() { Chris@0: // Test with default combination and permission to see toolbar. Chris@0: $this->assertToolbarCacheContexts(['user'], 'Expected cache contexts found for default combination and permission to see toolbar.'); Chris@0: Chris@0: // Test without user toolbar tab. User module is a required module so we have to Chris@0: // manually remove the user toolbar tab. Chris@0: $this->installExtraModules(['toolbar_disable_user_toolbar']); Chris@0: $this->assertToolbarCacheContexts(['user.permissions'], 'Expected cache contexts found without user toolbar tab.'); Chris@0: Chris@0: // Test with the toolbar and contextual enabled. Chris@0: $this->installExtraModules(['contextual']); Chris@0: $this->adminUser2 = $this->drupalCreateUser(array_merge($this->perms, ['access contextual links'])); Chris@0: $this->assertToolbarCacheContexts(['user.permissions'], 'Expected cache contexts found with contextual module enabled.'); Chris@0: \Drupal::service('module_installer')->uninstall(['contextual']); Chris@0: Chris@0: // Test with the tour module enabled. Chris@0: $this->installExtraModules(['tour']); Chris@0: $this->adminUser2 = $this->drupalCreateUser(array_merge($this->perms, ['access tour'])); Chris@0: $this->assertToolbarCacheContexts(['user.permissions'], 'Expected cache contexts found with tour module enabled.'); Chris@0: \Drupal::service('module_installer')->uninstall(['tour']); Chris@0: Chris@0: // Test with shortcut module enabled. Chris@0: $this->installExtraModules(['shortcut']); Chris@0: $this->adminUser2 = $this->drupalCreateUser(array_merge($this->perms, ['access shortcuts', 'administer shortcuts'])); Chris@0: $this->assertToolbarCacheContexts(['user'], 'Expected cache contexts found with shortcut module enabled.'); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests that cache contexts are applied for both users. Chris@0: * Chris@0: * @param string[] $cache_contexts Chris@0: * Expected cache contexts for both users. Chris@0: * @param string $message Chris@0: * (optional) A verbose message to output. Chris@0: * Chris@0: * @return Chris@0: * TRUE if the assertion succeeded, FALSE otherwise. Chris@0: */ Chris@0: protected function assertToolbarCacheContexts(array $cache_contexts, $message = NULL) { Chris@0: // Default cache contexts that should exist on all test cases. Chris@0: $default_cache_contexts = [ Chris@0: 'languages:language_interface', Chris@0: 'theme', Chris@0: 'url.query_args:' . MainContentViewSubscriber::WRAPPER_FORMAT, Chris@0: ]; Chris@0: $cache_contexts = Cache::mergeContexts($default_cache_contexts, $cache_contexts); Chris@0: Chris@0: // Assert contexts for user1 which has only default permissions. Chris@0: $this->drupalLogin($this->adminUser); Chris@0: $this->drupalGet('test-page'); Chris@0: $return = $this->assertCacheContexts($cache_contexts); Chris@0: $this->drupalLogout(); Chris@0: Chris@0: // Assert contexts for user2 which has some additional permissions. Chris@0: $this->drupalLogin($this->adminUser2); Chris@0: $this->drupalGet('test-page'); Chris@0: $return = $return && $this->assertCacheContexts($cache_contexts); Chris@0: Chris@0: if ($return) { Chris@0: $this->pass($message); Chris@0: } Chris@0: else { Chris@0: $this->fail($message); Chris@0: } Chris@0: return $return; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Installs a given list of modules and rebuilds the cache. Chris@0: * Chris@0: * @param string[] $module_list Chris@0: * An array of module names. Chris@0: */ Chris@0: protected function installExtraModules(array $module_list) { Chris@0: \Drupal::service('module_installer')->install($module_list); Chris@0: Chris@0: // Installing modules updates the container and needs a router rebuild. Chris@0: $this->container = \Drupal::getContainer(); Chris@0: $this->container->get('router.builder')->rebuildIfNeeded(); Chris@0: } Chris@0: Chris@0: }