annotate core/modules/node/tests/src/Functional/NodeAccessGrantsCacheContextTest.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children af1871eacc83
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\Tests\node\Functional;
Chris@0 4
Chris@0 5 /**
Chris@0 6 * Tests the node access grants cache context service.
Chris@0 7 *
Chris@0 8 * @group node
Chris@0 9 * @group Cache
Chris@0 10 */
Chris@0 11 class NodeAccessGrantsCacheContextTest extends NodeTestBase {
Chris@0 12
Chris@0 13 /**
Chris@0 14 * Modules to enable.
Chris@0 15 *
Chris@0 16 * @var array
Chris@0 17 */
Chris@0 18 public static $modules = ['node_access_test'];
Chris@0 19
Chris@0 20 /**
Chris@0 21 * User with permission to view content.
Chris@0 22 */
Chris@0 23 protected $accessUser;
Chris@0 24
Chris@0 25 /**
Chris@0 26 * User without permission to view content.
Chris@0 27 */
Chris@0 28 protected $noAccessUser;
Chris@0 29
Chris@0 30 /**
Chris@0 31 * {@inheritdoc}
Chris@0 32 */
Chris@0 33 protected function setUp() {
Chris@0 34 parent::setUp();
Chris@0 35
Chris@0 36 node_access_rebuild();
Chris@0 37
Chris@0 38 // Create some content.
Chris@0 39 $this->drupalCreateNode();
Chris@0 40 $this->drupalCreateNode();
Chris@0 41 $this->drupalCreateNode();
Chris@0 42 $this->drupalCreateNode();
Chris@0 43
Chris@0 44 // Create user with simple node access permission. The 'node test view'
Chris@0 45 // permission is implemented and granted by the node_access_test module.
Chris@0 46 $this->accessUser = $this->drupalCreateUser(['access content overview', 'access content', 'node test view']);
Chris@0 47 $this->noAccessUser = $this->drupalCreateUser(['access content overview', 'access content']);
Chris@0 48 $this->noAccessUser2 = $this->drupalCreateUser(['access content overview', 'access content']);
Chris@0 49
Chris@0 50 $this->userMapping = [
Chris@0 51 1 => $this->rootUser,
Chris@0 52 2 => $this->accessUser,
Chris@0 53 3 => $this->noAccessUser,
Chris@0 54 ];
Chris@0 55 }
Chris@0 56
Chris@0 57 /**
Chris@0 58 * Asserts that for each given user, the expected cache context is returned.
Chris@0 59 *
Chris@0 60 * @param array $expected
Chris@0 61 * Expected values, keyed by user ID, expected cache contexts as values.
Chris@0 62 */
Chris@0 63 protected function assertUserCacheContext(array $expected) {
Chris@0 64 foreach ($expected as $uid => $context) {
Chris@0 65 if ($uid > 0) {
Chris@0 66 $this->drupalLogin($this->userMapping[$uid]);
Chris@0 67 }
Chris@0 68 $this->pass('Asserting cache context for user ' . $uid . '.');
Chris@0 69 $this->assertIdentical($context, $this->container->get('cache_context.user.node_grants')->getContext('view'));
Chris@0 70 }
Chris@0 71 $this->drupalLogout();
Chris@0 72 }
Chris@0 73
Chris@0 74 /**
Chris@0 75 * Tests NodeAccessGrantsCacheContext::getContext().
Chris@0 76 */
Chris@0 77 public function testCacheContext() {
Chris@0 78 $this->assertUserCacheContext([
Chris@0 79 0 => 'view.all:0;node_access_test_author:0;node_access_all:0',
Chris@0 80 1 => 'all',
Chris@0 81 2 => 'view.all:0;node_access_test_author:2;node_access_test:8888,8889',
Chris@0 82 3 => 'view.all:0;node_access_test_author:3',
Chris@0 83 ]);
Chris@0 84
Chris@0 85 // Grant view to all nodes (because nid = 0) for users in the
Chris@0 86 // 'node_access_all' realm.
Chris@0 87 $record = [
Chris@0 88 'nid' => 0,
Chris@0 89 'gid' => 0,
Chris@0 90 'realm' => 'node_access_all',
Chris@0 91 'grant_view' => 1,
Chris@0 92 'grant_update' => 0,
Chris@0 93 'grant_delete' => 0,
Chris@0 94 ];
Chris@0 95 db_insert('node_access')->fields($record)->execute();
Chris@0 96
Chris@0 97 // Put user accessUser (uid 0) in the realm.
Chris@0 98 \Drupal::state()->set('node_access_test.no_access_uid', 0);
Chris@0 99 drupal_static_reset('node_access_view_all_nodes');
Chris@0 100 $this->assertUserCacheContext([
Chris@0 101 0 => 'view.all',
Chris@0 102 1 => 'all',
Chris@0 103 2 => 'view.all:0;node_access_test_author:2;node_access_test:8888,8889',
Chris@0 104 3 => 'view.all:0;node_access_test_author:3',
Chris@0 105 ]);
Chris@0 106
Chris@0 107 // Put user accessUser (uid 2) in the realm.
Chris@0 108 \Drupal::state()->set('node_access_test.no_access_uid', $this->accessUser->id());
Chris@0 109 drupal_static_reset('node_access_view_all_nodes');
Chris@0 110 $this->assertUserCacheContext([
Chris@0 111 0 => 'view.all:0;node_access_test_author:0',
Chris@0 112 1 => 'all',
Chris@0 113 2 => 'view.all',
Chris@0 114 3 => 'view.all:0;node_access_test_author:3',
Chris@0 115 ]);
Chris@0 116
Chris@0 117 // Put user noAccessUser (uid 3) in the realm.
Chris@0 118 \Drupal::state()->set('node_access_test.no_access_uid', $this->noAccessUser->id());
Chris@0 119 drupal_static_reset('node_access_view_all_nodes');
Chris@0 120 $this->assertUserCacheContext([
Chris@0 121 0 => 'view.all:0;node_access_test_author:0',
Chris@0 122 1 => 'all',
Chris@0 123 2 => 'view.all:0;node_access_test_author:2;node_access_test:8888,8889',
Chris@0 124 3 => 'view.all',
Chris@0 125 ]);
Chris@0 126
Chris@0 127 // Uninstall the node_access_test module
Chris@0 128 $this->container->get('module_installer')->uninstall(['node_access_test']);
Chris@0 129 drupal_static_reset('node_access_view_all_nodes');
Chris@0 130 $this->assertUserCacheContext([
Chris@0 131 0 => 'view.all',
Chris@0 132 1 => 'all',
Chris@0 133 2 => 'view.all',
Chris@0 134 3 => 'view.all',
Chris@0 135 ]);
Chris@0 136 }
Chris@0 137
Chris@0 138 }