You are here

public function OgRoleManagerTest::testLoadRoleByPermissions in Organic groups 8

Tests searching roles by a given permission list.

@covers ::getRolesByPermissions

File

tests/src/Kernel/OgRoleManagerTest.php, line 116

Class

OgRoleManagerTest
Kernel tests for the OG role manager service.

Namespace

Drupal\Tests\og\Kernel

Code

public function testLoadRoleByPermissions() {
  OgRole::create()
    ->setName(mb_strtolower($this
    ->randomMachineName()))
    ->setLabel($this
    ->randomString())
    ->setGroupType('node')
    ->setGroupBundle('node_group_type')
    ->grantPermission('access content')
    ->grantPermission('view own unpublished content')
    ->save();
  $og_role3 = OgRole::create();
  $og_role3
    ->setName(mb_strtolower($this
    ->randomMachineName()))
    ->setLabel($this
    ->randomString())
    ->setGroupType('entity_test')
    ->setGroupBundle('entity_test_group_type')
    ->grantPermission('access content')
    ->grantPermission(OgAccess::ADMINISTER_GROUP_PERMISSION)
    ->grantPermission('edit any group entity_test')
    ->save();
  $roles = $this->ogRoleManager
    ->getRolesByPermissions([
    'access content',
  ]);
  $this
    ->assertCount(3, $roles);

  // Filter based on the entity type id and bundle.
  $roles = $this->ogRoleManager
    ->getRolesByPermissions([
    OgAccess::ADMINISTER_GROUP_PERMISSION,
  ], 'entity_test', 'entity_test_group_type');
  $this
    ->assertCount(1, $roles);
  $actual_role = reset($roles);
  $this
    ->assertEquals($actual_role
    ->id(), $og_role3
    ->id());

  // By default, roles are that match all of the passed permissions.
  $roles = $this->ogRoleManager
    ->getRolesByPermissions([
    'access content',
    OgAccess::ADMINISTER_GROUP_PERMISSION,
  ]);
  $this
    ->assertCount(2, $roles);

  // Request roles that match one or more of the passed permissions.
  $roles = $this->ogRoleManager
    ->getRolesByPermissions([
    'access content',
    OgAccess::ADMINISTER_GROUP_PERMISSION,
  ], NULL, NULL, FALSE);
  $this
    ->assertCount(3, $roles);

  // Require roles with all of the passed permissions and in certain entity
  // type ID and bundle.
  $roles = $this->ogRoleManager
    ->getRolesByPermissions([
    'access content',
    OgAccess::ADMINISTER_GROUP_PERMISSION,
  ], 'entity_test', 'entity_test_group_type', TRUE);
  $this
    ->assertCount(1, $roles);
}