Chris@0: drupalCreateNode(); Chris@0: $this->drupalCreateNode(); Chris@0: $this->drupalCreateNode(); Chris@0: $this->drupalCreateNode(); Chris@0: Chris@0: // Create user with simple node access permission. The 'node test view' Chris@0: // permission is implemented and granted by the node_access_test module. Chris@0: $this->accessUser = $this->drupalCreateUser(['access content overview', 'access content', 'node test view']); Chris@0: $this->noAccessUser = $this->drupalCreateUser(['access content overview', 'access content']); Chris@0: $this->noAccessUser2 = $this->drupalCreateUser(['access content overview', 'access content']); Chris@0: Chris@0: $this->userMapping = [ Chris@0: 1 => $this->rootUser, Chris@0: 2 => $this->accessUser, Chris@0: 3 => $this->noAccessUser, Chris@0: ]; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Asserts that for each given user, the expected cache context is returned. Chris@0: * Chris@0: * @param array $expected Chris@0: * Expected values, keyed by user ID, expected cache contexts as values. Chris@0: */ Chris@0: protected function assertUserCacheContext(array $expected) { Chris@0: foreach ($expected as $uid => $context) { Chris@0: if ($uid > 0) { Chris@0: $this->drupalLogin($this->userMapping[$uid]); Chris@0: } Chris@0: $this->pass('Asserting cache context for user ' . $uid . '.'); Chris@0: $this->assertIdentical($context, $this->container->get('cache_context.user.node_grants')->getContext('view')); Chris@0: } Chris@0: $this->drupalLogout(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests NodeAccessGrantsCacheContext::getContext(). Chris@0: */ Chris@0: public function testCacheContext() { Chris@0: $this->assertUserCacheContext([ Chris@0: 0 => 'view.all:0;node_access_test_author:0;node_access_all:0', Chris@0: 1 => 'all', Chris@0: 2 => 'view.all:0;node_access_test_author:2;node_access_test:8888,8889', Chris@0: 3 => 'view.all:0;node_access_test_author:3', Chris@0: ]); Chris@0: Chris@0: // Grant view to all nodes (because nid = 0) for users in the Chris@0: // 'node_access_all' realm. Chris@0: $record = [ Chris@0: 'nid' => 0, Chris@0: 'gid' => 0, Chris@0: 'realm' => 'node_access_all', Chris@0: 'grant_view' => 1, Chris@0: 'grant_update' => 0, Chris@0: 'grant_delete' => 0, Chris@0: ]; Chris@18: Database::getConnection()->insert('node_access')->fields($record)->execute(); Chris@0: Chris@0: // Put user accessUser (uid 0) in the realm. Chris@0: \Drupal::state()->set('node_access_test.no_access_uid', 0); Chris@0: drupal_static_reset('node_access_view_all_nodes'); Chris@0: $this->assertUserCacheContext([ Chris@0: 0 => 'view.all', Chris@0: 1 => 'all', Chris@0: 2 => 'view.all:0;node_access_test_author:2;node_access_test:8888,8889', Chris@0: 3 => 'view.all:0;node_access_test_author:3', Chris@0: ]); Chris@0: Chris@0: // Put user accessUser (uid 2) in the realm. Chris@0: \Drupal::state()->set('node_access_test.no_access_uid', $this->accessUser->id()); Chris@0: drupal_static_reset('node_access_view_all_nodes'); Chris@0: $this->assertUserCacheContext([ Chris@0: 0 => 'view.all:0;node_access_test_author:0', Chris@0: 1 => 'all', Chris@0: 2 => 'view.all', Chris@0: 3 => 'view.all:0;node_access_test_author:3', Chris@0: ]); Chris@0: Chris@0: // Put user noAccessUser (uid 3) in the realm. Chris@0: \Drupal::state()->set('node_access_test.no_access_uid', $this->noAccessUser->id()); Chris@0: drupal_static_reset('node_access_view_all_nodes'); Chris@0: $this->assertUserCacheContext([ Chris@0: 0 => 'view.all:0;node_access_test_author:0', Chris@0: 1 => 'all', Chris@0: 2 => 'view.all:0;node_access_test_author:2;node_access_test:8888,8889', Chris@0: 3 => 'view.all', Chris@0: ]); Chris@0: Chris@0: // Uninstall the node_access_test module Chris@0: $this->container->get('module_installer')->uninstall(['node_access_test']); Chris@0: drupal_static_reset('node_access_view_all_nodes'); Chris@0: $this->assertUserCacheContext([ Chris@0: 0 => 'view.all', Chris@0: 1 => 'all', Chris@0: 2 => 'view.all', Chris@0: 3 => 'view.all', Chris@0: ]); Chris@0: } Chris@0: Chris@0: }