You are here

public function MenuUiTest::testMenuUiWithPendingRevisions in Drupal 8

Same name and namespace in other branches
  1. 9 core/modules/menu_ui/tests/src/Functional/MenuUiTest.php \Drupal\Tests\menu_ui\Functional\MenuUiTest::testMenuUiWithPendingRevisions()

Test that menu links with pending revisions can not be re-parented.

File

core/modules/menu_ui/tests/src/Functional/MenuUiTest.php, line 1010

Class

MenuUiTest
Add a custom menu, add menu links to the custom menu and Tools menu, check their data, and delete them using the UI.

Namespace

Drupal\Tests\menu_ui\Functional

Code

public function testMenuUiWithPendingRevisions() {
  $this
    ->drupalLogin($this->adminUser);
  $assert_session = $this
    ->assertSession();

  // Add four menu links in two separate menus.
  $menu_1 = $this
    ->addCustomMenu();
  $root_1 = $this
    ->addMenuLink('', '/', $menu_1
    ->id());
  $this
    ->addMenuLink($root_1
    ->getPluginId(), '/', $menu_1
    ->id());
  $menu_2 = $this
    ->addCustomMenu();
  $root_2 = $this
    ->addMenuLink('', '/', $menu_2
    ->id());
  $child_2 = $this
    ->addMenuLink($root_2
    ->getPluginId(), '/', $menu_2
    ->id());
  $this
    ->drupalGet('admin/structure/menu/manage/' . $menu_2
    ->id());
  $assert_session
    ->pageTextNotContains($menu_2
    ->label() . ' contains 1 menu link with pending revisions. Manipulation of a menu tree having links with pending revisions is not supported, but you can re-enable manipulation by getting each menu link to a published state.');
  $this
    ->drupalGet('admin/structure/menu/manage/' . $menu_1
    ->id());
  $assert_session
    ->pageTextNotContains($menu_1
    ->label() . ' contains 1 menu link with pending revisions. Manipulation of a menu tree having links with pending revisions is not supported, but you can re-enable manipulation by getting each menu link to a published state.');

  // Create a pending revision for one of the menu links and check that it can
  // no longer be re-parented in the UI. We can not create pending revisions
  // through the UI yet so we have to use API calls.
  \Drupal::entityTypeManager()
    ->getStorage('menu_link_content')
    ->createRevision($child_2, FALSE)
    ->save();
  $this
    ->drupalGet('admin/structure/menu/manage/' . $menu_2
    ->id());
  $assert_session
    ->pageTextContains($menu_2
    ->label() . ' contains 1 menu link with pending revisions. Manipulation of a menu tree having links with pending revisions is not supported, but you can re-enable manipulation by getting each menu link to a published state.');

  // Check that the 'Enabled' checkbox is hidden for a pending revision.
  $this
    ->assertNotEmpty($this
    ->cssSelect('input[name="links[menu_plugin_id:' . $root_2
    ->getPluginId() . '][enabled]"]'), 'The publishing status of a default revision can be changed.');
  $this
    ->assertEmpty($this
    ->cssSelect('input[name="links[menu_plugin_id:' . $child_2
    ->getPluginId() . '][enabled]"]'), 'The publishing status of a pending revision can not be changed.');
  $this
    ->drupalGet('admin/structure/menu/manage/' . $menu_1
    ->id());
  $assert_session
    ->pageTextNotContains($menu_1
    ->label() . ' contains 1 menu link with pending revisions. Manipulation of a menu tree having links with pending revisions is not supported, but you can re-enable manipulation by getting each menu link to a published state.');

  // Check that the menu overview form can be saved without errors when there
  // are pending revisions.
  $this
    ->drupalPostForm('admin/structure/menu/manage/' . $menu_2
    ->id(), [], 'Save');
  $this
    ->assertSession()
    ->elementNotExists('xpath', '//div[contains(@class, "messages--error")]');
}