admin_menu-8.x-3.x-dev/lib/Drupal/admin_menu/Tests/AdminMenuCustomizedTest.php
lib/Drupal/admin_menu/Tests/AdminMenuCustomizedTest.php
<?php
namespace Drupal\admin_menu\Tests;
/**
* Tests customized menu links.
*/
class AdminMenuCustomizedTest extends AdminMenuTestBase {
public static $modules = ['menu'];
public static function getInfo() {
return [
'name' => 'Customized links',
'description' => 'Tests customized menu links.',
'group' => 'Administration menu',
];
}
function setUp() {
parent::setUp();
$this->drupalLogin($this->root_user);
}
/**
* Test disabled custom links.
*/
function testCustomDisabled() {
$type = $this->drupalCreateContentType();
$node = $this->drupalCreateNode(['type' => $type->type]);
$text = $this->randomName();
$xpath = $this->buildXPathQuery('//div[@id=:id]//a[contains(text(), :text)]', [
':id' => 'admin-menu',
':text' => $text,
]);
// Verify that the link does not appear in the menu.
$this->drupalGet('node');
$elements = $this->xpath($xpath);
$this->assertFalse($elements, 'Custom link not found.');
// Add a custom link to the node to the menu.
$edit = [
'link_path' => 'node/' . $node->nid,
'link_title' => $text,
'parent' => 'admin:' . $this->queryMlidByPath('admin'),
];
$this->drupalPost('admin/structure/menu/manage/admin/add', $edit, t('Save'));
// Verify that the link appears in the menu.
$this->drupalGet('node');
$elements = $this->xpath($xpath);
$this->assertTrue($elements, 'Custom link found.');
// Disable the link.
$edit = [
'enabled' => FALSE,
];
$this->drupalPost('admin/structure/menu/item/' . $this->queryMlidByPath('node/' . $node->nid) . '/edit', $edit, t('Save'));
// Verify that the disabled link does not appear in the menu.
$this->drupalGet('node');
$elements = $this->xpath($xpath);
$this->assertFalse($elements, 'Disabled custom link not found.');
}
/**
* Tests external links.
*/
function testCustomExternal() {
// Add a custom link to the node to the menu.
$edit = [
'link_path' => 'http://example.com',
'link_title' => 'Example',
'parent' => 'admin:' . $this->queryMlidByPath('admin'),
];
$this->drupalPost('admin/structure/menu/manage/admin/add', $edit, t('Save'));
// Verify that the link appears in the menu.
$this->drupalGet('');
$elements = $this->xpath('//div[@id=:id]//a[@href=:href and contains(text(), :text)]', [
':id' => 'admin-menu',
':href' => $edit['link_path'],
':text' => $edit['link_title'],
]);
$this->assertTrue($elements, 'External link found.');
}
/**
* Returns the menu link ID for a given link path in the admin menu.
*/
protected function queryMlidByPath($path) {
return \Drupal::database()->query('SELECT mlid FROM {menu_links} WHERE menu_name = :menu AND link_path = :path', [
':menu' => 'admin',
':path' => $path,
])->fetchField();
}
}
