View source
<?php
namespace Drupal\Tests\workbench_access\Functional;
use Drupal\menu_link_content\Entity\MenuLinkContent;
use Drupal\workbench_access\Entity\AccessSchemeInterface;
use Drupal\Tests\BrowserTestBase;
use Drupal\Tests\workbench_access\Traits\WorkbenchAccessTestTrait;
class DeleteRoleTest extends BrowserTestBase {
use WorkbenchAccessTestTrait;
protected $defaultTheme = 'stable';
public static $modules = [
'workbench_access',
'node',
'menu_ui',
'link',
'menu_link_content',
'options',
'user',
'system',
];
public function testRoleDelete() {
$this
->setUpContentType();
$scheme = $this
->setUpMenuScheme([
'page',
], [
'main',
]);
$base_link = MenuLinkContent::create([
'title' => 'Link 1',
'link' => [
[
'uri' => 'route:<front>',
],
],
'menu_name' => 'main',
]);
$base_link
->save();
$section_id = $base_link
->getPluginId();
$this
->setUpRole('role_a');
$this
->setUpRole('role_b');
$role_section_storage = $this->container
->get('workbench_access.role_section_storage');
$role_section_storage
->addRole($scheme, 'role_a', [
$section_id,
]);
$role_section_storage
->addRole($scheme, 'role_b', [
$section_id,
]);
$assigned_roles = $this
->getStoredRoles($scheme, $section_id);
$this
->assertCount(2, $assigned_roles, 'The test roles are not assigned to the section.');
$entity_type_manager = $this->container
->get('entity_type.manager');
$role_storage = $entity_type_manager
->getStorage('user_role');
$role_b = $role_storage
->load('role_b');
$role_b
->delete();
$assigned_roles = $this
->getStoredRoles($scheme, $section_id);
$this
->assertCount(1, $assigned_roles, 'The test roles are not assigned to the section.');
}
public function setUpRole($name) {
$this
->createRole([
'access administration pages',
'create page content',
'edit any page content',
'administer menu',
'delete any page content',
'use workbench access',
], $name);
}
public function getStoredRoles(AccessSchemeInterface $scheme, $id) {
$roles = [];
$query = \Drupal::entityTypeManager()
->getStorage('section_association')
->getAggregateQuery()
->condition('access_scheme', $scheme
->id())
->condition('section_id', $id)
->groupBy('role_id.target_id')
->execute();
$rids = array_column($query, 'role_id_target_id');
return array_keys($rids);
}
}