/** * Tests a YAML file containing both static permissions and a callback. */ public function testPermissionsYamlStaticAndCallback() { vfsStreamWrapper::register(); $root = new vfsStreamDirectory('modules'); vfsStreamWrapper::setRoot($root); $this->moduleHandler = $this->getMock('Drupal\\Core\\Extension\\ModuleHandlerInterface'); $this->moduleHandler->expects($this->once())->method('getModuleDirectories')->willReturn(array('module_a' => vfsStream::url('modules/module_a'))); $url = vfsStream::url('modules'); mkdir($url . '/module_a'); file_put_contents($url . '/module_a/module_a.permissions.yml', "'access module a':\n title: 'Access A'\n description: 'bla bla'\npermission_callbacks:\n - 'Drupal\\user\\Tests\\TestPermissionCallbacks::titleDescription'\n"); $modules = array('module_a'); $extensions = array('module_a' => $this->mockModuleExtension('module_a', 'Module a')); $this->moduleHandler->expects($this->any())->method('getImplementations')->with('permission')->willReturn(array()); $this->moduleHandler->expects($this->any())->method('getModuleList')->willReturn(array_flip($modules)); $this->controllerResolver->expects($this->once())->method('getControllerFromDefinition')->with('Drupal\\user\\Tests\\TestPermissionCallbacks::titleDescription')->willReturn(array(new TestPermissionCallbacks(), 'titleDescription')); $this->permissionHandler = new TestPermissionHandler($this->moduleHandler, $this->stringTranslation, $this->controllerResolver); // Setup system_rebuild_module_data(). $this->permissionHandler->setSystemRebuildModuleData($extensions); $actual_permissions = $this->permissionHandler->getPermissions(); $this->assertCount(2, $actual_permissions); $this->assertEquals($actual_permissions['access module a']['title'], 'Access A'); $this->assertEquals($actual_permissions['access module a']['provider'], 'module_a'); $this->assertEquals($actual_permissions['access module a']['description'], 'bla bla'); $this->assertEquals($actual_permissions['access module b']['title'], 'Access B'); $this->assertEquals($actual_permissions['access module b']['provider'], 'module_a'); $this->assertEquals($actual_permissions['access module b']['description'], 'bla bla'); }
/** * Tests permissions sort inside a module. * * @covers ::__construct * @covers ::getPermissions * @covers ::buildPermissionsYaml * @covers ::sortPermissions */ public function testBuildPermissionsSortPerModule() { vfsStreamWrapper::register(); $root = new vfsStreamDirectory('modules'); vfsStreamWrapper::setRoot($root); $this->moduleHandler = $this->getMock('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')]); $this->moduleHandler->expects($this->exactly(3))->method('getName')->will($this->returnValueMap([['module_a', 'Module a'], ['module_b', 'Module b'], ['module_c', 'A Module']])); $url = vfsStream::url('modules'); mkdir($url . '/module_a'); file_put_contents($url . '/module_a/module_a.permissions.yml', <<<EOF access_module_a2: single_description2 access_module_a1: single_description1 EOF ); mkdir($url . '/module_b'); file_put_contents($url . '/module_b/module_b.permissions.yml', "access_module_a3: single_description"); mkdir($url . '/module_c'); file_put_contents($url . '/module_c/module_c.permissions.yml', "access_module_a4: single_description"); $modules = ['module_a', 'module_b', 'module_c']; $this->moduleHandler->expects($this->once())->method('getModuleList')->willReturn(array_flip($modules)); $permissionHandler = new TestPermissionHandler($this->moduleHandler, $this->stringTranslation, $this->controllerResolver); $actual_permissions = $permissionHandler->getPermissions(); $this->assertEquals(['access_module_a4', 'access_module_a1', 'access_module_a2', 'access_module_a3'], array_keys($actual_permissions)); }