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 }