pluginreference-2.0.0/tests/src/Kernel/PluginReferenceSelectionManagerTest.php

tests/src/Kernel/PluginReferenceSelectionManagerTest.php
<?php

namespace Drupal\Tests\pluginreference\Kernel;

use Drupal\field\Entity\FieldConfig;
use Drupal\field\Entity\FieldStorageConfig;
use Drupal\KernelTests\KernelTestBase;
use Drupal\pluginreference\Plugin\PluginReferenceSelection\DefaultSelection;
use Drupal\pluginreference_test\Plugin\PluginReferenceSelection\FieldWidgetTestSelection;

/**
 * Tests the PluginReferenceSelectionManager class.
 *
 * @group pluginreference
 *
 * @coversDefaultClass \Drupal\pluginreference\PluginReferenceSelectionManager
 */
class PluginReferenceSelectionManagerTest extends KernelTestBase {

  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'pluginreference',
    'pluginreference_test',
    'entity_test',
    'field',
    'user',
  ];

  /**
   * The plugin reference selection manager.
   *
   * @var \Drupal\pluginreference\PluginReferenceSelectionManagerInterface
   */
  protected $pluginReferenceSelectionManager;

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

    $this->installEntitySchema('entity_test');
    $this->installConfig(['field']);

    $this->pluginReferenceSelectionManager = $this->container->get('plugin.manager.plugin_reference_selection');
  }

  /**
   * Tests the ::getInstance method.
   *
   * @dataProvider getInstanceDataProvider
   *
   * @covers ::getInstance
   */
  public function testGetInstance(string $expected, array $options): void {
    if (!isset($options['target_type'])) {
      $this->expectException(\InvalidArgumentException::class);
      $this->pluginReferenceSelectionManager->getInstance($options);
    }
    else {
      $this->assertInstanceOf($expected, $this->pluginReferenceSelectionManager->getInstance($options));
    }
  }

  /**
   * Data provider for testGetInstance().
   *
   * @see testGetInstance()
   */
  public static function getInstanceDataProvider(): array {
    return [
      [
        DefaultSelection::class,
        [
          'target_type' => 'plugin_reference_selection',
        ],
      ],
      [
        DefaultSelection::class,
        [
          'target_type' => 'block',
        ],
      ],
      [
        FieldWidgetTestSelection::class,
        [
          'target_type' => 'field.widget',
        ],
      ],
      [
        DefaultSelection::class,
        [
          'target_type' => 'field.widget',
          'handler' => 'default:field.widget',
        ],
      ],
      [
        FieldWidgetTestSelection::class,
        [
          'target_type' => 'field.widget',
          'handler' => 'default',
        ],
      ],
      [
        '',
        [],
      ],
    ];
  }

  /**
   * Tests the ::getPluginId method.
   *
   * @dataProvider getPluginIdDataProvider
   *
   * @covers ::getPluginId
   */
  public function testGetPluginId(string $expected, string $target_type, string $base_plugin_id): void {
    $this->assertEquals($expected, $this->pluginReferenceSelectionManager->getPluginId($target_type, $base_plugin_id));
  }

  /**
   * Data provider for testGetPluginId().
   *
   * @see testGetPluginId()
   */
  public static function getPluginIdDataProvider(): array {
    return [
      [
        'default:plugin_reference_selection',
        'plugin_reference_selection',
        'default',
      ],
      [
        'default:block',
        'block',
        'default',
      ],
      [
        'default:field_widget_test',
        'field.widget',
        'default',
      ],
    ];
  }

  /**
   * Tests the ::getSelectionGroups method.
   *
   * @dataProvider getSelectionGroupsDataProvider
   *
   * @covers ::getSelectionGroups
   */
  public function testGetSelectionGroups(array $expected, string $target_type): void {
    $selection_groups = $this->pluginReferenceSelectionManager->getSelectionGroups($target_type);

    foreach ($expected as $base_plugin_id => $expected_plugin_ids) {
      $this->assertArrayHasKey($base_plugin_id, $selection_groups);
      $this->assertEquals($expected_plugin_ids, array_keys($selection_groups[$base_plugin_id]));
    }

    $this->assertArrayNotHasKey('broken', $selection_groups);
  }

  /**
   * Data provider for testGetSelectionGroups().
   *
   * @see testGetSelectionGroups()
   */
  public static function getSelectionGroupsDataProvider(): array {
    return [
      [
        [
          'default' => [
            'default:plugin_reference_selection',
          ],
        ],
        'plugin_reference_selection',
      ],
      [
        [
          'default' => [
            'default:field.widget',
            'default:field_widget_test',
          ],
        ],
        'field.widget',
      ],
      [
        [
          'default' => [
            'default:block',
          ],
        ],
        'block',
      ],
    ];
  }

  /**
   * Tests the ::getSelectionHandler method.
   *
   * @dataProvider getSelectionHandlerDataProvider
   *
   * @covers ::getSelectionHandler
   */
  public function testGetSelectionHandler(string $expected, string $target_type, string $handler, array $handler_settings): void {
    $field_name = mb_strtolower($this->randomMachineName());
    $field_storage = FieldStorageConfig::create([
      'field_name' => $field_name,
      'entity_type' => 'entity_test',
      'type' => 'plugin_reference',
      'settings' => ['target_type' => $target_type],
    ]);
    $field_storage->save();
    $field = FieldConfig::create([
      'field_storage' => $field_storage,
      'bundle' => 'entity_test',
      'settings' => [
        'handler' => $handler,
        'handler_settings' => $handler_settings,
      ],
    ]);
    $field->save();

    $this->assertInstanceOf($expected, $this->pluginReferenceSelectionManager->getSelectionHandler($field));
  }

  /**
   * Data provider for testGetSelectionHandler().
   *
   * @see testGetSelectionHandler()
   */
  public static function getSelectionHandlerDataProvider(): array {
    return [
      [
        DefaultSelection::class,
        'plugin_reference_selection',
        'default:plugin_reference_selection',
        [],
      ],
      [
        DefaultSelection::class,
        'block',
        'default:block',
        [],
      ],
      [
        FieldWidgetTestSelection::class,
        'field.widget',
        'default:field_widget_test',
        [],
      ],
      [
        DefaultSelection::class,
        'field.widget',
        'default:field.widget',
        [],
      ],
      [
        FieldWidgetTestSelection::class,
        'field.widget',
        'default',
        [],
      ],
    ];
  }

  /**
   * Tests the ::getFallbackPluginId method.
   *
   * @covers ::getFallbackPluginId
   */
  public function testGetFallbackPluginId(): void {
    $this->assertEquals('broken', $this->pluginReferenceSelectionManager->getFallbackPluginId(''));
  }

}

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

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