annotate core/modules/user/tests/src/Unit/PermissionAccessCheckTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
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 }