You are here

public function Select2BefTests::testFilterForTagFields in Select2 Boxes 8

Test filter for tag fields.

File

modules/select2_bef/tests/src/FunctionalJavascript/Select2BefTests.php, line 70

Class

Select2BefTests
Class for testing Select2Bef.

Namespace

Drupal\Tests\select2_bef\FunctionalJavascript

Code

public function testFilterForTagFields() {
  $page = $this
    ->getSession()
    ->getPage();
  $assert_session = $this
    ->assertSession();

  // Generate fake contents for testing.
  $this
    ->generateDummyTerms('tags', 10);
  $this
    ->generateDummyContent(10);
  $this
    ->drupalGet('admin/structure/views/view/test');

  // Add filter by field "Tags" using the View's UI.
  $this
    ->click('a[id="views-add-filter"]');
  $assert_session
    ->assertWaitOnAjaxRequest();
  $page
    ->fillField('override[controls][options_search]', 'tags');
  $page
    ->checkField('name[node__field_tags.field_tags_target_id]');
  $assert_session
    ->pageTextContains('Selected: Tags (field_tags)');
  $this
    ->click('button.button--primary');
  $assert_session
    ->assertWaitOnAjaxRequest();

  // Set dropdown as a filter widget.
  $page
    ->fillField('options[type]', 'select');
  $this
    ->click('button.button--primary');
  $assert_session
    ->assertWaitOnAjaxRequest();
  $assert_session
    ->pageTextContains('Configure filter criterion: Content: Tags (field_tags)');

  // Make filter exposed.
  $page
    ->checkField('options[expose_button][checkbox][checkbox]');
  $assert_session
    ->assertWaitOnAjaxRequest();
  $this
    ->click('button.button--primary');
  $assert_session
    ->waitForElementRemoved('css', '.views-ui-dialog');

  // Save the view.
  $page
    ->pressButton('Save');
  $assert_session
    ->pageTextContains('The view Test has been saved.');
  $assert_session
    ->pageTextContains('Content: Tags (exposed)');
  $this
    ->drupalGet('admin/structure/views/nojs/display/test/page_1/exposed_form');
  $edit = [
    'exposed_form[type]' => 'bef',
  ];
  $this
    ->submitForm($edit, 'Apply');
  $this
    ->drupalGet('admin/structure/views/nojs/display/test/page_1/exposed_form_options');
  $this
    ->click('summary[role="button"]');
  $assert_session
    ->assertWaitOnAjaxRequest();
  $page
    ->selectFieldOption('exposed_form_options[bef][filter][field_tags_target_id][configuration][plugin_id]', 'select2boxes');
  $page
    ->pressButton('Apply');
  $page
    ->pressButton('Save');
  $assert_session
    ->pageTextContains('The view Test has been saved.');
  $this
    ->drupalGet('test');
  $select = $assert_session
    ->elementExists('css', '#edit-field-tags-target-id');

  // Check if all required html attributes are existing on the entity
  // reference field.
  $assert_session
    ->elementAttributeExists('css', '#edit-field-tags-target-id', 'data-jquery-once-autocomplete');
  $assert_session
    ->elementAttributeExists('css', '#edit-field-tags-target-id', 'data-select2-autocomplete-list-widget');
  $this
    ->assertTrue($select
    ->hasClass('select2-widget'));

  // Update widget to use multiple Select2 widget.
  $this
    ->drupalGet('admin/structure/views/view/test');
  $this
    ->clickLink('Content: Tags (exposed)');
  $assert_session
    ->assertWaitOnAjaxRequest();
  $page
    ->checkField('options[expose][multiple]');
  $this
    ->click('button.button--primary');
  $assert_session
    ->waitForElementRemoved('css', '.views-ui-dialog');
  $this
    ->drupalGet('admin/structure/views/nojs/display/test/page_1/exposed_form_options');
  $page
    ->selectFieldOption('exposed_form_options[bef][filter][field_tags_target_id][configuration][plugin_id]', 'select2boxes');
  $page
    ->pressButton('Apply');
  $page
    ->pressButton('Save');
  $assert_session
    ->pageTextContains('The view Test has been saved.');
  $this
    ->drupalGet('test');

  // Trigger the opening dropdown via click on the search input field.
  $this
    ->click('input[class="select2-search__field"]');
  $assert_session
    ->assertWaitOnAjaxRequest();
  $select = $assert_session
    ->elementExists('css', '#edit-field-tags-target-id');

  // Check if all required html attributes are existing for the entity
  // reference field.
  $assert_session
    ->elementAttributeExists('css', '#edit-field-tags-target-id', 'data-jquery-once-autocomplete');
  $assert_session
    ->elementAttributeExists('css', '#edit-field-tags-target-id', 'data-select2-autocomplete-list-widget');
  $assert_session
    ->elementAttributeExists('css', '#edit-field-tags-target-id', 'data-select2-multiple');
  $this
    ->assertTrue($select
    ->hasClass('select2-widget'));
}