You are here

public function EntityPermissionsFormTest::testPermissionsByProvider in Drupal 10

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);
}