class MenuAccessTest
Same name in other branches
- 9 core/modules/system/tests/src/Functional/Menu/MenuAccessTest.php \Drupal\Tests\system\Functional\Menu\MenuAccessTest
- 8.9.x core/modules/system/tests/src/Functional/Menu/MenuAccessTest.php \Drupal\Tests\system\Functional\Menu\MenuAccessTest
- 10 core/modules/system/tests/src/Functional/Menu/MenuAccessTest.php \Drupal\Tests\system\Functional\Menu\MenuAccessTest
Tests the route access checks on menu links.
@group Menu
Hierarchy
- class \Drupal\Tests\system\Functional\Menu\MenuAccessTest extends \Drupal\Tests\BrowserTestBase
Expanded class hierarchy of MenuAccessTest
File
-
core/
modules/ system/ tests/ src/ Functional/ Menu/ MenuAccessTest.php, line 16
Namespace
Drupal\Tests\system\Functional\MenuView source
class MenuAccessTest extends BrowserTestBase {
/**
* {@inheritdoc}
*/
protected static $modules = [
'block',
'filter',
'toolbar',
'menu_ui',
];
/**
* {@inheritdoc}
*/
protected $defaultTheme = 'stark';
/**
* {@inheritdoc}
*/
protected function setUp() : void {
parent::setUp();
$this->drupalPlaceBlock('local_tasks_block');
}
/**
* Tests menu link for route with access check.
*
* @see \Drupal\menu_test\Access\AccessCheck::access()
*/
public function testMenuBlockLinksAccessCheck() : void {
$this->container
->get('module_installer')
->install([
'menu_test',
]);
$this->drupalPlaceBlock('system_menu_block:account');
// Test that there's link rendered on the route.
$this->drupalGet('menu_test_access_check_session');
$this->assertSession()
->linkExists('Test custom route access check');
// Page is still accessible but there should be no menu link.
$this->drupalGet('menu_test_access_check_session');
$this->assertSession()
->statusCodeEquals(200);
$this->assertSession()
->linkNotExists('Test custom route access check');
// Test that page is no more accessible.
$this->drupalGet('menu_test_access_check_session');
$this->assertSession()
->statusCodeEquals(403);
// Check for access to a restricted local task from a default local task.
$this->drupalGet('foo/asdf');
$this->assertSession()
->statusCodeEquals(200);
$this->assertSession()
->linkByHrefExists('foo/asdf');
$this->assertSession()
->linkByHrefExists('foo/asdf/b');
$this->assertSession()
->linkByHrefNotExists('foo/asdf/c');
// Attempt to access a restricted local task.
$this->drupalGet('foo/asdf/c');
$this->assertSession()
->statusCodeEquals(403);
// No tab linking to foo/asdf should be found.
$this->assertSession()
->elementNotExists('xpath', $this->assertSession()
->buildXPathQuery('//ul[@class="tabs primary"]/li/a[@href=:href]', [
':href' => Url::fromRoute('menu_test.router_test1', [
'bar' => 'asdf',
])->toString(),
]));
$this->assertSession()
->linkByHrefNotExists('foo/asdf/b');
$this->assertSession()
->linkByHrefNotExists('foo/asdf/c');
}
/**
* Test routes implementing _access_admin_menu_block_page.
*
* @covers \Drupal\system\EventSubscriber\AccessRouteAlterSubscriber::accessAdminMenuBlockPage
* @covers \Drupal\system\Access\SystemAdminMenuBlockAccessCheck::access
*/
public function testSystemAdminMenuBlockAccessCheck() : void {
// Create an admin user.
$adminUser = $this->drupalCreateUser([], NULL, TRUE);
// Create a user with 'administer menu' permission.
$menuAdmin = $this->drupalCreateUser([
'access administration pages',
'administer menu',
]);
// Create a user with 'administer filters' permission.
$filterAdmin = $this->drupalCreateUser([
'access administration pages',
'administer filters',
]);
// Create a user with 'access administration pages' permission.
$webUser = $this->drupalCreateUser([
'access administration pages',
]);
// An admin user has access to all parent pages.
$this->drupalLogin($adminUser);
$this->assertMenuItemRoutesAccess(200, 'admin/structure', 'admin/people');
// This user has access to administer menus so the structure parent page
// should be accessible.
$this->drupalLogin($menuAdmin);
$this->assertMenuItemRoutesAccess(200, 'admin/structure');
$this->assertMenuItemRoutesAccess(403, 'admin/people');
// This user has access to administer filters so the config parent page
// should be accessible.
$this->drupalLogin($filterAdmin);
$this->assertMenuItemRoutesAccess(200, 'admin/config');
$this->assertMenuItemRoutesAccess(403, 'admin/people');
// This user doesn't have access to any of the child pages, so the parent
// pages should not be accessible.
$this->drupalLogin($webUser);
$this->assertMenuItemRoutesAccess(403, 'admin/structure', 'admin/people', 'admin/config');
// The test cases below depend on routes, menu items and permissions added
// by the menu_test module. It is not enabled before this to ensure that any
// other configuration it provides that we don't need for these test cases
// does not affect the assertions above.
$this->container
->get('module_installer')
->install([
'menu_test',
]);
// Test access to routes in the admin menu. The routes are in a menu tree
// of the hierarchy:
// menu_test.parent_test
// -menu_test.child1_test
// --menu_test.grand_child1_test
// -menu_test.child2_test
// --menu_test.grand_child2_test
// --menu_test.grand_child3_test
// -menu_test.child3_test_block
// -menu_test.child4_test_overview
// -menu_test.child4_test
// --menu_test.grand_child4_test
// All routes in this tree except the "grand_child" and "child4_test" routes
// should have the '_access_admin_menu_block_page' requirement which denies
// access unless the user has access to a menu item under that route. Route
// 'menu_test.child3_test_block' and 'menu_test.child4_test_overview' have
// no menu items underneath it so no user should have access to these routes
// even though they have the requirement:
// `_access: 'TRUE'`.
$tree_routes = [
'menu_test.parent_test',
'menu_test.child1_test',
'menu_test.child2_test',
'menu_test.child3_test_block',
'menu_test.child4_test',
'menu_test.child4_test_overview',
'menu_test.grand_child1_test',
'menu_test.grand_child2_test',
'menu_test.grand_child3_test',
'menu_test.great_grand_child1_test',
'menu_test.grand_child4_test',
];
// Create a user with access to only the top level parent.
$parentUser = $this->drupalCreateUser([
'access parent test page',
]);
// Create a user with access to the parent and child routes but none of the
// grand child routes.
$childOnlyUser = $this->drupalCreateUser([
'access parent test page',
'access child1 test page',
'access child2 test page',
]);
// Create 3 users all with access the parent and child but only 1 grand
// child route.
$grandChild1User = $this->drupalCreateUser([
'access parent test page',
'access child1 test page',
'access child2 test page',
'access grand child1 test page',
]);
$grandChild2User = $this->drupalCreateUser([
'access parent test page',
'access child1 test page',
'access child2 test page',
'access grand child2 test page',
]);
$grandChild3User = $this->drupalCreateUser([
'access parent test page',
'access child1 test page',
'access child2 test page',
'access grand child3 test page',
]);
$greatGrandChild1User = $this->drupalCreateUser([
'access parent test page',
'access child1 test page',
'access grand child1 test page',
'access great grand child1 test page',
]);
// Create a user with access only to a single child, non overview page along
// with its child (a grand child).
$grandChild4User = $this->drupalCreateUser([
'access parent test page',
'access child4 test page',
'access grand child4 test page',
]);
// Create a user with access only to a non overview child page.
$child4NoGrandChild4User = $this->drupalCreateUser([
'access parent test page',
'access child4 test page',
]);
$noParentAccessUser = $this->drupalCreateUser([
'access child1 test page',
'access child2 test page',
'access child4 test page',
'access grand child1 test page',
'access grand child2 test page',
'access grand child3 test page',
'access great grand child1 test page',
'access grand child4 test page',
]);
// Users that do not have access to any of the 'grand_child' routes where
// the 'child' routes have the '_access_admin_menu_block_page' requirement
// will not have access to any of the routes in the tree.
$this->assertUserRoutesAccess($parentUser, [], $tree_routes);
$this->assertUserRoutesAccess($childOnlyUser, [], $tree_routes);
// A user that does not have access to the top level parent but has access
// to all the other routes will have access to all routes except the parent
// and 'menu_test.child3_test_block', because it has no items underneath in
// the menu.
$this->assertUserRoutesAccess($noParentAccessUser, array_diff($tree_routes, [
'menu_test.parent_test',
'menu_test.child3_test_block',
]), $tree_routes);
// Route using overview should have access to the grand child to access the
// current route.
$this->assertUserRoutesAccess($grandChild1User, [], $tree_routes);
$this->assertUserRoutesAccess($greatGrandChild1User, [
'menu_test.parent_test',
'menu_test.child1_test',
'menu_test.grand_child1_test',
'menu_test.great_grand_child1_test',
], $tree_routes);
// Users who have only access to one grand child route should have access
// only to that route and its parents.
$this->assertUserRoutesAccess($grandChild2User, [
'menu_test.parent_test',
'menu_test.child2_test',
'menu_test.grand_child2_test',
], $tree_routes);
$this->assertUserRoutesAccess($grandChild3User, [
'menu_test.parent_test',
'menu_test.child2_test',
'menu_test.grand_child3_test',
], $tree_routes);
// Users who have only access to one grand child route should have access
// only to that route and its parents.
$this->assertUserRoutesAccess($grandChild4User, [
'menu_test.parent_test',
'menu_test.child4_test',
'menu_test.child4_test_overview',
'menu_test.grand_child4_test',
], $tree_routes);
// Users who don't have access to a grand child route, but where the child
// route does not have the '_access_admin_menu_block_page' requirement,
// should have access to that child route, but not the grand child.
$this->assertUserRoutesAccess($child4NoGrandChild4User, [
'menu_test.parent_test',
'menu_test.child4_test',
'menu_test.child4_test_overview',
], $tree_routes);
// Test a route that has parameter defined in the menu item.
$this->drupalLogin($parentUser);
$this->assertMenuItemRoutesAccess(403, Url::fromRoute('menu_test.parent_test_param', [
'param' => 'param-in-menu',
]));
$this->drupalLogin($childOnlyUser);
$this->assertMenuItemRoutesAccess(200, Url::fromRoute('menu_test.parent_test_param', [
'param' => 'param-in-menu',
]));
// Test a route that does not have a parameter defined in the menu item but
// uses the route default parameter.
// @todo Change the following test case to use a parent menu item that also
// uses the routes default parameter in https://drupal.org/i/3359511.
$this->drupalLogin($parentUser);
$this->assertMenuItemRoutesAccess(403, Url::fromRoute('menu_test.parent_test_param', [
'param' => 'child_uses_default',
]), Url::fromRoute('menu_test.child_test_param', [
'param' => 'child_uses_default',
]));
$this->drupalLogin($childOnlyUser);
$this->assertMenuItemRoutesAccess(200, Url::fromRoute('menu_test.parent_test_param', [
'param' => 'child_uses_default',
]), Url::fromRoute('menu_test.child_test_param', [
'param' => 'child_uses_default',
]));
// Test a route that does have a parameter defined in the menu item and that
// parameter value is equal to the default value specific in the route.
$this->drupalLogin($parentUser);
$this->assertMenuItemRoutesAccess(403, Url::fromRoute('menu_test.parent_test_param_explicit', [
'param' => 'my_default',
]), Url::fromRoute('menu_test.child_test_param_explicit', [
'param' => 'my_default',
]));
$this->drupalLogin($childOnlyUser);
$this->assertMenuItemRoutesAccess(200, Url::fromRoute('menu_test.parent_test_param_explicit', [
'param' => 'my_default',
]), Url::fromRoute('menu_test.child_test_param_explicit', [
'param' => 'my_default',
]));
// If we try to access a route that takes a parameter but route is not in the
// with that parameter we should always be denied access because the sole
// purpose of \Drupal\system\Controller\SystemController::systemAdminMenuBlockPage
// is to display items in the menu.
$this->drupalLogin($parentUser);
$this->assertMenuItemRoutesAccess(403, Url::fromRoute('menu_test.parent_test_param', [
'param' => 'any-other',
]), Url::fromRoute('menu_test.child_test_param', [
'param' => 'any-other',
]));
$this->drupalLogin($childOnlyUser);
$this->assertMenuItemRoutesAccess(403, Url::fromRoute('menu_test.parent_test_param', [
'param' => 'any-other',
]));
// $childOnlyUser has the 'access child1 test page' permission.
$this->assertMenuItemRoutesAccess(200, Url::fromRoute('menu_test.child_test_param', [
'param' => 'any-other',
]));
}
/**
* Asserts route requests connected to menu items have the expected access.
*
* @param int $expected_status
* The expected request status.
* @param string|\Drupal\Core\Url ...$paths
* The paths as passed to \Drupal\Tests\UiHelperTrait::drupalGet().
*/
private function assertMenuItemRoutesAccess(int $expected_status, string|Url ...$paths) : void {
foreach ($paths as $path) {
$this->drupalGet($path);
if (!is_string($path)) {
$path = $path->toString();
}
// We don't use \Behat\Mink\WebAssert::statusCodeEquals() here because it
// would not allow us to know which path failed.
$this->assertSame($expected_status, $this->getSession()
->getStatusCode(), "Route {$path} has expected status code");
}
}
/**
* {@inheritdoc}
*/
protected function drupalGet($path, array $options = [], array $headers = []) {
$return = parent::drupalGet($path, $options, $headers);
$this->assertSession()
->pageTextNotContains('You do not have any administrative items.');
return $return;
}
/**
* Asserts which routes a user has access to.
*
* @param \Drupal\Core\Session\AccountInterface $user
* The user account for which to check access.
* @param array $expectedAccessibleRoutes
* The routes the user should have access to.
* @param array $allRoutes
* The routes to check.
*/
private function assertUserRoutesAccess(AccountInterface $user, array $expectedAccessibleRoutes, array $allRoutes) : void {
$this->drupalLogin($user);
$expectedInaccessibleRoutes = array_diff($allRoutes, $expectedAccessibleRoutes);
$this->assertEmpty(array_diff($expectedAccessibleRoutes, $allRoutes));
$actualAccessibleRoutes = [];
$actualInaccessibleRoutes = [];
foreach ($allRoutes as $route) {
$this->drupalGet(Url::fromRoute($route));
$requestStatus = $this->getSession()
->getStatusCode();
switch ($requestStatus) {
case 200:
$actualAccessibleRoutes[] = $route;
break;
case 403:
$actualInaccessibleRoutes[] = $route;
break;
default:
throw new \UnexpectedValueException("Unexpected status code {$requestStatus} for route {$route}");
}
}
$debug = fn($accessibleRoutes, $inaccessibleRoutes) => "\nAccessible routes: " . implode(', ', $accessibleRoutes) . "\nInaccessible routes: " . implode(', ', $inaccessibleRoutes);
$expected = $debug($expectedAccessibleRoutes, $expectedInaccessibleRoutes);
$actual = $debug($actualAccessibleRoutes, $actualInaccessibleRoutes);
$this->assertSession()
->assert($expected === $actual, "Routes do not match. \nExpected routes:{$expected}\nActual routes: {$actual}");
}
}
Members
Title Sort descending | Modifiers | Object type | Summary | Member alias | Overriden Title | Overrides |
---|---|---|---|---|---|---|
BlockCreationTrait::placeBlock | protected | function | Creates a block instance based on default settings. | Aliased as: drupalPlaceBlock | ||
BrowserHtmlDebugTrait::$htmlOutputBaseUrl | protected | property | The Base URI to use for links to the output files. | |||
BrowserHtmlDebugTrait::$htmlOutputClassName | protected | property | Class name for HTML output logging. | |||
BrowserHtmlDebugTrait::$htmlOutputCounter | protected | property | Counter for HTML output logging. | |||
BrowserHtmlDebugTrait::$htmlOutputCounterStorage | protected | property | Counter storage for HTML output logging. | |||
BrowserHtmlDebugTrait::$htmlOutputDirectory | protected | property | Directory name for HTML output logging. | |||
BrowserHtmlDebugTrait::$htmlOutputEnabled | protected | property | HTML output enabled. | |||
BrowserHtmlDebugTrait::$htmlOutputTestId | protected | property | HTML output test ID. | |||
BrowserHtmlDebugTrait::formatHtmlOutputHeaders | protected | function | Formats HTTP headers as string for HTML output logging. | |||
BrowserHtmlDebugTrait::getHtmlOutputHeaders | protected | function | Returns headers in HTML output format. | 1 | ||
BrowserHtmlDebugTrait::getResponseLogHandler | protected | function | Provides a Guzzle middleware handler to log every response received. | |||
BrowserHtmlDebugTrait::htmlOutput | protected | function | Logs a HTML output message in a text file. | |||
BrowserHtmlDebugTrait::initBrowserOutputFile | protected | function | Creates the directory to store browser output. | |||
BrowserTestBase::$baseUrl | protected | property | The base URL. | |||
BrowserTestBase::$configImporter | protected | property | The config importer that can be used in a test. | |||
BrowserTestBase::$customTranslations | protected | property | An array of custom translations suitable for SettingsEditor::rewrite(). | |||
BrowserTestBase::$mink | protected | property | Mink session manager. | |||
BrowserTestBase::$minkDefaultDriverArgs | protected | property | Mink default driver params. | |||
BrowserTestBase::$minkDefaultDriverClass | protected | property | Mink class for the default driver to use. | 1 | ||
BrowserTestBase::$originalContainer | protected | property | The original container. | |||
BrowserTestBase::$originalShutdownCallbacks | protected | property | The original array of shutdown function callbacks. | |||
BrowserTestBase::$profile | protected | property | The profile to install as a basis for testing. | 41 | ||
BrowserTestBase::$timeLimit | protected | property | Time limit in seconds for the test. | |||
BrowserTestBase::$translationFilesDirectory | protected | property | The translation file directory for the test environment. | |||
BrowserTestBase::cleanupEnvironment | protected | function | Clean up the test environment. | |||
BrowserTestBase::config | protected | function | Configuration accessor for tests. Returns non-overridden configuration. | |||
BrowserTestBase::filePreDeleteCallback | public static | function | Ensures test files are deletable. | |||
BrowserTestBase::getDefaultDriverInstance | protected | function | Gets an instance of the default Mink driver. | |||
BrowserTestBase::getDrupalSettings | protected | function | Gets the JavaScript drupalSettings variable for the currently-loaded page. | 1 | ||
BrowserTestBase::getHttpClient | protected | function | Obtain the HTTP client for the system under test. | |||
BrowserTestBase::getMinkDriverArgs | protected | function | Gets the Mink driver args from an environment variable. | 1 | ||
BrowserTestBase::getOptions | protected | function | Helper function to get the options of select field. | |||
BrowserTestBase::getSession | public | function | Returns Mink session. | |||
BrowserTestBase::getSessionCookies | protected | function | Get session cookies from current session. | |||
BrowserTestBase::getTestMethodCaller | protected | function | Retrieves the current calling line in the class under test. | Overrides BrowserHtmlDebugTrait::getTestMethodCaller | ||
BrowserTestBase::initFrontPage | protected | function | Visits the front page when initializing Mink. | 3 | ||
BrowserTestBase::initMink | protected | function | Initializes Mink sessions. | 1 | ||
BrowserTestBase::installDrupal | public | function | Installs Drupal into the test site. | 2 | ||
BrowserTestBase::registerSessions | protected | function | Registers additional Mink sessions. | |||
BrowserTestBase::setUpAppRoot | protected | function | Sets up the root application path. | |||
BrowserTestBase::setUpBeforeClass | public static | function | 1 | |||
BrowserTestBase::tearDown | protected | function | 3 | |||
BrowserTestBase::translatePostValues | protected | function | Transforms a nested array into a flat array suitable for submitForm(). | |||
BrowserTestBase::xpath | protected | function | Performs an xpath search on the contents of the internal browser. | |||
BrowserTestBase::__construct | public | function | 1 | |||
BrowserTestBase::__sleep | public | function | Prevents serializing any properties. | |||
ConfigTestTrait::configImporter | protected | function | Returns a ConfigImporter object to import test configuration. | |||
ConfigTestTrait::copyConfig | protected | function | Copies configuration objects from source storage to target storage. | |||
ContentTypeCreationTrait::createContentType | protected | function | Creates a custom content type based on default settings. | Aliased as: drupalCreateContentType | 1 | |
ExpectDeprecationTrait::expectDeprecation | public | function | Adds an expected deprecation. | |||
ExpectDeprecationTrait::getCallableName | private static | function | Returns a callable as a string suitable for inclusion in a message. | |||
ExpectDeprecationTrait::setUpErrorHandler | public | function | Sets up the test error handler. | |||
ExpectDeprecationTrait::tearDownErrorHandler | public | function | Tears down the test error handler. | |||
ExtensionListTestTrait::getModulePath | protected | function | Gets the path for the specified module. | |||
ExtensionListTestTrait::getThemePath | protected | function | Gets the path for the specified theme. | |||
FunctionalTestSetupTrait::$apcuEnsureUniquePrefix | protected | property | The flag to set 'apcu_ensure_unique_prefix' setting. | 1 | ||
FunctionalTestSetupTrait::$classLoader | protected | property | The class loader to use for installation and initialization of setup. | |||
FunctionalTestSetupTrait::$rootUser | protected | property | The "#1" admin user. | |||
FunctionalTestSetupTrait::$usesSuperUserAccessPolicy | protected | property | Set to TRUE to make user 1 a super user. | 8 | ||
FunctionalTestSetupTrait::doInstall | protected | function | Execute the non-interactive installer. | 1 | ||
FunctionalTestSetupTrait::getDatabaseTypes | protected | function | Returns all supported database driver installer objects. | |||
FunctionalTestSetupTrait::initConfig | protected | function | Initialize various configurations post-installation. | 1 | ||
FunctionalTestSetupTrait::initKernel | protected | function | Initializes the kernel after installation. | |||
FunctionalTestSetupTrait::initSettings | protected | function | Initialize settings created during install. | |||
FunctionalTestSetupTrait::initUserSession | protected | function | Initializes user 1 for the site to be installed. | |||
FunctionalTestSetupTrait::installDefaultThemeFromClassProperty | protected | function | Installs the default theme defined by `static::$defaultTheme` when needed. | 1 | ||
FunctionalTestSetupTrait::installModulesFromClassProperty | protected | function | Install modules defined by `static::$modules`. | 1 | ||
FunctionalTestSetupTrait::installParameters | protected | function | Returns the parameters that will be used when the test installs Drupal. | 8 | ||
FunctionalTestSetupTrait::prepareEnvironment | protected | function | Prepares the current environment for running the test. | 29 | ||
FunctionalTestSetupTrait::prepareRequestForGenerator | protected | function | Creates a mock request and sets it on the generator. | |||
FunctionalTestSetupTrait::prepareSettings | protected | function | Prepares site settings and services before installation. | 4 | ||
FunctionalTestSetupTrait::rebuildAll | protected | function | Resets and rebuilds the environment after setup. | |||
FunctionalTestSetupTrait::rebuildContainer | protected | function | Rebuilds \Drupal::getContainer(). | |||
FunctionalTestSetupTrait::resetAll | protected | function | Resets all data structures after having enabled new modules. | |||
FunctionalTestSetupTrait::setContainerParameter | protected | function | Changes parameters in the services.yml file. | |||
FunctionalTestSetupTrait::setupBaseUrl | protected | function | Sets up the base URL based upon the environment variable. | |||
FunctionalTestSetupTrait::writeSettings | protected | function | Rewrites the settings.php file of the test site. | 1 | ||
MenuAccessTest::$defaultTheme | protected | property | Overrides BrowserTestBase::$defaultTheme | |||
MenuAccessTest::$modules | protected static | property | Overrides BrowserTestBase::$modules | |||
MenuAccessTest::assertMenuItemRoutesAccess | private | function | Asserts route requests connected to menu items have the expected access. | |||
MenuAccessTest::assertUserRoutesAccess | private | function | Asserts which routes a user has access to. | |||
MenuAccessTest::drupalGet | protected | function | Overrides UiHelperTrait::drupalGet | |||
MenuAccessTest::setUp | protected | function | Overrides BrowserTestBase::setUp | |||
MenuAccessTest::testMenuBlockLinksAccessCheck | public | function | Tests menu link for route with access check. | |||
MenuAccessTest::testSystemAdminMenuBlockAccessCheck | public | function | Test routes implementing _access_admin_menu_block_page. | |||
NodeCreationTrait::createNode | protected | function | Creates a node based on default settings. | Aliased as: drupalCreateNode | ||
NodeCreationTrait::getNodeByTitle | public | function | Get a node from the database based on its title. | Aliased as: drupalGetNodeByTitle | ||
RandomGeneratorTrait::getRandomGenerator | protected | function | Gets the random generator for the utility methods. | |||
RandomGeneratorTrait::randomMachineName | protected | function | Generates a unique random string containing letters and numbers. | |||
RandomGeneratorTrait::randomObject | public | function | Generates a random PHP object. | |||
RandomGeneratorTrait::randomString | public | function | Generates a pseudo-random string of ASCII characters of codes 32 to 126. | |||
RefreshVariablesTrait::refreshVariables | protected | function | Refreshes in-memory configuration and state information. | 2 | ||
SessionTestTrait::$sessionName | protected | property | The name of the session cookie. | |||
SessionTestTrait::generateSessionName | protected | function | Generates a session cookie name. | |||
SessionTestTrait::getSessionName | protected | function | Returns the session name in use on the child site. | |||
StorageCopyTrait::replaceStorageContents | protected static | function | Copy the configuration from one storage to another and remove stale items. | |||
TestRequirementsTrait::getDrupalRoot | protected static | function | Returns the Drupal root directory. | |||
TestSetupTrait::$configSchemaCheckerExclusions | protected static | property | An array of config object names that are excluded from schema checking. | 3 | ||
TestSetupTrait::$container | protected | property | The dependency injection container used in the test. | |||
TestSetupTrait::$databasePrefix | protected | property | The database prefix of this test run. | |||
TestSetupTrait::$kernel | protected | property | The DrupalKernel instance used in the test. | |||
TestSetupTrait::$originalSite | protected | property | The site directory of the original parent site. | |||
TestSetupTrait::$privateFilesDirectory | protected | property | The private file directory for the test environment. | |||
TestSetupTrait::$publicFilesDirectory | protected | property | The public file directory for the test environment. | |||
TestSetupTrait::$root | protected | property | The app root. | |||
TestSetupTrait::$siteDirectory | protected | property | The site directory of this test run. | |||
TestSetupTrait::$strictConfigSchema | protected | property | Set to TRUE to strict check all configuration saved. | 4 | ||
TestSetupTrait::$tempFilesDirectory | protected | property | The temporary file directory for the test environment. | |||
TestSetupTrait::$testId | protected | property | The test run ID. | |||
TestSetupTrait::changeDatabasePrefix | protected | function | Changes the database connection to the prefixed one. | |||
TestSetupTrait::getConfigSchemaExclusions | protected | function | Gets the config schema exclusions for this test. | |||
TestSetupTrait::prepareDatabasePrefix | protected | function | Generates a database prefix for running tests. | 1 | ||
UiHelperTrait::$loggedInUser | protected | property | The current user logged in using the Mink controlled browser. | |||
UiHelperTrait::$maximumMetaRefreshCount | protected | property | The number of meta refresh redirects to follow, or NULL if unlimited. | |||
UiHelperTrait::$metaRefreshCount | protected | property | The number of meta refresh redirects followed during ::drupalGet(). | |||
UiHelperTrait::$useOneTimeLoginLinks | protected | property | Use one-time login links instead of submitting the login form. | 3 | ||
UiHelperTrait::assertSession | public | function | Returns WebAssert object. | 1 | ||
UiHelperTrait::buildUrl | protected | function | Builds an absolute URL from a system path or a URL object. | |||
UiHelperTrait::checkForMetaRefresh | protected | function | Checks for meta refresh tag and if found call drupalGet() recursively. | |||
UiHelperTrait::click | protected | function | Clicks the element with the given CSS selector. | |||
UiHelperTrait::clickLink | protected | function | Follows a link by complete name. | |||
UiHelperTrait::cssSelect | protected | function | Searches elements using a CSS selector in the raw content. | |||
UiHelperTrait::cssSelectToXpath | protected | function | Translates a CSS expression to its XPath equivalent. | |||
UiHelperTrait::drupalLogin | protected | function | Logs in a user using the Mink controlled browser. | |||
UiHelperTrait::drupalLogout | protected | function | Logs a user out of the Mink controlled browser and confirms. | |||
UiHelperTrait::drupalResetSession | protected | function | Resets the current active session back to Anonymous session. | |||
UiHelperTrait::drupalUserIsLoggedIn | protected | function | Returns whether a given user account is logged in. | |||
UiHelperTrait::getAbsoluteUrl | protected | function | Takes a path and returns an absolute path. | |||
UiHelperTrait::getTextContent | protected | function | Retrieves the plain-text content from the current page. | |||
UiHelperTrait::getUrl | protected | function | Get the current URL from the browser. | |||
UiHelperTrait::isTestUsingGuzzleClient | protected | function | Determines if test is using DrupalTestBrowser. | |||
UiHelperTrait::prepareRequest | protected | function | Prepare for a request to testing site. | 1 | ||
UiHelperTrait::submitForm | protected | function | Fills and submits a form. | |||
UserCreationTrait::checkPermissions | protected | function | Checks whether a given list of permission names is valid. | |||
UserCreationTrait::createAdminRole | protected | function | Creates an administrative role. | |||
UserCreationTrait::createRole | protected | function | Creates a role with specified permissions. | Aliased as: drupalCreateRole | ||
UserCreationTrait::createUser | protected | function | Create a user with a given set of permissions. | Aliased as: drupalCreateUser | ||
UserCreationTrait::grantPermissions | protected | function | Grant permissions to a user role. | |||
UserCreationTrait::setCurrentUser | protected | function | Switch the current logged in user. | |||
UserCreationTrait::setUpCurrentUser | protected | function | Creates a random user account and sets it as current user. | |||
XdebugRequestTrait::extractCookiesFromRequest | protected | function | Adds xdebug cookies, from request setup. |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.