You are here

public function PermissionHandlerTest::testBuildPermissionsYamlCallback in Drupal 8

Same name and namespace in other branches
  1. 9 core/modules/user/tests/src/Unit/PermissionHandlerTest.php \Drupal\Tests\user\Unit\PermissionHandlerTest::testBuildPermissionsYamlCallback()
  2. 10 core/modules/user/tests/src/Unit/PermissionHandlerTest.php \Drupal\Tests\user\Unit\PermissionHandlerTest::testBuildPermissionsYamlCallback()

Tests dynamic callback permissions provided by YML files.

@covers ::__construct @covers ::getPermissions @covers ::buildPermissionsYaml

File

core/modules/user/tests/src/Unit/PermissionHandlerTest.php, line 219
Contains \Drupal\Tests\user\Unit\PermissionHandlerTest.

Class

PermissionHandlerTest
Tests the permission handler.

Namespace

Drupal\Tests\user\Unit

Code

public function testBuildPermissionsYamlCallback() {
  vfsStreamWrapper::register();
  $root = new vfsStreamDirectory('modules');
  vfsStreamWrapper::setRoot($root);
  $this->moduleHandler = $this
    ->createMock('Drupal\\Core\\Extension\\ModuleHandlerInterface');
  $this->moduleHandler
    ->expects($this
    ->once())
    ->method('getModuleDirectories')
    ->willReturn([
    'module_a' => vfsStream::url('modules/module_a'),
    'module_b' => vfsStream::url('modules/module_b'),
    'module_c' => vfsStream::url('modules/module_c'),
  ]);
  $url = vfsStream::url('modules');
  mkdir($url . '/module_a');
  file_put_contents($url . '/module_a/module_a.permissions.yml', <<<EOF
permission_callbacks:
  - 'Drupal\\user\\Tests\\TestPermissionCallbacks::singleDescription'
EOF
);
  mkdir($url . '/module_b');
  file_put_contents($url . '/module_b/module_b.permissions.yml', <<<EOF
permission_callbacks:
  - 'Drupal\\user\\Tests\\TestPermissionCallbacks::titleDescription'
  - 'Drupal\\user\\Tests\\TestPermissionCallbacks::titleProvider'
EOF
);
  mkdir($url . '/module_c');
  file_put_contents($url . '/module_c/module_c.permissions.yml', <<<EOF
permission_callbacks:
  - 'Drupal\\user\\Tests\\TestPermissionCallbacks::titleDescriptionRestrictAccess'
EOF
);
  $modules = [
    'module_a',
    'module_b',
    'module_c',
  ];
  $extensions = [
    'module_a' => $this
      ->mockModuleExtension('module_a', 'Module a'),
    'module_b' => $this
      ->mockModuleExtension('module_b', 'Module b'),
    'module_c' => $this
      ->mockModuleExtension('module_c', 'Module c'),
  ];
  $this->moduleHandler
    ->expects($this
    ->any())
    ->method('getImplementations')
    ->with('permission')
    ->willReturn([]);
  $this->moduleHandler
    ->expects($this
    ->any())
    ->method('getModuleList')
    ->willReturn(array_flip($modules));
  $this->controllerResolver
    ->expects($this
    ->at(0))
    ->method('getControllerFromDefinition')
    ->with('Drupal\\user\\Tests\\TestPermissionCallbacks::singleDescription')
    ->willReturn([
    new TestPermissionCallbacks(),
    'singleDescription',
  ]);
  $this->controllerResolver
    ->expects($this
    ->at(1))
    ->method('getControllerFromDefinition')
    ->with('Drupal\\user\\Tests\\TestPermissionCallbacks::titleDescription')
    ->willReturn([
    new TestPermissionCallbacks(),
    'titleDescription',
  ]);
  $this->controllerResolver
    ->expects($this
    ->at(2))
    ->method('getControllerFromDefinition')
    ->with('Drupal\\user\\Tests\\TestPermissionCallbacks::titleProvider')
    ->willReturn([
    new TestPermissionCallbacks(),
    'titleProvider',
  ]);
  $this->controllerResolver
    ->expects($this
    ->at(3))
    ->method('getControllerFromDefinition')
    ->with('Drupal\\user\\Tests\\TestPermissionCallbacks::titleDescriptionRestrictAccess')
    ->willReturn([
    new TestPermissionCallbacks(),
    'titleDescriptionRestrictAccess',
  ]);
  $this->permissionHandler = new PermissionHandler($this->moduleHandler, $this->stringTranslation, $this->controllerResolver);
  $actual_permissions = $this->permissionHandler
    ->getPermissions();
  $this
    ->assertPermissions($actual_permissions);
}