View source
<?php
namespace Drupal\Tests\menu_item_extras\Functional;
use Drupal\Component\Utility\NestedArray;
use Drupal\Core\Entity\Entity\EntityFormDisplay;
use Drupal\Core\Entity\Entity\EntityViewDisplay;
use Drupal\Core\Url;
use Drupal\field\Entity\FieldConfig;
use Drupal\field\Entity\FieldStorageConfig;
use Drupal\menu_link_content\Entity\MenuLinkContent;
use Drupal\system\Entity\Menu;
use Drupal\Tests\BrowserTestBase;
class MenuItemExtrasRenderTest extends BrowserTestBase {
protected $block;
protected $menu;
protected $links = [];
protected $linksNumber = 3;
public static $modules = [
'menu_item_extras',
];
protected $defaultTheme = 'stark';
protected function setUp() : void {
parent::setUp();
$menu_name = 'testmenu';
$field_name = 'field_body';
$menu_link_entity_type = 'menu_link_content';
$label = $this
->randomMachineName(16);
$this->menu = Menu::create([
'id' => $menu_name,
'label' => $label,
'description' => $this
->randomString(32),
]);
$this->menu
->save();
FieldStorageConfig::create([
'field_name' => $field_name,
'entity_type' => $menu_link_entity_type,
'type' => 'text_with_summary',
'cardinality' => -1,
])
->save();
FieldConfig::create([
'field_name' => $field_name,
'entity_type' => $menu_link_entity_type,
'bundle' => $menu_name,
'label' => 'A Body field',
])
->save();
$entity_form_display = EntityFormDisplay::load($menu_link_entity_type . '.' . $menu_name . '.default');
if (!$entity_form_display) {
$entity_form_display = EntityFormDisplay::create([
'targetEntityType' => $menu_link_entity_type,
'bundle' => $menu_name,
'mode' => 'default',
'status' => TRUE,
]);
}
$entity_form_display
->setComponent($field_name, [
'type' => 'text_textarea_with_summary',
]);
$entity_form_display
->save();
$display = EntityViewDisplay::load($menu_link_entity_type . '.' . $menu_name . '.default');
if (!$display) {
$display = EntityViewDisplay::create([
'targetEntityType' => $menu_link_entity_type,
'bundle' => $menu_name,
'mode' => 'default',
'status' => TRUE,
]);
}
$display
->setComponent($field_name, [
'type' => 'text_default',
]);
$display
->save();
$this->block = $this
->drupalPlaceBlock('system_menu_block:' . $this->menu
->id(), [
'region' => 'header',
'level' => 1,
'depth' => $this->linksNumber,
]);
$defaults = [
'title' => 'Extras Link',
'link' => 'https://example.com',
'enabled' => TRUE,
'description' => 'Test Description',
'expanded' => TRUE,
'menu_name' => $this->menu
->id(),
'parent' => "{$this->menu->id()}:",
'weight' => -10,
$field_name => '___ Menu Item Extras Field Value Level ___',
];
for ($i = 1; $i <= $this->linksNumber; $i++) {
if ($i > 1) {
$previous_link = $this->links[$i - 1]['entity'];
}
$link = MenuLinkContent::create(NestedArray::mergeDeep($defaults, [
'title' => $defaults['title'] . "[{$i}]",
$field_name => $defaults[$field_name] . "[{$i}]",
'parent' => isset($previous_link) ? $previous_link
->getPluginId() : $defaults['parent'],
]));
$link
->save();
$this->links[$i] = [
'title' => $link
->get('title')
->getString(),
$field_name => $defaults[$field_name] . "[{$i}]",
'entity' => $link,
'entity_id' => $link
->id(),
];
}
}
public function testMultilevelItems() {
$assert = $this
->assertSession();
$this
->drupalGet('<front>');
foreach ($this->links as $link) {
$assert
->pageTextContains($link['title']);
$assert
->pageTextContains($link['field_body']);
}
}
public function testRenderClearCache() {
$assert = $this
->assertSession();
$this
->drupalLogin($this->rootUser);
foreach ($this->links as $link) {
$this
->drupalGet(Url::fromRoute('entity.menu_link_content.edit_form', [
'menu_link_content' => $link['entity_id'],
]));
$assert
->pageTextContains($link['title']);
$assert
->pageTextContains($link['field_body']);
}
}
}