Loading core/modules/datetime/tests/src/Functional/Views/FilterDateTest.php +60 −14 Original line number Diff line number Diff line Loading @@ -7,7 +7,7 @@ use Drupal\datetime\Plugin\Field\FieldType\DateTimeItemInterface; use Drupal\field\Entity\FieldStorageConfig; use Drupal\field\Entity\FieldConfig; use Drupal\Tests\BrowserTestBase; use Drupal\Tests\views\Functional\ViewTestBase; use Drupal\views\Tests\ViewTestData; /** Loading @@ -15,7 +15,7 @@ * * @group datetime */ class FilterDateTest extends BrowserTestBase { class FilterDateTest extends ViewTestBase { /** * Name of the field. Loading @@ -38,6 +38,13 @@ class FilterDateTest extends BrowserTestBase { */ protected $nodes = []; /** * Dates of test nodes in date storage format. * * @var string[] */ protected $dates; /** * {@inheritdoc} */ Loading @@ -45,7 +52,6 @@ class FilterDateTest extends BrowserTestBase { 'datetime', 'datetime_test', 'node', 'views', 'views_ui', ]; Loading @@ -59,8 +65,8 @@ class FilterDateTest extends BrowserTestBase { * * Create nodes with relative dates of yesterday, today, and tomorrow. */ protected function setUp(): void { parent::setUp(); protected function setUp($import_test_views = TRUE, $modules = ['views_test_config']): void { parent::setUp($import_test_views, $modules); $now = \Drupal::time()->getRequestTime(); Loading @@ -85,17 +91,17 @@ protected function setUp(): void { $field->save(); // Create some nodes. $dates = [ $this->dates = [ // Tomorrow. DrupalDateTime::createFromTimestamp($now + 86400, DateTimeItemInterface::STORAGE_TIMEZONE)->format(DateTimeItemInterface::DATE_STORAGE_FORMAT), DrupalDateTime::createFromTimestamp($now + 86400, DateTimeItemInterface::STORAGE_TIMEZONE)->format(DateTimeItemInterface::DATETIME_STORAGE_FORMAT), // Today. DrupalDateTime::createFromTimestamp($now, DateTimeItemInterface::STORAGE_TIMEZONE)->format(DateTimeItemInterface::DATE_STORAGE_FORMAT), DrupalDateTime::createFromTimestamp($now, DateTimeItemInterface::STORAGE_TIMEZONE)->format(DateTimeItemInterface::DATETIME_STORAGE_FORMAT), // Yesterday. DrupalDateTime::createFromTimestamp($now - 86400, DateTimeItemInterface::STORAGE_TIMEZONE)->format(DateTimeItemInterface::DATE_STORAGE_FORMAT), DrupalDateTime::createFromTimestamp($now - 86400, DateTimeItemInterface::STORAGE_TIMEZONE)->format(DateTimeItemInterface::DATETIME_STORAGE_FORMAT), ]; $this->nodes = []; foreach ($dates as $date) { foreach ($this->dates as $date) { $this->nodes[] = $this->drupalCreateNode([ $this->fieldName => [ 'value' => $date, Loading @@ -121,12 +127,26 @@ public function testExposedGroupedFilters() { $this->submitForm([], 'Expose filter'); $this->submitForm([], 'Grouped filters'); // Test operators 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. Loading @@ -142,14 +162,40 @@ public function testExposedGroupedFilters() { // Filter the Preview by 'empty'. $this->getSession()->getPage()->findField($this->fieldName . '_value')->selectOption(1); $this->getSession()->getPage()->pressButton('Apply'); $results = $this->cssSelect('.view-content .field-content'); $this->assertCount(1, $results); $this->assertIds([4]); // Filter the Preview by 'not empty'. $this->getSession()->getPage()->findField($this->fieldName . '_value')->selectOption(2); $this->getSession()->getPage()->pressButton('Apply'); $results = $this->cssSelect('.view-content .field-content'); $this->assertCount(3, $results); $this->assertIds([1, 2, 3]); // Filter the Preview by 'less than'. $this->getSession()->getPage()->findField($this->fieldName . '_value')->selectOption(3); $this->getSession()->getPage()->pressButton('Apply'); $this->assertIds([2, 3]); // Filter the Preview by 'between'. $this->getSession()->getPage()->findField($this->fieldName . '_value')->selectOption(4); $this->getSession()->getPage()->pressButton('Apply'); $this->assertIds([2]); } /** * Ensures that a given list of items appear on the view result. * * @param array $expected_ids * An array of IDs. */ protected function assertIds(array $expected_ids = []): void { // First verify the count. $elements = $this->cssSelect('.view-content span.field-content'); $this->assertCount(count($expected_ids), $elements); $actual_ids = []; foreach ($elements as $element) { $actual_ids[] = (int) $element->getText(); } $this->assertEquals($expected_ids, $actual_ids); } } Loading
core/modules/datetime/tests/src/Functional/Views/FilterDateTest.php +60 −14 Original line number Diff line number Diff line Loading @@ -7,7 +7,7 @@ use Drupal\datetime\Plugin\Field\FieldType\DateTimeItemInterface; use Drupal\field\Entity\FieldStorageConfig; use Drupal\field\Entity\FieldConfig; use Drupal\Tests\BrowserTestBase; use Drupal\Tests\views\Functional\ViewTestBase; use Drupal\views\Tests\ViewTestData; /** Loading @@ -15,7 +15,7 @@ * * @group datetime */ class FilterDateTest extends BrowserTestBase { class FilterDateTest extends ViewTestBase { /** * Name of the field. Loading @@ -38,6 +38,13 @@ class FilterDateTest extends BrowserTestBase { */ protected $nodes = []; /** * Dates of test nodes in date storage format. * * @var string[] */ protected $dates; /** * {@inheritdoc} */ Loading @@ -45,7 +52,6 @@ class FilterDateTest extends BrowserTestBase { 'datetime', 'datetime_test', 'node', 'views', 'views_ui', ]; Loading @@ -59,8 +65,8 @@ class FilterDateTest extends BrowserTestBase { * * Create nodes with relative dates of yesterday, today, and tomorrow. */ protected function setUp(): void { parent::setUp(); protected function setUp($import_test_views = TRUE, $modules = ['views_test_config']): void { parent::setUp($import_test_views, $modules); $now = \Drupal::time()->getRequestTime(); Loading @@ -85,17 +91,17 @@ protected function setUp(): void { $field->save(); // Create some nodes. $dates = [ $this->dates = [ // Tomorrow. DrupalDateTime::createFromTimestamp($now + 86400, DateTimeItemInterface::STORAGE_TIMEZONE)->format(DateTimeItemInterface::DATE_STORAGE_FORMAT), DrupalDateTime::createFromTimestamp($now + 86400, DateTimeItemInterface::STORAGE_TIMEZONE)->format(DateTimeItemInterface::DATETIME_STORAGE_FORMAT), // Today. DrupalDateTime::createFromTimestamp($now, DateTimeItemInterface::STORAGE_TIMEZONE)->format(DateTimeItemInterface::DATE_STORAGE_FORMAT), DrupalDateTime::createFromTimestamp($now, DateTimeItemInterface::STORAGE_TIMEZONE)->format(DateTimeItemInterface::DATETIME_STORAGE_FORMAT), // Yesterday. DrupalDateTime::createFromTimestamp($now - 86400, DateTimeItemInterface::STORAGE_TIMEZONE)->format(DateTimeItemInterface::DATE_STORAGE_FORMAT), DrupalDateTime::createFromTimestamp($now - 86400, DateTimeItemInterface::STORAGE_TIMEZONE)->format(DateTimeItemInterface::DATETIME_STORAGE_FORMAT), ]; $this->nodes = []; foreach ($dates as $date) { foreach ($this->dates as $date) { $this->nodes[] = $this->drupalCreateNode([ $this->fieldName => [ 'value' => $date, Loading @@ -121,12 +127,26 @@ public function testExposedGroupedFilters() { $this->submitForm([], 'Expose filter'); $this->submitForm([], 'Grouped filters'); // Test operators 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. Loading @@ -142,14 +162,40 @@ public function testExposedGroupedFilters() { // Filter the Preview by 'empty'. $this->getSession()->getPage()->findField($this->fieldName . '_value')->selectOption(1); $this->getSession()->getPage()->pressButton('Apply'); $results = $this->cssSelect('.view-content .field-content'); $this->assertCount(1, $results); $this->assertIds([4]); // Filter the Preview by 'not empty'. $this->getSession()->getPage()->findField($this->fieldName . '_value')->selectOption(2); $this->getSession()->getPage()->pressButton('Apply'); $results = $this->cssSelect('.view-content .field-content'); $this->assertCount(3, $results); $this->assertIds([1, 2, 3]); // Filter the Preview by 'less than'. $this->getSession()->getPage()->findField($this->fieldName . '_value')->selectOption(3); $this->getSession()->getPage()->pressButton('Apply'); $this->assertIds([2, 3]); // Filter the Preview by 'between'. $this->getSession()->getPage()->findField($this->fieldName . '_value')->selectOption(4); $this->getSession()->getPage()->pressButton('Apply'); $this->assertIds([2]); } /** * Ensures that a given list of items appear on the view result. * * @param array $expected_ids * An array of IDs. */ protected function assertIds(array $expected_ids = []): void { // First verify the count. $elements = $this->cssSelect('.view-content span.field-content'); $this->assertCount(count($expected_ids), $elements); $actual_ids = []; foreach ($elements as $element) { $actual_ids[] = (int) $element->getText(); } $this->assertEquals($expected_ids, $actual_ids); } }