ui_icons-1.0.x-dev/modules/ui_icons_field/tests/src/Functional/IconFieldTest.php

modules/ui_icons_field/tests/src/Functional/IconFieldTest.php
<?php

declare(strict_types=1);

namespace Drupal\Tests\ui_icons_field\Functional;

use Drupal\Core\Theme\Icon\IconDefinition;
use Drupal\Tests\BrowserTestBase;
use Drupal\field\Entity\FieldConfig;
use Drupal\field\Entity\FieldStorageConfig;

/**
 * Test the UI icons field features.
 *
 * @group ui_icons
 */
class IconFieldTest extends BrowserTestBase {
  /**
   * Icon pack from ui_icons_test module.
   */
  private const TEST_ICON_PACK_ID = 'test_path';

  /**
   * Icon from ui_icons_test module.
   */
  private const TEST_ICON_ID = 'foo';

  /**
   * Icon filename from ui_icons_test module.
   */
  private const TEST_ICON_FILENAME = 'foo.png';

  /**
   * Icon class from ui_icons_test module.
   */
  private const TEST_ICON_CLASS = '.icon-foo';

  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'node',
    'field_ui',
    'ui_icons',
    'ui_icons_field',
    'ui_icons_test',
  ];

  /**
   * {@inheritdoc}
   */
  protected $defaultTheme = 'stark';

  /**
   * The field name.
   *
   * @var string
   */
  private $fieldName;

  /**
   * {@inheritdoc}
   */
  protected function setUp(): void {
    parent::setUp();

    $this->fieldName = 'field_icon';

    $this->drupalCreateContentType([
      'type' => 'article',
      'name' => 'Article',
    ]);

    $this->drupalLogin($this->drupalCreateUser([
      'access administration pages',
      'administer content types',
      'administer nodes',
      'administer node display',
      'administer node fields',
      'administer node form display',
      'view the administration theme',
      'create article content',
    ]));
  }

  /**
   * Test field icon create, save and display.
   */
  public function testIconFieldSave(): void {
    $label = 'Icon test';
    $icon_full_id = IconDefinition::createIconId(self::TEST_ICON_PACK_ID, self::TEST_ICON_ID);

    // Create a field and storage for checking.
    FieldStorageConfig::create([
      'field_name' => $this->fieldName,
      'entity_type' => 'node',
      'type' => 'ui_icon',
    ])->save();
    /** @var \Drupal\field\Entity\FieldConfig $field_config */
    $field_config = FieldConfig::create([
      'field_name' => $this->fieldName,
      'entity_type' => 'node',
      'bundle' => 'article',
      'required' => TRUE,
      'label' => $label,
    ]);
    $field_config->save();

    $assert_session = $this->assertSession();

    // Check if field settings are available.
    $this->drupalGet('/admin/structure/types/manage/article/fields/node.article.' . $this->fieldName);
    $assert_session->fieldExists(sprintf('settings[allowed_icon_pack][%s]', self:: TEST_ICON_PACK_ID));

    /** @var \Drupal\Core\Entity\EntityDisplayRepositoryInterface $display_repository */
    $display_repository = \Drupal::service('entity_display.repository');
    $display_repository->getFormDisplay('node', 'article')
      ->setComponent($this->fieldName, [
        'type' => 'icon_widget',
      ])
      ->save();

    $display_repository->getViewDisplay('node', 'article')
      ->setComponent($this->fieldName, [
        'type' => 'icon_formatter',
        'weight' => 1,
      ])
      ->save();

    // Check if widget settings are available.
    $this->drupalGet('/admin/structure/types/manage/article/form-display');
    $assert_session->statusCodeEquals(200);
    $assert_session->optionExists('fields[' . $this->fieldName . '][type]', 'icon_widget');

    // Create a new article node.
    $this->drupalGet('/node/add/article');
    $assert_session->statusCodeEquals(200);

    // Check if the icon field is present.
    $assert_session->fieldExists($this->fieldName . '[0][value][icon_id]');

    // Try to save the node without selecting an icon.
    $edit = [
      'title[0][value]' => 'Test Article',
    ];
    $this->drupalGet('/node/add/article');
    $this->submitForm($edit, 'Save');
    $assert_session->pageTextContains(sprintf('%s field is required.', $label));

    // Select an icon and save the node.
    $edit = [
      'title[0][value]' => 'Test Article',
      $this->fieldName . '[0][value][icon_id]' => $icon_full_id,
    ];
    $this->drupalGet('/node/add/article');
    $this->submitForm($edit, 'Save');
    $assert_session->pageTextContains('Article Test Article has been created.');
    $assert_session->elementExists('css', self::TEST_ICON_CLASS);
    $assert_session->elementExists('css', sprintf(".icon[src$='%s']", self::TEST_ICON_FILENAME));
  }

}

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

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