function OverrideMenuLinksConfigActionTest::testOverrideLinks

Tests overriding static menu links.

File

core/tests/Drupal/KernelTests/Core/Menu/OverrideMenuLinksConfigActionTest.php, line 48

Class

OverrideMenuLinksConfigActionTest
Tests overriding static menu links with config actions.

Namespace

Drupal\KernelTests\Core\Menu

Code

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.