X-Git-Url: http://aleph1.co.uk/gitweb/?a=blobdiff_plain;ds=sidebyside;f=web%2Fcore%2Fmodules%2Fnode%2Ftests%2Fsrc%2FFunctional%2FNodeAccessGrantsCacheContextTest.php;fp=web%2Fcore%2Fmodules%2Fnode%2Ftests%2Fsrc%2FFunctional%2FNodeAccessGrantsCacheContextTest.php;h=fa2116ab875690935955fdf75f27bbd59715eb47;hb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;hp=0000000000000000000000000000000000000000;hpb=57c063afa3f66b07c4bbddc2d6129a96d90f0aad;p=yaffs-website diff --git a/web/core/modules/node/tests/src/Functional/NodeAccessGrantsCacheContextTest.php b/web/core/modules/node/tests/src/Functional/NodeAccessGrantsCacheContextTest.php new file mode 100644 index 000000000..fa2116ab8 --- /dev/null +++ b/web/core/modules/node/tests/src/Functional/NodeAccessGrantsCacheContextTest.php @@ -0,0 +1,138 @@ +drupalCreateNode(); + $this->drupalCreateNode(); + $this->drupalCreateNode(); + $this->drupalCreateNode(); + + // Create user with simple node access permission. The 'node test view' + // permission is implemented and granted by the node_access_test module. + $this->accessUser = $this->drupalCreateUser(['access content overview', 'access content', 'node test view']); + $this->noAccessUser = $this->drupalCreateUser(['access content overview', 'access content']); + $this->noAccessUser2 = $this->drupalCreateUser(['access content overview', 'access content']); + + $this->userMapping = [ + 1 => $this->rootUser, + 2 => $this->accessUser, + 3 => $this->noAccessUser, + ]; + } + + /** + * Asserts that for each given user, the expected cache context is returned. + * + * @param array $expected + * Expected values, keyed by user ID, expected cache contexts as values. + */ + protected function assertUserCacheContext(array $expected) { + foreach ($expected as $uid => $context) { + if ($uid > 0) { + $this->drupalLogin($this->userMapping[$uid]); + } + $this->pass('Asserting cache context for user ' . $uid . '.'); + $this->assertIdentical($context, $this->container->get('cache_context.user.node_grants')->getContext('view')); + } + $this->drupalLogout(); + } + + /** + * Tests NodeAccessGrantsCacheContext::getContext(). + */ + public function testCacheContext() { + $this->assertUserCacheContext([ + 0 => 'view.all:0;node_access_test_author:0;node_access_all:0', + 1 => 'all', + 2 => 'view.all:0;node_access_test_author:2;node_access_test:8888,8889', + 3 => 'view.all:0;node_access_test_author:3', + ]); + + // Grant view to all nodes (because nid = 0) for users in the + // 'node_access_all' realm. + $record = [ + 'nid' => 0, + 'gid' => 0, + 'realm' => 'node_access_all', + 'grant_view' => 1, + 'grant_update' => 0, + 'grant_delete' => 0, + ]; + db_insert('node_access')->fields($record)->execute(); + + // Put user accessUser (uid 0) in the realm. + \Drupal::state()->set('node_access_test.no_access_uid', 0); + drupal_static_reset('node_access_view_all_nodes'); + $this->assertUserCacheContext([ + 0 => 'view.all', + 1 => 'all', + 2 => 'view.all:0;node_access_test_author:2;node_access_test:8888,8889', + 3 => 'view.all:0;node_access_test_author:3', + ]); + + // Put user accessUser (uid 2) in the realm. + \Drupal::state()->set('node_access_test.no_access_uid', $this->accessUser->id()); + drupal_static_reset('node_access_view_all_nodes'); + $this->assertUserCacheContext([ + 0 => 'view.all:0;node_access_test_author:0', + 1 => 'all', + 2 => 'view.all', + 3 => 'view.all:0;node_access_test_author:3', + ]); + + // Put user noAccessUser (uid 3) in the realm. + \Drupal::state()->set('node_access_test.no_access_uid', $this->noAccessUser->id()); + drupal_static_reset('node_access_view_all_nodes'); + $this->assertUserCacheContext([ + 0 => 'view.all:0;node_access_test_author:0', + 1 => 'all', + 2 => 'view.all:0;node_access_test_author:2;node_access_test:8888,8889', + 3 => 'view.all', + ]); + + // Uninstall the node_access_test module + $this->container->get('module_installer')->uninstall(['node_access_test']); + drupal_static_reset('node_access_view_all_nodes'); + $this->assertUserCacheContext([ + 0 => 'view.all', + 1 => 'all', + 2 => 'view.all', + 3 => 'view.all', + ]); + } + +}