annotate core/modules/toolbar/tests/src/Functional/ToolbarCacheContextsTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 1fec387a4317
children
rev   line source
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 }