mix-1.1.0-rc1/tests/src/Functional/MixMenuItemAdvancedTest.php

tests/src/Functional/MixMenuItemAdvancedTest.php
<?php

namespace Drupal\Tests\mix\Functional;

/**
 * Tests advanced menu settings.
 *
 * @group mix
 */
class MixMenuItemAdvancedTest extends MixMenuTestBase {

  /**
   * {@inheritdoc}
   */
  protected function setUp(): void {
    parent::setUp();
    $this->drupalLogin($this->rootUser);
  }

  /**
   * Tests menu item visibility by role.
   */
  public function testMenuItemPerRole() {

    // Hierarchy
    // <$menu>
    // - item1
    // -- item1_1 (auth)
    // -- item1_2 (anon)
    // - item2 (auth)
    // -- item2_1
    // -- item2_2 (anon)
    // - item3 (anon)
    // -- item3_1
    // -- item3_2 (auth)
    $menu = $this->addCustomMenu();

    $advancedSettings_auth = [
      'mix_advanced[roles][anonymous]' => 0,
      'mix_advanced[roles][authenticated]' => 'authenticated',
    ];
    $advancedSettings_anon = [
      'mix_advanced[roles][anonymous]' => 'anonymous',
      'mix_advanced[roles][authenticated]' => 0,
    ];

    // A normal parent menu link.
    $item1   = $this->addMenuLink('', 'item1', '/', $menu->id(), TRUE, 0);
    $item1_1 = $this->addMenuLink($item1->getPluginId(), 'item1_1', '/', $menu->id(), TRUE, 0, $advancedSettings_auth);
    $item1_2 = $this->addMenuLink($item1->getPluginId(), 'item1_2', '/', $menu->id(), TRUE, 0, $advancedSettings_anon);

    // An advanced parent menu link, only visible to authenticated users.
    $item2   = $this->addMenuLink('', 'item2', '/', $menu->id(), TRUE, 1, $advancedSettings_auth);
    $item2_1 = $this->addMenuLink($item2->getPluginId(), 'item2_1', '/', $menu->id());
    $item2_2 = $this->addMenuLink($item2->getPluginId(), 'item2_2', '/', $menu->id(), TRUE, 1, $advancedSettings_anon);

    // An advanced parent menu link, only visible to anonymous users.
    $item3   = $this->addMenuLink('', 'item3', '/', $menu->id(), TRUE, 2, $advancedSettings_anon);
    $item3_1 = $this->addMenuLink($item3->getPluginId(), 'item3_1', '/', $menu->id());
    $item3_2 = $this->addMenuLink($item3->getPluginId(), 'item3_2', '/', $menu->id(), TRUE, 1, $advancedSettings_auth);

    // Test role access.
    // Authenticated users.
    $this->drupalGet('admin/structure/menu/add');
    // $item1 is has no access control, $item1_1 is for authenticated users,
    // $item1_2 is for anonymous users.
    $this->assertSession()->responseContains($item1->getTitle());
    $this->assertSession()->responseContains($item1_1->getTitle());
    $this->assertSession()->responseNotContains($item1_2->getTitle());
    // $item2 is for authenticated users, but $item2_2 is for anonymous users.
    $this->assertSession()->responseContains($item2->getTitle());
    $this->assertSession()->responseContains($item2_1->getTitle());
    $this->assertSession()->responseNotContains($item2_2->getTitle());
    // $item3 is for anonymous users, so authenticated users can't see it
    // and the children items.
    $this->assertSession()->responseNotContains($item3->getTitle());
    $this->assertSession()->responseNotContains($item3_1->getTitle());
    $this->assertSession()->responseNotContains($item3_2->getTitle());

    // Anonymous users.
    $this->drupalLogout();
    // $item1 is has no access control, $item1_1 is for authenticated users,
    // $item1_2 is for anonymous users.
    $this->assertSession()->responseContains($item1->getTitle());
    $this->assertSession()->responseNotContains($item1_1->getTitle());
    $this->assertSession()->responseContains($item1_2->getTitle());
    // $item2 is for authenticated users, so anonymous users can't see it and
    // the children items.
    $this->assertSession()->responseNotContains($item2->getTitle());
    $this->assertSession()->responseNotContains($item2_1->getTitle());
    $this->assertSession()->responseNotContains($item2_2->getTitle());
    // $item3 is for anonymous users, but $item3_2 is for authenticated users.
    $this->assertSession()->responseContains($item3->getTitle());
    $this->assertSession()->responseContains($item3_1->getTitle());
    $this->assertSession()->responseNotContains($item3_2->getTitle());
  }

  /**
   * Tests menu item and container attributes.
   */
  public function testMenuItemAttributes() {

    $menu = $this->addCustomMenu();
    $this->addMenuLink('', 'item1', '/', $menu->id());

    $advancedSettings = [
      // Link attributes.
      'mix_advanced[attributes][id]'     => 'item2',
      'mix_advanced[attributes][class]'  => 'item2 item2__link',
      'mix_advanced[attributes][target]' => '_blank',
      // Container attributes.
      'mix_advanced[container_attributes][id]'    => 'item2_container',
      'mix_advanced[container_attributes][class]' => 'item2_container item2_container_wrapper',
    ];
    $this->addMenuLink('', 'item2', '/', $menu->id(), TRUE, 0, $advancedSettings);

    // Test menu link and container's attributes.
    $this->assertSession()->elementExists('xpath', '//li[contains(@id, "item2_container")]');
    $this->assertSession()->elementExists('xpath', '//li[contains(@class, "item2_container_wrapper")]');
    $this->assertSession()->elementExists('xpath', '//a[contains(@id, "item2")]');
    $this->assertSession()->elementExists('xpath', '//a[contains(@class, "item2__link")]');
    $this->assertSession()->elementExists('css', 'li[id="item2_container"] a[id="item2"]');
    $this->assertSession()->elementExists('css', 'a[id="item2"][target="_blank"]');
  }

  /**
   * Tests the "Allow HTML" setting for menu item.
   */
  public function testMenuItemAllowHtml() {
    $menu = $this->addCustomMenu();

    // Test HTML title without "Allow HTML" enabled.
    $this->addMenuLink('', '<em>Bold Title</em>', '/', $menu->id(), TRUE, 0);
    $this->assertSession()->responseNotContains('<em>Bold Title</em>');

    // Test HTML title with "Allow HTML" enabled.
    $formValues = ['mix_allow_html' => 1];
    $this->addMenuLink('', '<strong>Bold Title</strong>', '/', $menu->id(), TRUE, 0, $formValues);
    $this->assertSession()->responseContains('<strong>Bold Title</strong>');
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc