function EntityPermissionsFormTest::testPermissionsByProvider

Same name and namespace in other branches
  1. 10 core/modules/user/tests/src/Unit/Form/EntityPermissionsFormTest.php \Drupal\Tests\user\Unit\Form\EntityPermissionsFormTest::testPermissionsByProvider()
  2. 11.x core/modules/user/tests/src/Unit/Form/EntityPermissionsFormTest.php \Drupal\Tests\user\Unit\Form\EntityPermissionsFormTest::testPermissionsByProvider()

Tests generating the permissions list.

This is really a test of the protected method permissionsByProvider(). Call the public method access() with an object $bundle, so that it skips most of the logic in that function.

@dataProvider providerTestPermissionsByProvider @covers ::access() @covers ::permissionsByProvider()

Parameters

string $dependency_name: The test permission has a direct dependency on this.

bool $found: TRUE if there is a permission to be managed by the form.

File

core/modules/user/tests/src/Unit/Form/EntityPermissionsFormTest.php, line 43

Class

EntityPermissionsFormTest
Tests the permissions administration form for a bundle.

Namespace

Drupal\Tests\user\Unit\Form

Code

public function testPermissionsByProvider(string $dependency_name, bool $found) {
    // Mock the constructor parameters.
    $prophecy = $this->prophesize(PermissionHandlerInterface::class);
    $prophecy->getPermissions()
        ->willReturn([
        'permission name' => [
            'title' => 'permission display name',
            'provider' => 'some module',
            'dependencies' => [
                'config' => [
                    $dependency_name,
                ],
            ],
        ],
    ]);
    $permission_handler = $prophecy->reveal();
    $role_storage = $this->prophesize(RoleStorageInterface::class)
        ->reveal();
    $module_handler = $this->prophesize(ModuleHandlerInterface::class)
        ->reveal();
    $prophecy = $this->prophesize(ConfigManagerInterface::class);
    $prophecy->getConfigEntitiesToChangeOnDependencyRemoval('config', [
        'node.type.article',
    ])
        ->willReturn([
        'delete' => [
            new ConfigEntityDependency('core.entity_view_display.node.article.full'),
            new ConfigEntityDependency('field.field.node.article.body'),
        ],
    ]);
    $config_manager = $prophecy->reveal();
    $prophecy = $this->prophesize(EntityTypeInterface::class);
    $prophecy->getPermissionGranularity()
        ->willReturn('entity_type');
    $entity_type = $prophecy->reveal();
    $prophecy = $this->prophesize(EntityTypeManagerInterface::class);
    $prophecy->getDefinition('entity_type')
        ->willReturn($entity_type);
    $entity_type_manager = $prophecy->reveal();
    $bundle_form = new EntityPermissionsForm($permission_handler, $role_storage, $module_handler, $config_manager, $entity_type_manager);
    // Mock the method parameters.
    $route = new Route('some.path');
    $route_match = $this->prophesize(RouteMatchInterface::class)
        ->reveal();
    $prophecy = $this->prophesize(EntityTypeInterface::class);
    $prophecy->getBundleOf()
        ->willReturn('entity_type');
    $bundle_type = $prophecy->reveal();
    $prophecy = $this->prophesize(EntityInterface::class);
    $prophecy->getEntityType()
        ->willReturn($bundle_type);
    $prophecy->getConfigDependencyName()
        ->willReturn('node.type.article');
    $bundle = $prophecy->reveal();
    $access_actual = $bundle_form->access($route, $route_match, $bundle);
    $this->assertEquals($found ? AccessResult::allowed() : AccessResult::neutral(), $access_actual);
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.