class OverrideMenuLinksConfigActionTest
Tests overriding static menu links with config actions.
Attributes
#[Group('Menu')]
#[CoversClass(OverrideMenuLinks::class)]
#[RunTestsInSeparateProcesses]
Hierarchy
- class \Drupal\KernelTests\KernelTestBase implements \Drupal\Core\DependencyInjection\ServiceProviderInterface uses \Drupal\Tests\DrupalTestCaseTrait, \Drupal\KernelTests\AssertContentTrait, \Drupal\Tests\RandomGeneratorTrait, \Drupal\Tests\ConfigTestTrait, \Drupal\Tests\ExtensionListTestTrait, \Drupal\Tests\TestRequirementsTrait, \Drupal\Tests\PhpUnitCompatibilityTrait, \Prophecy\PhpUnit\ProphecyTrait, \Drupal\TestTools\Extension\DeprecationBridge\ExpectDeprecationTrait extends \PHPUnit\Framework\TestCase
- class \Drupal\KernelTests\Core\Menu\OverrideMenuLinksConfigActionTest extends \Drupal\KernelTests\KernelTestBase
Expanded class hierarchy of OverrideMenuLinksConfigActionTest
File
-
core/
tests/ Drupal/ KernelTests/ Core/ Menu/ OverrideMenuLinksConfigActionTest.php, line 21
Namespace
Drupal\KernelTests\Core\MenuView source
final class OverrideMenuLinksConfigActionTest extends KernelTestBase {
/**
* {@inheritdoc}
*/
protected static $modules = [
'menu_test',
];
/**
* Tests that the action only works on core.menu.static_menu_link_overrides.
*/
public function testConfigName() : void {
$this->expectException(ConfigActionException::class);
$this->expectExceptionMessage('This config action can only be used on the core.menu.static_menu_link_overrides config object.');
$this->container
->get('plugin.manager.config_action')
->applyAction('overrideMenuLinks', 'system.menu.original', []);
}
/**
* Tests overriding static menu links.
*/
public function testOverrideLinks() : void {
/** @var \Drupal\Core\Config\Action\ConfigActionManager $action_manager */
$action_manager = $this->container
->get('plugin.manager.config_action');
/** @var \Drupal\Core\Menu\MenuLinkManagerInterface $link_manager */
$link_manager = $this->container
->get(MenuLinkManagerInterface::class);
$link_manager->rebuild();
$definition = $link_manager->getDefinition('menu_test.menu_name_test');
$this->assertSame('0', $definition['weight']);
$this->assertSame('1', $definition['enabled']);
$logger = new TestLogger();
$this->container
->get(LoggerChannelFactoryInterface::class)
->get('menu')
->addLogger($logger);
$action_manager->applyAction('overrideMenuLinks', 'core.menu.static_menu_link_overrides', [
'menu_test.menu_name_test' => [
'weight' => 5,
'enabled' => FALSE,
],
'not_a_link' => [
'enabled' => TRUE,
],
]);
$link_manager->rebuild();
$definition = $link_manager->getDefinition('menu_test.menu_name_test');
$this->assertSame('5', $definition['weight']);
$this->assertSame('0', $definition['enabled']);
// Trying to override a non-existent link should log a warning.
$this->assertTrue($logger->hasRecord('The @link_id menu link was not overridden because it does not exist.', RfcLogLevel::WARNING));
// We should be able to undo the override.
$action_manager->applyAction('overrideMenuLinks', 'core.menu.static_menu_link_overrides', [
'menu_test.menu_name_test' => NULL,
]);
$link_manager->rebuild();
$definition = $link_manager->getDefinition('menu_test.menu_name_test');
$this->assertSame('0', $definition['weight']);
$this->assertSame('1', $definition['enabled']);
}
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.