function MenuLinksTest::testMenuLinkReparenting
Same name in other branches
- 9 core/modules/menu_link_content/tests/src/Kernel/MenuLinksTest.php \Drupal\Tests\menu_link_content\Kernel\MenuLinksTest::testMenuLinkReparenting()
- 8.9.x core/modules/menu_link_content/tests/src/Kernel/MenuLinksTest.php \Drupal\Tests\menu_link_content\Kernel\MenuLinksTest::testMenuLinkReparenting()
- 11.x core/modules/menu_link_content/tests/src/Kernel/MenuLinksTest.php \Drupal\Tests\menu_link_content\Kernel\MenuLinksTest::testMenuLinkReparenting()
Tests automatic reparenting of menu links.
File
-
core/
modules/ menu_link_content/ tests/ src/ Kernel/ MenuLinksTest.php, line 214
Class
- MenuLinksTest
- Tests handling of menu links hierarchies.
Namespace
Drupal\Tests\menu_link_content\KernelCode
public function testMenuLinkReparenting($module = 'menu_test') : void {
// Check the initial hierarchy.
$links = $this->createLinkHierarchy($module);
$expected_hierarchy = [
'parent' => '',
'child-1' => 'parent',
'child-1-1' => 'child-1',
'child-1-2' => 'child-1',
'child-2' => 'parent',
];
$this->assertMenuLinkParents($links, $expected_hierarchy);
// Start over, and move child-1 under child-2, and check that all the
// children of child-1 have been moved too.
$links = $this->createLinkHierarchy($module);
$this->menuLinkManager
->updateDefinition($links['child-1'], [
'parent' => $links['child-2'],
]);
// Verify that the entity was updated too.
/** @var \Drupal\Core\Menu\MenuLinkInterface $menu_link_plugin */
$menu_link_plugin = $this->menuLinkManager
->createInstance($links['child-1']);
$entity = \Drupal::service('entity.repository')->loadEntityByUuid('menu_link_content', $menu_link_plugin->getDerivativeId());
$this->assertEquals($links['child-2'], $entity->getParentId());
$expected_hierarchy = [
'parent' => '',
'child-1' => 'child-2',
'child-1-1' => 'child-1',
'child-1-2' => 'child-1',
'child-2' => 'parent',
];
$this->assertMenuLinkParents($links, $expected_hierarchy);
// Start over, and delete child-1, and check that the children of child-1
// have been reassigned to the parent.
$links = $this->createLinkHierarchy($module);
$this->menuLinkManager
->removeDefinition($links['child-1']);
$expected_hierarchy = [
'parent' => FALSE,
'child-1-1' => 'parent',
'child-1-2' => 'parent',
'child-2' => 'parent',
];
$this->assertMenuLinkParents($links, $expected_hierarchy);
// Try changing the parent at the entity level.
$definition = $this->menuLinkManager
->getDefinition($links['child-1-2']);
$entity = MenuLinkContent::load($definition['metadata']['entity_id']);
$entity->parent->value = '';
$entity->save();
$expected_hierarchy = [
'parent' => '',
'child-1-1' => 'parent',
'child-1-2' => '',
'child-2' => 'parent',
];
$this->assertMenuLinkParents($links, $expected_hierarchy);
// @todo Figure out what makes sense to test in terms of automatic
// re-parenting. https://www.drupal.org/node/2309531
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.