3 namespace Drupal\Tests\views\Kernel\Handler;
5 use Drupal\Component\Render\FormattableMarkup;
6 use Drupal\Tests\views\Kernel\ViewsKernelTestBase;
7 use Drupal\views\Views;
10 * Tests for core Drupal\views\Plugin\views\sort\Date handler.
14 class SortDateTest extends ViewsKernelTestBase {
17 * Views used by this test.
21 public static $testViews = ['test_view'];
23 protected function expectedResultSet($granularity, $reverse = TRUE) {
26 switch ($granularity) {
31 ['name' => 'Meredith'],
41 ['name' => 'Meredith'],
50 ['name' => 'Meredith'],
59 ['name' => 'Meredith'],
69 ['name' => 'Meredith'],
78 ['name' => 'Meredith'],
84 switch ($granularity) {
89 ['name' => 'Meredith'],
98 ['name' => 'Meredith'],
105 ['name' => 'George'],
108 ['name' => 'Meredith'],
114 ['name' => 'George'],
118 ['name' => 'Meredith'],
124 ['name' => 'George'],
127 ['name' => 'Meredith'],
133 ['name' => 'George'],
136 ['name' => 'Meredith'],
146 * Tests numeric ordering of the result set.
148 public function testDateOrdering() {
149 foreach (['second', 'minute', 'hour', 'day', 'month', 'year'] as $granularity) {
150 foreach ([FALSE, TRUE] as $reverse) {
151 $view = Views::getView('test_view');
154 // Change the fields.
155 $view->displayHandlers->get('default')->overrideOption('fields', [
158 'table' => 'views_test_data',
160 'relationship' => 'none',
164 'table' => 'views_test_data',
165 'field' => 'created',
166 'relationship' => 'none',
170 // Change the ordering
171 $view->displayHandlers->get('default')->overrideOption('sorts', [
174 'table' => 'views_test_data',
175 'field' => 'created',
176 'relationship' => 'none',
177 'granularity' => $granularity,
178 'order' => $reverse ? 'DESC' : 'ASC',
182 'table' => 'views_test_data',
184 'relationship' => 'none',
190 $this->executeView($view);
192 // Verify the result.
193 $this->assertEqual(count($this->dataSet()), count($view->result), 'The number of returned rows match.');
194 $this->assertIdenticalResultset($view, $this->expectedResultSet($granularity, $reverse), [
195 'views_test_data_name' => 'name',
196 ], new FormattableMarkup('Result is returned correctly when ordering by granularity @granularity, @reverse.', ['@granularity' => $granularity, '@reverse' => $reverse ? 'reverse' : 'forward']));