Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\Tests\user\Unit;
|
Chris@0
|
4
|
Chris@0
|
5 use Drupal\Core\Access\AccessResult;
|
Chris@0
|
6 use Drupal\Tests\UnitTestCase;
|
Chris@0
|
7 use Drupal\user\Access\PermissionAccessCheck;
|
Chris@0
|
8 use Symfony\Component\Routing\Route;
|
Chris@0
|
9 use Drupal\Core\Cache\Context\CacheContextsManager;
|
Chris@0
|
10 use Symfony\Component\DependencyInjection\ContainerBuilder;
|
Chris@0
|
11
|
Chris@0
|
12 /**
|
Chris@0
|
13 * @coversDefaultClass \Drupal\user\Access\PermissionAccessCheck
|
Chris@0
|
14 * @group Routing
|
Chris@0
|
15 * @group Access
|
Chris@0
|
16 */
|
Chris@0
|
17 class PermissionAccessCheckTest extends UnitTestCase {
|
Chris@0
|
18
|
Chris@0
|
19 /**
|
Chris@0
|
20 * The tested access checker.
|
Chris@0
|
21 *
|
Chris@0
|
22 * @var \Drupal\user\Access\PermissionAccessCheck
|
Chris@0
|
23 */
|
Chris@0
|
24 public $accessCheck;
|
Chris@0
|
25
|
Chris@0
|
26 /**
|
Chris@0
|
27 * The dependency injection container.
|
Chris@0
|
28 *
|
Chris@0
|
29 * @var \Symfony\Component\DependencyInjection\ContainerBuilder
|
Chris@0
|
30 */
|
Chris@0
|
31 protected $container;
|
Chris@0
|
32
|
Chris@0
|
33 /**
|
Chris@0
|
34 * {@inheritdoc}
|
Chris@0
|
35 */
|
Chris@0
|
36 protected function setUp() {
|
Chris@0
|
37 parent::setUp();
|
Chris@0
|
38
|
Chris@0
|
39 $this->container = new ContainerBuilder();
|
Chris@0
|
40 $cache_contexts_manager = $this->prophesize(CacheContextsManager::class);
|
Chris@0
|
41 $cache_contexts_manager->assertValidTokens()->willReturn(TRUE);
|
Chris@0
|
42 $cache_contexts_manager->reveal();
|
Chris@0
|
43 $this->container->set('cache_contexts_manager', $cache_contexts_manager);
|
Chris@0
|
44 \Drupal::setContainer($this->container);
|
Chris@0
|
45
|
Chris@0
|
46 $this->accessCheck = new PermissionAccessCheck();
|
Chris@0
|
47 }
|
Chris@0
|
48
|
Chris@0
|
49 /**
|
Chris@0
|
50 * Provides data for the testAccess method.
|
Chris@0
|
51 *
|
Chris@0
|
52 * @return array
|
Chris@0
|
53 */
|
Chris@0
|
54 public function providerTestAccess() {
|
Chris@0
|
55 return [
|
Chris@0
|
56 [[], FALSE],
|
Chris@0
|
57 [['_permission' => 'allowed'], TRUE, ['user.permissions']],
|
Chris@0
|
58 [['_permission' => 'denied'], FALSE, ['user.permissions'], "The 'denied' permission is required."],
|
Chris@0
|
59 [['_permission' => 'allowed+denied'], TRUE, ['user.permissions']],
|
Chris@0
|
60 [['_permission' => 'allowed+denied+other'], TRUE, ['user.permissions']],
|
Chris@0
|
61 [['_permission' => 'allowed,denied'], FALSE, ['user.permissions'], "The following permissions are required: 'allowed' AND 'denied'."],
|
Chris@0
|
62 ];
|
Chris@0
|
63 }
|
Chris@0
|
64
|
Chris@0
|
65 /**
|
Chris@0
|
66 * Tests the access check method.
|
Chris@0
|
67 *
|
Chris@0
|
68 * @dataProvider providerTestAccess
|
Chris@0
|
69 * @covers ::access
|
Chris@0
|
70 */
|
Chris@0
|
71 public function testAccess($requirements, $access, array $contexts = [], $message = '') {
|
Chris@0
|
72 $access_result = AccessResult::allowedIf($access)->addCacheContexts($contexts);
|
Chris@0
|
73 if (!empty($message)) {
|
Chris@0
|
74 $access_result->setReason($message);
|
Chris@0
|
75 }
|
Chris@0
|
76 $user = $this->getMock('Drupal\Core\Session\AccountInterface');
|
Chris@0
|
77 $user->expects($this->any())
|
Chris@0
|
78 ->method('hasPermission')
|
Chris@0
|
79 ->will($this->returnValueMap([
|
Chris@0
|
80 ['allowed', TRUE],
|
Chris@0
|
81 ['denied', FALSE],
|
Chris@17
|
82 ['other', FALSE],
|
Chris@0
|
83 ]
|
Chris@0
|
84 ));
|
Chris@0
|
85 $route = new Route('', [], $requirements);
|
Chris@0
|
86
|
Chris@0
|
87 $this->assertEquals($access_result, $this->accessCheck->access($route, $user));
|
Chris@0
|
88 }
|
Chris@0
|
89
|
Chris@0
|
90 }
|