pluginreference-2.0.0/tests/src/FunctionalJavascript/PluginReferenceFieldWidgetSelectionHandlerTest.php

tests/src/FunctionalJavascript/PluginReferenceFieldWidgetSelectionHandlerTest.php
<?php

namespace Drupal\Tests\pluginreference\FunctionalJavascript;

use Drupal\field\Entity\FieldConfig;
use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
use Drupal\Tests\field_ui\Traits\FieldUiJSTestTrait;
use Drupal\Tests\pluginreference\Traits\PluginReferenceTrait;

/**
 * Test that configuring a selection handler works.
 *
 * @group pluginreference
 */
class PluginReferenceFieldWidgetSelectionHandlerTest extends WebDriverTestBase {

  use PluginReferenceTrait;
  use FieldUiJSTestTrait;

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

  /**
   * Modules to enable.
   *
   * @var array
   */
  protected static $modules = [
    'block',
    'node',
    'field_ui',
    'pluginreference_test',
    'system',
  ];

  /**
   * The node type.
   *
   * @var \Drupal\node\Entity\NodeType
   */
  protected $nodeType;

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

    $this->drupalPlaceBlock('local_actions_block');
    $this->drupalLogin($this->rootUser);
    $this->nodeType = $this->drupalCreateContentType();
  }

  /**
   * Test the selection handler settings form.
   */
  public function testSelectionHandlerSettingsForm(): void {
    $assert_session = $this->assertSession();
    $page = $this->getSession()->getPage();

    // Create a plugin reference field that references field widgets.
    $bundle_path = sprintf('admin/structure/types/manage/%s', $this->nodeType->id());
    $this->fieldUIAddNewFieldJS($bundle_path, 'widget_reference', 'Widget reference', 'field_ui:plugin_reference:field.widget', FALSE);

    // Check the default settings.
    $this->assertEquals('default:field.widget', $page->findField('settings[handler]')->getValue());
    $this->assertEquals('label', $page->findField('settings[handler_settings][sort][key]')->getValue());
    $this->assertEquals('ASC', $page->findField('settings[handler_settings][sort][direction]')->getValue());
    $page->find('css', '.ui-dialog-buttonset button:contains("Save")')->press();
    $assert_session->assert($assert_session->waitForText("Saved Widget reference configuration."), 'text not found');

    // Check that the handler and handler_settings are correctly saved.
    $field_config = FieldConfig::loadByName('node', $this->nodeType->id(), 'field_widget_reference');
    $this->assertEquals('default:field.widget', $field_config->getSetting('handler'));
    $this->assertEquals([
      'sort' => [
        'key' => 'label',
        'direction' => 'ASC',
      ],
    ], $field_config->getSetting('handler_settings'));

    // Update the handler and handler settings.
    $this->drupalGet(sprintf('admin/structure/types/manage/%s/fields/node.%s.field_widget_reference', $this->nodeType->id(), $this->nodeType->id()));

    $page->findField('settings[handler]')->setValue('field_widget_advanced');
    $assert_session->assertNoElementAfterWait('css', '.ajax-progress');
    $page->findField('settings[handler_settings][sort][key]')->setValue('id');
    $page->findField('settings[handler_settings][sort][direction]')->setValue('DESC');
    $page->pressButton('Save settings');
    $this->assertTrue($assert_session->waitForText('Saved Widget reference configuration.'));

    // Check that the handler and handler_settings are correctly saved.
    $field_config = FieldConfig::loadByName('node', $this->nodeType->id(), 'field_widget_reference');
    $this->assertEquals('field_widget_advanced', $field_config->getSetting('handler'));
    $this->assertEquals([
      'sort' => [
        'key' => 'id',
        'direction' => 'DESC',
      ],
    ], $field_config->getSetting('handler_settings'));

    // Update the handler and handler settings.
    $this->drupalGet(sprintf('admin/structure/types/manage/%s/fields/node.%s.field_widget_reference', $this->nodeType->id(), $this->nodeType->id()));
    $page->findField('settings[handler]')->setValue('filtered:field.widget');
    $assert_session->assertNoElementAfterWait('css', '.ajax-progress');

    $page->findField('settings[handler_settings][filter][key]')->setValue('id');
    $page->findField('settings[handler_settings][filter][negate]')->setValue(1);
    $page->findField('settings[handler_settings][filter][target_values][plugin_reference_autocomplete]')->check();
    $page->findField('settings[handler_settings][filter][target_values][boolean_checkbox]')->check();

    $page->findField('settings[handler_settings][sort][key]')->setValue('id');
    $page->findField('settings[handler_settings][sort][direction]')->setValue('DESC');

    $page->pressButton('Save settings');
    $this->assertTrue($assert_session->waitForText('Saved Widget reference configuration.'));
    $field_config = FieldConfig::loadByName('node', $this->nodeType->id(), 'field_widget_reference');
    $this->assertEquals('filtered:field.widget', $field_config->getSetting('handler'));
    $this->assertEquals([
      'filter' => [
        'key' => 'id',
        'negate' => TRUE,
        'target_values' => [
          'plugin_reference_autocomplete' => 'plugin_reference_autocomplete',
          'boolean_checkbox' => 'boolean_checkbox',
        ],
      ],
      'sort' => [
        'key' => 'id',
        'direction' => 'DESC',
      ],
    ], $field_config->getSetting('handler_settings'));

    // Check that the provider option is available.
    $this->drupalGet(sprintf('admin/structure/types/manage/%s/fields/node.%s.field_widget_reference', $this->nodeType->id(), $this->nodeType->id()));
    $page->findField('settings[handler_settings][filter][key]')->setValue('provider');
    // The category option is only available for blocks.
    $this->assertSession()->optionNotExists('settings[handler_settings][filter][key]', 'category');
    $assert_session->assertNoElementAfterWait('css', '.ajax-progress');
    $page->findField('settings[handler_settings][filter][negate]')->setValue(0);
    $page->findField('settings[handler_settings][filter][target_values][pluginreference]')->check();
    $page->pressButton('Save settings');
    $this->assertTrue($assert_session->waitForText('Saved Widget reference configuration.'));

    $field_config = FieldConfig::loadByName('node', $this->nodeType->id(), 'field_widget_reference');
    $this->assertEquals('filtered:field.widget', $field_config->getSetting('handler'));
    $this->assertEquals([
      'filter' => [
        'key' => 'provider',
        'negate' => FALSE,
        'target_values' => [
          'pluginreference' => 'pluginreference',
        ],
      ],
      'sort' => [
        'key' => 'id',
        'direction' => 'DESC',
      ],
    ], $field_config->getSetting('handler_settings'));

    // Add a new field.
    $this->drupalGet(sprintf('admin/structure/types/manage/%s/fields/add-field', $this->nodeType->id()));

    // Create a plugin reference field that references blocks.
    $this->fieldUIAddNewFieldJS($bundle_path, 'block_reference', 'Widget reference', 'field_ui:plugin_reference:block', FALSE);

    $page->findField('settings[handler]')->setValue('filtered:block');
    $assert_session->assertNoElementAfterWait('css', '.ajax-progress');

    // Check that the category filter is present.
    $page->findField('settings[handler_settings][filter][key]')->setValue('category');
    $assert_session->assertNoElementAfterWait('css', '.ajax-progress');
    $page->findField('settings[handler_settings][filter][target_values][Menus]')->check();

    $page->find('css', '.ui-dialog-buttonset button:contains("Save")')->press();
    $assert_session->assert($assert_session->waitForText("Saved Widget reference configuration."), 'text not found');

    $field_config = FieldConfig::loadByName('node', $this->nodeType->id(), 'field_block_reference');
    $this->assertEquals('filtered:block', $field_config->getSetting('handler'));
    $this->assertEquals([
      'filter' => [
        'key' => 'category',
        'negate' => FALSE,
        'target_values' => [
          'Menus' => 'Menus',
        ],
      ],
      'sort' => [
        'key' => 'label',
        'direction' => 'ASC',
      ],
    ], $field_config->getSetting('handler_settings'));
  }

}

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

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