ui_icons-1.0.x-dev/modules/ui_icons_menu/tests/src/Kernel/UiIconsMenuTest.php

modules/ui_icons_menu/tests/src/Kernel/UiIconsMenuTest.php
<?php

declare(strict_types=1);

namespace Drupal\Tests\ui_icons_menu\Kernel;

use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\KernelTests\KernelTestBase;
use Drupal\menu_link_content\Entity\MenuLinkContent;

/**
 * Tests the ui_icons_menu module.
 *
 * @group ui_icons
 */
class UiIconsMenuTest extends KernelTestBase {

  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'system',
    'user',
    'menu_link_content',
    'link',
    'ui_icons',
    'ui_icons_menu',
    'ui_icons_test',
  ];

  /**
   * {@inheritdoc}
   */
  protected function setUp(): void {
    parent::setUp();
    $this->installEntitySchema('menu_link_content');
  }

  /**
   * Tests ui_icons_menu_entity_base_field_info_alter().
   */
  public function testEntityBaseFieldInfoAlter(): void {
    $entity_type = $this->container->get('entity_type.manager')->getDefinition('menu_link_content');
    $fields = MenuLinkContent::baseFieldDefinitions($entity_type);
    ui_icons_menu_entity_base_field_info_alter($fields, $entity_type);

    $this->assertArrayHasKey('link', $fields);

    $link_field = $fields['link'];
    $this->assertInstanceOf(BaseFieldDefinition::class, $link_field);

    $form_display_options = $link_field->getDisplayOptions('form');
    $this->assertIsArray($form_display_options);
    $this->assertArrayHasKey('type', $form_display_options);
    $this->assertContains($form_display_options['type'], ['icon_link_widget', 'icon_link_attributes_widget']);
  }

  /**
   * Data provider for ::testPreprocessMenu().
   */
  public static function iconDisplayDataProvider(): array {
    return [
      'icon only' => ['icon_only', ['icon']],
      'icon before' => ['before', ['icon', 'title']],
      'icon after' => ['after', ['title', 'icon']],
    ];
  }

  /**
   * Tests ui_icons_menu_preprocess_menu().
   *
   * @dataProvider iconDisplayDataProvider
   */
  public function testPreprocessMenu(?string $iconDisplay, array $expectedOrder): void {
    // Create a mock menu item.
    $title = 'Test Item';
    $markup = 'foo: <img src="/modules/custom/ui_icons/tests/modules/ui_icons_test/icons/flat/foo.png" width="32" height="32">';

    $menu_link = MenuLinkContent::create([
      'title' => $title,
      'link' => ['uri' => 'internal:/'],
    ]);
    $menu_link->save();

    $variables = [
      'items' => [
        [
          'url' => $menu_link->getUrlObject(),
          'title' => $menu_link->getTitle(),
          'below' => [],
        ],
      ],
    ];
    // Set icon options.
    $url = $variables['items'][0]['url'];
    $options = $url->getOptions();

    $options['icon'] = ['target_id' => 'test_minimal:foo'];
    if ($iconDisplay !== NULL) {
      $options['icon_display'] = $iconDisplay;
    }
    $url->setOptions($options);

    ui_icons_menu_preprocess_menu($variables);
    $actual = (string) $variables['items'][0]['title'];

    // Test the position of the dom element, the icon test is prefix by icon id,
    // let ignore HTML markup and compare only string.
    $result_dom = new \DOMDocument();
    $result_dom->loadHTML($actual);

    $actual = trim($result_dom->textContent);
    switch ($iconDisplay) {
      case 'icon_only':
        $this->assertEquals('foo:', $actual);
        break;

      case 'before':
        $this->assertStringStartsWith('foo:', $actual);
        $this->assertStringEndsWith('Test Item', $actual);
        break;

      case 'after':
        $this->assertStringStartsWith('Test Item', $actual);
        $this->assertStringEndsWith('foo:', $actual);
        break;
    }
  }

}

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

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