improvements-2.x-dev/modules/improvements_menu/tests/src/Functional/ImprovementsMenuTest.php
modules/improvements_menu/tests/src/Functional/ImprovementsMenuTest.php
<?php
namespace Drupal\Tests\improvements_menu\Functional;
use Drupal\Tests\block\Traits\BlockCreationTrait;
use Drupal\Tests\BrowserTestBase;
use Drupal\Tests\improvements\Traits\ImprovementsTestTrait;
use Drupal\Tests\node\Traits\NodeCreationTrait;
class ImprovementsMenuTest extends BrowserTestBase {
use BlockCreationTrait;
use ImprovementsTestTrait;
use NodeCreationTrait;
/**
* {@inheritDoc}
*/
protected $defaultTheme = 'stark';
/**
* {@inheritDoc}
*/
protected static $modules = [
'improvements_menu',
'menu_ui',
'menu_link_content',
];
/**
* {@inheritDoc}
*/
protected function setUp(): void {
parent::setUp();
}
/**
* Test menu form autofocus.
*/
public function testMenuFormAutofocus(): void {
$this->drupalLoginAsRoot();
$this->drupalGet('/admin/structure/menu/add');
$this->dontSeeErrorMessage();
$web_assert = $this->assertSession();
$web_assert->elementAttributeExists('css', '#edit-label', 'autofocus');
}
/**
* Test menu item form improvements.
*/
public function testMenuItemFormImprovements(): void {
$this->drupalLoginAsRoot();
$this->drupalGet('/admin/structure/menu/manage/main/add');
$this->dontSeeErrorMessage();
$web_assert = $this->assertSession();
$web_assert->elementAttributeExists('css', '#edit-title-0-value', 'autofocus');
$web_assert->elementExists('css', '#edit-link-0-uri');
$web_assert->elementNotExists('css', '#edit-link-0-uri[required]');
}
/**
* Test menu link advanced settings.
*/
public function testMenuLinkAdvancedSettings(): void {
$this->installModule('block', 'improvements');
$this->placeBlock('system_menu_block:main', [
'id' => 'main_menu_block',
'region' => 'help',
'weight' => 0,
'label' => 'Main menu block',
]);
$this->drupalLoginAsRoot();
$web_assert = $this->assertSession();
$this->drupalGet('/admin/structure/menu/manage/main/add');
$this->dontSeeErrorMessage();
$web_assert->elementExists('css', '#edit-open-in-dialog');
$web_assert->elementExists('css', '#edit-target-blank');
$web_assert->elementExists('css', '#edit-item-class');
$web_assert->elementExists('css', '#edit-link-class');
$this->submitForm([
'title[0][value]' => 'Test link',
'link[0][uri]' => '/user',
'open_in_dialog' => TRUE,
'hide_href' => TRUE,
'target_blank' => TRUE,
'item_class' => 'test-link-item',
'link_class' => 'test-link',
], 'Save');
$this->dontSeeErrorMessage();
$this->drupalGetFrontPage();
$this->dontSeeErrorMessage();
$web_assert->elementExists('css', '#block-main-menu-block li.test-link-item');
$web_assert->elementExists('css', '#block-main-menu-block a.test-link');
$web_assert->elementExists('css', '#block-main-menu-block a.test-link.use-ajax');
$web_assert->elementAttributeContains('css', '#block-main-menu-block a.test-link', 'data-dialog-type', 'modal');
$web_assert->elementAttributeContains('css', '#block-main-menu-block a.test-link', 'target', '_blank');
$web_assert->elementAttributeContains('css', '#block-main-menu-block a.test-link', 'href', '#');
$web_assert->elementAttributeContains('css', '#block-main-menu-block a.test-link', 'data-ajax-url', '/user');
$web_assert->elementExists('css', 'script[src^="/core/misc/ajax.js"]');
}
/**
* Test menu block tweak cache.
*/
public function testMenuBlockTweakCache(): void {
$this->installModule('block', 'node', 'improvements');
$this->createContentType(['type' => 'page', 'name' => 'Page']);
$this->drupalLoginAsRoot();
$node1 = $this->createNode(['title' => 'Node 1 for ' . __FUNCTION__]);
$node2 = $this->createNode(['title' => 'Node 2 for ' . __FUNCTION__]);
$menu = $this->createMenu('test_menu', 'Menu for ' . __FUNCTION__);
$menu_link1 = $this->createMenuLinkForEntity($node1, $menu->id());
$menu_link2 = $this->createMenuLinkForEntity($node2, $menu->id());
$this->drupalGet('/admin/structure/menu/manage/' . $menu->id());
$this->dontSeeErrorMessage();
$web_assert = $this->assertSession();
$web_assert->pageTextContains($menu_link1->label());
$web_assert->pageTextContains($menu_link2->label());
$block = $this->drupalPlaceBlock('system_menu_block:' . $menu->id(), [
'id' => 'test_menu_block',
'region' => 'content',
'weight' => 0,
'label' => 'Block for ' . __FUNCTION__,
]);
$block_html_id = '#block-test-menu-block';
$this->drupalGetEntityPage($node1);
$web_assert->elementExists('css', $block_html_id);
$this->assertEquals(1, $this->countRenderCache('entity_view:block:' . $block->id()));
$this->drupalGetEntityPage($node2);
$web_assert->elementExists('css', $block_html_id);
$this->assertEquals(2, $this->countRenderCache('entity_view:block:' . $block->id()));
$this->drupalGet('/admin/structure/block/manage/' . $block->id());
$this->dontSeeErrorMessage();
$web_assert->fieldExists('tweak_cache');
$web_assert->checkboxNotChecked('tweak_cache');
$this->clearRenderCache();
$this->submitForm([
'tweak_cache' => 1,
], 'Save block');
$this->dontSeeErrorMessage();
$this->drupalGet('/admin/structure/block/manage/' . $block->id());
$web_assert->checkboxChecked('tweak_cache');
$this->drupalGetEntityPage($node1);
$web_assert->elementExists('css', $block_html_id);
$this->assertEquals(1, $this->countRenderCache('entity_view:block:' . $block->id()));
$this->drupalGetEntityPage($node2);
$web_assert->elementExists('css', $block_html_id);
$this->assertEquals(1, $this->countRenderCache('entity_view:block:' . $block->id()));
}
/**
* Test menu block items limitation.
*/
public function testMenuBlockItemsLimitation(): void {
$this->installModule('block', 'node', 'improvements');
$this->createContentType(['type' => 'page', 'name' => 'Page']);
$this->drupalLoginAsRoot();
$node1 = $this->createNode(['title' => 'Node 1 for ' . __FUNCTION__]);
$node2 = $this->createNode(['title' => 'Node 2 for ' . __FUNCTION__]);
$menu = $this->createMenu('test_menu', 'Menu for ' . __FUNCTION__);
$menu_link1 = $this->createMenuLinkForEntity($node1, $menu->id());
$menu_link2 = $this->createMenuLinkForEntity($node2, $menu->id());
$block = $this->drupalPlaceBlock('system_menu_block:' . $menu->id(), [
'id' => 'test_menu_block',
'region' => 'content',
'weight' => 0,
'label' => 'Block for ' . __FUNCTION__,
]);
$block_html_id = '#block-test-menu-block';
// Check menu block render
$this->drupalGetFrontPage();
$this->dontSeeErrorMessage();
$web_assert = $this->assertSession();
$web_assert->elementExists('css', $block_html_id);
$web_assert->elementTextContains('css', $block_html_id, $menu_link1->label());
$web_assert->elementTextContains('css', $block_html_id, $menu_link2->label());
// Check menu block form
$this->drupalGet('/admin/structure/block/manage/' . $block->id());
$this->dontSeeErrorMessage();
$web_assert->fieldExists('items_limitation[method]');
$web_assert->fieldExists('items_limitation[items][]');
// Save menu block settings
$this->submitForm([
'items_limitation[method]' => 'exclude_selected',
'items_limitation[items][]' => 'menu_link_content:' . $menu_link1->uuid(),
], 'Save block');
$this->dontSeeErrorMessage();
$this->drupalGet('/admin/structure/block/manage/' . $block->id());
$web_assert->fieldValueEquals('items_limitation[method]', 'exclude_selected');
$web_assert->elementExists('css', 'option[value="menu_link_content:' . $menu_link1->uuid() . '"][selected]');
// Check menu block with new settings
$this->drupalGetFrontPage();
$web_assert->elementExists('css', $block_html_id);
$web_assert->elementTextNotContains('css', $block_html_id, $menu_link1->label());
$web_assert->elementTextContains('css', $block_html_id, $menu_link2->label());
// Change menu block settings and check result
$this->drupalGet('/admin/structure/block/manage/' . $block->id());
$this->submitForm([
'items_limitation[method]' => 'exclude_non_selected',
'items_limitation[items][]' => 'menu_link_content:' . $menu_link1->uuid(),
], 'Save block');
$this->dontSeeErrorMessage();
$this->drupalGetFrontPage();
$web_assert->elementExists('css', $block_html_id);
$web_assert->elementTextContains('css', $block_html_id, $menu_link1->label());
$web_assert->elementTextNotContains('css', $block_html_id, $menu_link2->label());
}
}
