Mercurial > hg > isophonics-drupal-site
comparison core/modules/user/tests/src/Unit/PermissionAccessCheckTest.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 129ea1e6d783 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4c8ae668cc8c |
---|---|
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 } |