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