View source
<?php
namespace Drupal\Tests\select2boxes\FunctionalJavascript;
use Drupal\taxonomy\Entity\Term;
use Drupal\taxonomy\Entity\Vocabulary;
class Select2BoxesTests extends Select2BoxesTestsBase {
protected function setUp() {
parent::setUp();
$this
->drupalLogin($this->user);
}
public function testWidgetsPlugins() {
$this
->assertTrue(\Drupal::hasService('plugin.manager.field.widget'));
$plugin_manager = \Drupal::service('plugin.manager.field.widget');
foreach (static::$pluginIds as $widget) {
$this
->assertTrue($plugin_manager
->hasDefinition($widget));
}
}
public function testWidgetsAdminExistence() {
$page = $this
->getSession()
->getPage();
$assert_session = $this
->assertSession();
$this
->drupalGet('admin/structure/types/manage/select2boxes_test_content_type/form-display');
$page
->hasSelect('edit-fields-field-tags-type');
$assert_session
->optionExists('edit-fields-field-tags-type', static::$pluginIds[1]);
$assert_session
->optionExists('edit-fields-field-tags-type', static::$pluginIds[2]);
$page
->hasSelect('edit-fields-field-test-list-type');
$assert_session
->optionExists('edit-fields-field-test-list-type', static::$pluginIds[0]);
$assert_session
->elementExists('xpath', '//select[@name="fields[field_test_list][type]"]')
->setValue(static::$pluginIds[0]);
$assert_session
->assertWaitOnAjaxRequest();
$assert_session
->elementExists('xpath', '//select[@name="fields[field_tags][type]"]')
->setValue(static::$pluginIds[1]);
$assert_session
->assertWaitOnAjaxRequest();
$page
->pressButton('Save');
$this
->assertSession()
->pageTextContains('Your settings have been saved.');
}
public function testSingleWidget() {
$page = $this
->getSession()
->getPage();
$assert_session = $this
->assertSession();
$this
->drupalGet('admin/structure/types/manage/select2boxes_test_content_type/form-display');
$assert_session
->elementExists('xpath', '//select[@name="fields[field_tags][type]"]')
->setValue(static::$pluginIds[1]);
$assert_session
->assertWaitOnAjaxRequest();
$page
->pressButton('Save');
$this
->assertSession()
->pageTextContains('Your settings have been saved.');
$this
->drupalGet('node/add/select2boxes_test_content_type');
$select = $assert_session
->selectExists('edit-field-tags');
$assert_session
->elementAttributeExists('css', '#edit-field-tags', 'data-jquery-once-autocomplete');
$assert_session
->elementAttributeExists('css', '#edit-field-tags', 'data-select2-autocomplete-list-widget');
$this
->assertTrue($select
->hasClass('select2-widget'));
}
public function testMultipleWidget() {
$page = $this
->getSession()
->getPage();
$assert_session = $this
->assertSession();
$this
->drupalGet('admin/structure/types/manage/select2boxes_test_content_type/form-display');
$assert_session
->elementExists('xpath', '//select[@name="fields[field_tags][type]"]')
->setValue(static::$pluginIds[2]);
$assert_session
->assertWaitOnAjaxRequest();
$page
->pressButton('Save');
$this
->assertSession()
->pageTextContains('Your settings have been saved.');
$this
->drupalGet('node/add/select2boxes_test_content_type');
$select = $assert_session
->selectExists('edit-field-tags');
$assert_session
->elementAttributeExists('css', '#edit-field-tags', 'data-jquery-once-autocomplete');
$assert_session
->elementAttributeExists('css', '#edit-field-tags', 'data-select2-multiple');
$assert_session
->elementAttributeExists('css', '#edit-field-tags', 'data-autocomplete-path');
$assert_session
->elementAttributeExists('css', '#edit-field-tags', 'data-field-name');
$this
->assertTrue($select
->hasClass('select2-widget'));
$this
->assertTrue($select
->hasClass('select2-boxes-widget'));
$terms = $this
->generateDummyTerms('tags', 10);
$nodes = $this
->generateDummyContent(1);
$node = reset($nodes);
$node
->set('field_tags', $terms[random_int(0, 9)]
->id())
->save();
$this
->drupalGet('node/' . $node
->id() . '/edit');
$select = $assert_session
->selectExists('edit-field-tags');
$this
->assertCount(1, $this
->getOptions($select));
}
public function testListWidget() {
$page = $this
->getSession()
->getPage();
$assert_session = $this
->assertSession();
$this
->drupalGet('admin/structure/types/manage/select2boxes_test_content_type/form-display');
$assert_session
->elementExists('xpath', '//select[@name="fields[field_test_list][type]"]')
->setValue(static::$pluginIds[0]);
$assert_session
->assertWaitOnAjaxRequest();
$page
->pressButton('Save');
$this
->assertSession()
->pageTextContains('Your settings have been saved.');
$this
->drupalGet('node/add/select2boxes_test_content_type');
$select = $assert_session
->selectExists('edit-field-test-list');
$assert_session
->elementAttributeExists('css', '#edit-field-test-list', 'data-jquery-once-autocomplete');
$assert_session
->elementAttributeExists('css', '#edit-field-test-list', 'data-select2-autocomplete-list-widget');
$this
->assertTrue($select
->hasClass('select2-widget'));
}
public function testPreloading() {
$page = $this
->getSession()
->getPage();
$assert_session = $this
->assertSession();
$this
->generateDummyTerms('tags', 10);
$this
->drupalGet('admin/structure/types/manage/select2boxes_test_content_type/form-display');
$assert_session
->elementExists('xpath', '//select[@name="fields[field_tags][type]"]')
->setValue(static::$pluginIds[2]);
$assert_session
->assertWaitOnAjaxRequest();
$page
->pressButton('Save');
$assert_session
->pageTextContains('Preloading disabled');
$this
->click('input[name="field_tags_settings_edit"]');
$assert_session
->assertWaitOnAjaxRequest();
$this
->click('input[name="fields[field_tags][settings_edit_form][third_party_settings][select2boxes][enable_preload]"]');
$assert_session
->assertWaitOnAjaxRequest();
$page
->fillField('fields[field_tags][settings_edit_form][third_party_settings][select2boxes][preload_count]', '5');
$this
->click('input[name="field_tags_plugin_settings_update"]');
$assert_session
->assertWaitOnAjaxRequest();
$assert_session
->pageTextContains('Number of preloaded entries: 5');
$page
->pressButton('Save');
$this
->assertSession()
->pageTextContains('Your settings have been saved.');
$this
->drupalGet('node/add/select2boxes_test_content_type');
$this
->click('input[class="select2-search__field"]');
$assert_session
->assertWaitOnAjaxRequest();
$fake_select = $assert_session
->elementExists('css', '#select2-edit-field-tags-results');
$this
->assertCount(5, $fake_select
->findAll('xpath', '//li'));
}
public function testLimitedSearch() {
$page = $this
->getSession()
->getPage();
$assert_session = $this
->assertSession();
$this
->drupalGet('admin/structure/types/manage/select2boxes_test_content_type/form-display');
$assert_session
->elementExists('xpath', '//select[@name="fields[field_test_list][type]"]')
->setValue(static::$pluginIds[0]);
$assert_session
->assertWaitOnAjaxRequest();
$page
->pressButton('Save');
$this
->assertSession()
->pageTextContains('Your settings have been saved.');
$this
->drupalGet('admin/config/user-interface/select2boxes');
$edit = [
'limited_search' => '1',
'minimum_search_length' => '4',
];
$this
->submitForm($edit, 'Save configuration');
$assert_session
->pageTextContains('The configuration options have been saved.');
$this
->drupalGet('node/add/select2boxes_test_content_type');
$this
->getSession()
->executeScript("jQuery('select[name=\"field_test_list\"]').select2('open');");
$search_input = $assert_session
->elementExists('xpath', '//span[contains(@class, \'select2-search--dropdown\')]');
$this
->assertNotNull($search_input);
$this
->assertTrue($search_input
->hasClass('select2-search--hide'));
$this
->drupalGet('admin/config/user-interface/select2boxes');
$edit = [
'limited_search' => '1',
'minimum_search_length' => '3',
];
$this
->submitForm($edit, 'Save configuration');
$assert_session
->pageTextContains('The configuration options have been saved.');
$this
->drupalGet('node/add/select2boxes_test_content_type');
$this
->getSession()
->executeScript("jQuery('select[name=\"field_test_list\"]').select2('open');");
$search_input = $assert_session
->elementExists('xpath', '//span[contains(@class, \'select2-search--dropdown\')]');
$this
->assertFalse($search_input
->hasClass('select2-search--hide'));
}
public function testEntityAutoCreationWithLimitedSearch() {
$page = $this
->getSession()
->getPage();
$assert_session = $this
->assertSession();
$this
->drupalGet('admin/config/user-interface/select2boxes');
$this
->submitForm([
'limited_search' => '1',
'minimum_search_length' => '4',
], 'Save configuration');
$assert_session
->pageTextContains('The configuration options have been saved.');
$this
->drupalGet('admin/structure/types/manage/select2boxes_test_content_type/form-display');
$assert_session
->elementExists('xpath', '//select[@name="fields[field_tags][type]"]')
->setValue(static::$pluginIds[1]);
$assert_session
->assertWaitOnAjaxRequest();
$page
->pressButton('Save');
$this
->drupalGet('node/add/select2boxes_test_content_type');
$this
->getSession()
->executeScript("jQuery('select[name=\"field_tags\"]').select2('open');");
$search_input = $assert_session
->elementExists('xpath', '//span[contains(@class, \'select2-search--dropdown\')]');
$this
->assertFalse($search_input
->hasClass('select2-search--hide'));
}
public function testUnlimitedPreloading() {
$page = $this
->getSession()
->getPage();
$assert_session = $this
->assertSession();
$this
->generateDummyTerms('tags', 10);
$this
->drupalGet('admin/structure/types/manage/select2boxes_test_content_type/form-display');
$assert_session
->elementExists('xpath', '//select[@name="fields[field_tags][type]"]')
->setValue(static::$pluginIds[2]);
$assert_session
->assertWaitOnAjaxRequest();
$assert_session
->pageTextContains('Preloading disabled');
$this
->click('input[name="field_tags_settings_edit"]');
$assert_session
->assertWaitOnAjaxRequest();
$this
->click('input[name="fields[field_tags][settings_edit_form][third_party_settings][select2boxes][enable_preload]"]');
$assert_session
->assertWaitOnAjaxRequest();
$this
->click('input[name="field_tags_plugin_settings_update"]');
$assert_session
->assertWaitOnAjaxRequest();
$assert_session
->pageTextContains('Number of preloaded entries: all');
$page
->pressButton('Save');
$this
->assertSession()
->pageTextContains('Your settings have been saved.');
$this
->drupalGet('node/add/select2boxes_test_content_type');
$this
->click('input[class="select2-search__field"]');
$assert_session
->assertWaitOnAjaxRequest();
$fake_select = $assert_session
->elementExists('css', '#select2-edit-field-tags-results');
$this
->assertCount(10, $fake_select
->findAll('xpath', '//li'));
}
public function testGlobalSelect2Widgets() {
$assert_session = $this
->assertSession();
$this
->drupalGet('admin/config/user-interface/select2boxes');
$this
->submitForm([
'select2_global' => TRUE,
], 'Save configuration');
$assert_session
->pageTextContains('The configuration options have been saved.');
$this
->drupalGet('admin/structure/types/manage/select2boxes_test_content_type/form-display');
$selects = $assert_session
->elementExists('xpath', '//select');
foreach ($selects as $select) {
$this
->assertTrue($select
->hasClass('select2-widget'));
$this
->assertTrue($select
->hasAttribute('data-jquery-once-autocomplete'));
$this
->assertTrue($select
->hasAttribute('data-select2-autocomplete-list-widget'));
}
$this
->drupalGet('admin/config/user-interface/select2boxes');
$this
->submitForm([
'select2_global' => FALSE,
], 'Save configuration');
$assert_session
->pageTextContains('The configuration options have been saved.');
$this
->drupalGet('admin/structure/types/manage/select2boxes_test_content_type/form-display');
$selects = $assert_session
->elementExists('xpath', '//select');
foreach ($selects as $select) {
$this
->assertFalse($select
->hasClass('select2-widget'));
$this
->assertFalse($select
->hasAttribute('data-jquery-once-autocomplete'));
$this
->assertFalse($select
->hasAttribute('data-select2-autocomplete-list-widget'));
}
}
public function testGlobalSelect2WidgetsWithLimitedSearch() {
$assert_session = $this
->assertSession();
$this
->drupalGet('admin/config/user-interface/select2boxes');
$this
->submitForm([
'select2_global' => TRUE,
'limited_search' => TRUE,
'minimum_search_length' => '3',
], 'Save configuration');
$assert_session
->pageTextContains('The configuration options have been saved.');
$this
->drupalGet('admin/structure/types/manage/select2boxes_test_content_type/form-display');
$this
->getSession()
->executeScript("jQuery('select[name=\"fields[status][type]\"]').select2('open');");
$search_input = $assert_session
->elementExists('xpath', '//span[contains(@class, \'select2-search--dropdown\')]');
$this
->assertTrue($search_input
->hasClass('select2-search--hide'));
}
public function testGlobalSelect2WidgetsWithAdminPagesDisabled() {
$assert_session = $this
->assertSession();
$this
->drupalGet('admin/config/user-interface/select2boxes');
$this
->submitForm([
'select2_global' => TRUE,
], 'Save configuration');
$assert_session
->pageTextContains('The configuration options have been saved.');
$this
->drupalGet('admin/structure/types/manage/select2boxes_test_content_type/form-display');
$selects = $assert_session
->elementExists('xpath', '//select');
foreach ($selects as $select) {
$this
->assertTrue($select
->hasClass('select2-widget'));
$this
->assertTrue($select
->hasAttribute('data-jquery-once-autocomplete'));
$this
->assertTrue($select
->hasAttribute('data-select2-autocomplete-list-widget'));
}
$this
->drupalGet('admin/config/user-interface/select2boxes');
$this
->submitForm([
'disable_for_admin_pages' => TRUE,
], 'Save configuration');
$assert_session
->pageTextContains('The configuration options have been saved.');
$this
->drupalGet('admin/structure/types/manage/select2boxes_test_content_type/form-display');
$selects = $assert_session
->elementExists('xpath', '//select');
foreach ($selects as $select) {
$this
->assertFalse($select
->hasClass('select2-widget'));
$this
->assertFalse($select
->hasAttribute('data-jquery-once-autocomplete'));
$this
->assertFalse($select
->hasAttribute('data-select2-autocomplete-list-widget'));
}
}
public function testEntityAutoCreationWithMultipleVocabularies() {
$page = $this
->getSession()
->getPage();
$assert_session = $this
->assertSession();
$voc = 'test_voc';
Vocabulary::create([
'vid' => $voc,
'name' => $voc,
])
->save();
$this
->assertNotNull(Vocabulary::load($voc));
$this
->drupalGet('admin/structure/types/manage/select2boxes_test_content_type/fields/add-field');
$page
->selectFieldOption('edit-new-storage-type', 'field_ui:entity_reference:taxonomy_term');
$page
->fillField('edit-label', 'Test term');
$page
->pressButton('Save and continue');
$page
->fillField('edit-field-name', 'test_term');
$page
->pressButton('Save and continue');
$page
->selectFieldOption('edit-cardinality', '-1');
$page
->pressButton('Save field settings');
$page
->checkField('settings[handler_settings][auto_create]');
$page
->checkField("settings[handler_settings][target_bundles][{$voc}]");
$assert_session
->assertWaitOnAjaxRequest();
$page
->checkField('settings[handler_settings][target_bundles][tags]');
$assert_session
->assertWaitOnAjaxRequest();
$page
->fillField('settings[handler_settings][auto_create_bundle]', $voc);
$page
->pressButton('Save settings');
$this
->drupalGet('admin/structure/types/manage/select2boxes_test_content_type/form-display');
$assert_session
->elementExists('xpath', '//select[@name="fields[field_test_term][type]"]')
->setValue(static::$pluginIds[2]);
$assert_session
->assertWaitOnAjaxRequest();
$page
->pressButton('Save');
$this
->drupalGet('node/add/select2boxes_test_content_type');
$page
->fillField('title[0][value]', 'TESTTITLE');
$this
->getSession()
->executeScript("jQuery('#edit-field-test-term').next().find('input.select2-search__field').val('TESTTERM').trigger('keyup');");
$assert_session
->assertWaitOnAjaxRequest();
$page
->selectFieldOption('field_test_term[]', 'TESTTERM');
$assert_session
->assertWaitOnAjaxRequest();
$page
->pressButton('Save');
$terms = Term::loadMultiple();
$this
->assertNotEmpty($terms);
$term = reset($terms);
$this
->assertEquals($voc, $term
->bundle());
}
}