function FilterDateTest::testExposedGroupedFilters

Same name and namespace in other branches
  1. 9 core/modules/datetime/tests/src/Functional/Views/FilterDateTest.php \Drupal\Tests\datetime\Functional\Views\FilterDateTest::testExposedGroupedFilters()
  2. 8.9.x core/modules/datetime/tests/src/Functional/Views/FilterDateTest.php \Drupal\Tests\datetime\Functional\Views\FilterDateTest::testExposedGroupedFilters()
  3. 11.x core/modules/datetime/tests/src/Functional/Views/FilterDateTest.php \Drupal\Tests\datetime\Functional\Views\FilterDateTest::testExposedGroupedFilters()

Tests exposed grouped filters.

File

core/modules/datetime/tests/src/Functional/Views/FilterDateTest.php, line 126

Class

FilterDateTest
Tests Views filters for datetime fields.

Namespace

Drupal\Tests\datetime\Functional\Views

Code

public function testExposedGroupedFilters() : void {
  $filter_identifier = $this->fieldName . '_value';
  $this->drupalGet('admin/structure/views/nojs/handler/test_filter_datetime/default/filter/' . $filter_identifier);
  $this->submitForm([], 'Expose filter');
  $this->submitForm([], 'Grouped filters');
  // Create groups with different amount of expected values.
  $edit = [];
  // No values are required.
  $edit['options[group_info][group_items][1][title]'] = 'empty';
  $edit['options[group_info][group_items][1][operator]'] = 'empty';
  $edit['options[group_info][group_items][2][title]'] = 'not empty';
  $edit['options[group_info][group_items][2][operator]'] = 'not empty';
  // One value is required.
  $edit['options[group_info][group_items][3][title]'] = 'less than';
  $edit['options[group_info][group_items][3][operator]'] = '<';
  $edit['options[group_info][group_items][3][value][value]'] = $this->dates[0];
  // Two values are required (min and max).
  $this->submitForm($edit, 'Add another item');
  $edit['options[group_info][group_items][4][title]'] = 'between';
  $edit['options[group_info][group_items][4][operator]'] = 'between';
  $edit['options[group_info][group_items][4][value][type]'] = 'offset';
  $edit['options[group_info][group_items][4][value][min]'] = '-2 hours';
  $edit['options[group_info][group_items][4][value][max]'] = '+2 hours';
  $this->submitForm($edit, 'Apply');
  // Test that the exposed filter works as expected.
  $path = 'test_filter_datetime-path';
  $this->drupalGet('admin/structure/views/view/test_filter_datetime/edit');
  $this->submitForm([], 'Add Page');
  $this->drupalGet('admin/structure/views/nojs/display/test_filter_datetime/page_1/path');
  $this->submitForm([
    'path' => $path,
  ], 'Apply');
  $this->submitForm([], 'Save');
  $this->drupalGet($path);
  // Filter the Preview by 'empty'.
  $this->getSession()
    ->getPage()
    ->findField($filter_identifier)
    ->selectOption('1');
  $this->getSession()
    ->getPage()
    ->pressButton('Apply');
  $this->assertIds([
    4,
  ]);
  // Filter the Preview by 'not empty'.
  $this->getSession()
    ->getPage()
    ->findField($filter_identifier)
    ->selectOption('2');
  $this->getSession()
    ->getPage()
    ->pressButton('Apply');
  $this->assertIds([
    1,
    2,
    3,
  ]);
  // Filter the Preview by 'less than'.
  $this->getSession()
    ->getPage()
    ->findField($filter_identifier)
    ->selectOption('3');
  $this->getSession()
    ->getPage()
    ->pressButton('Apply');
  $this->assertIds([
    2,
    3,
  ]);
  // Filter the Preview by 'between'.
  $this->getSession()
    ->getPage()
    ->findField($filter_identifier)
    ->selectOption('4');
  $this->getSession()
    ->getPage()
    ->pressButton('Apply');
  $this->assertIds([
    2,
  ]);
  // Change the identifier for grouped exposed filter.
  $this->drupalGet('admin/structure/views/nojs/handler/test_filter_datetime/default/filter/' . $filter_identifier);
  $filter_identifier = 'date';
  $edit['options[group_info][identifier]'] = $filter_identifier;
  $this->submitForm($edit, 'Apply');
  $this->submitForm([], 'Save');
  // Filter results again using a new filter identifier.
  $this->drupalGet($path);
  $this->getSession()
    ->getPage()
    ->findField($filter_identifier)
    ->selectOption('2');
  $this->getSession()
    ->getPage()
    ->pressButton('Apply');
  $this->assertIds([
    1,
    2,
    3,
  ]);
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.