workbench_access-8.x-1.x-dev/tests/src/Functional/DeleteRoleTest.php
tests/src/Functional/DeleteRoleTest.php
<?php namespace Drupal\Tests\workbench_access\Functional; use Drupal\menu_link_content\Entity\MenuLinkContent; use Drupal\Tests\BrowserTestBase; use Drupal\Tests\workbench_access\Traits\WorkbenchAccessTestTrait; use Drupal\workbench_access\Entity\AccessSchemeInterface; /** * Tests for deleting a role and removing associated data. * * @group workbench_access */ class DeleteRoleTest extends BrowserTestBase { use WorkbenchAccessTestTrait; /** * The default theme. * * @var string */ protected $defaultTheme = 'stark'; /** * {@inheritdoc} */ protected static $modules = [ 'workbench_access', 'node', 'menu_ui', 'link', 'menu_link_content', 'options', 'user', 'system', ]; /** * Tests that deleting a role clears their data from storage. */ 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'); /** @var \Drupal\workbench_access\RoleSectionStorageInterface $role_section_storage */ $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.'); /** @var \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager */ $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.'); } /** * Sets up role that has access to content. * * @param string $name * The machine name for the role: the role id. */ 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); } /** * Tests the storage of role assignments. * * This method is a version of RoleSectionStorage::getRoles() that does not * ensure the roles still exist. * * @param \Drupal\workbench_access\Entity\AccessSchemeInterface $scheme * Access scheme. * @param string $id * The section id. * * @return array * An array of role ids */ public function getStoredRoles(AccessSchemeInterface $scheme, $id) { $query = \Drupal::entityTypeManager()->getStorage('section_association')->getAggregateQuery() ->condition('access_scheme', $scheme->id()) ->condition('section_id', $id) ->accessCheck(FALSE) ->groupBy('role_id.target_id')->execute(); $rids = array_column($query, 'role_id_target_id'); return array_keys($rids); } }