Further Drupal 8.6.4 changes. Some core files were not committed before a commit...
[yaffs-website] / web / core / modules / views / tests / src / Kernel / Handler / SortDateTest.php
1 <?php
2
3 namespace Drupal\Tests\views\Kernel\Handler;
4
5 use Drupal\Component\Render\FormattableMarkup;
6 use Drupal\Tests\views\Kernel\ViewsKernelTestBase;
7 use Drupal\views\Views;
8
9 /**
10  * Tests for core Drupal\views\Plugin\views\sort\Date handler.
11  *
12  * @group views
13  */
14 class SortDateTest extends ViewsKernelTestBase {
15
16   /**
17    * Views used by this test.
18    *
19    * @var array
20    */
21   public static $testViews = ['test_view'];
22
23   protected function expectedResultSet($granularity, $reverse = TRUE) {
24     $expected = [];
25     if (!$reverse) {
26       switch ($granularity) {
27         case 'second':
28           $expected = [
29             ['name' => 'John'],
30             ['name' => 'Paul'],
31             ['name' => 'Meredith'],
32             ['name' => 'Ringo'],
33             ['name' => 'George'],
34           ];
35           break;
36         case 'minute':
37           $expected = [
38             ['name' => 'John'],
39             ['name' => 'Paul'],
40             ['name' => 'Ringo'],
41             ['name' => 'Meredith'],
42             ['name' => 'George'],
43           ];
44           break;
45         case 'hour':
46           $expected = [
47             ['name' => 'John'],
48             ['name' => 'Ringo'],
49             ['name' => 'Paul'],
50             ['name' => 'Meredith'],
51             ['name' => 'George'],
52           ];
53           break;
54         case 'day':
55           $expected = [
56             ['name' => 'John'],
57             ['name' => 'Ringo'],
58             ['name' => 'Paul'],
59             ['name' => 'Meredith'],
60             ['name' => 'George'],
61           ];
62           break;
63         case 'month':
64           $expected = [
65             ['name' => 'John'],
66             ['name' => 'George'],
67             ['name' => 'Ringo'],
68             ['name' => 'Paul'],
69             ['name' => 'Meredith'],
70           ];
71           break;
72         case 'year':
73           $expected = [
74             ['name' => 'John'],
75             ['name' => 'George'],
76             ['name' => 'Ringo'],
77             ['name' => 'Paul'],
78             ['name' => 'Meredith'],
79           ];
80           break;
81       }
82     }
83     else {
84       switch ($granularity) {
85         case 'second':
86           $expected = [
87             ['name' => 'George'],
88             ['name' => 'Ringo'],
89             ['name' => 'Meredith'],
90             ['name' => 'Paul'],
91             ['name' => 'John'],
92           ];
93           break;
94         case 'minute':
95           $expected = [
96             ['name' => 'George'],
97             ['name' => 'Ringo'],
98             ['name' => 'Meredith'],
99             ['name' => 'Paul'],
100             ['name' => 'John'],
101            ];
102           break;
103         case 'hour':
104           $expected = [
105             ['name' => 'George'],
106             ['name' => 'Ringo'],
107             ['name' => 'Paul'],
108             ['name' => 'Meredith'],
109             ['name' => 'John'],
110           ];
111           break;
112         case 'day':
113           $expected = [
114             ['name' => 'George'],
115             ['name' => 'John'],
116             ['name' => 'Ringo'],
117             ['name' => 'Paul'],
118             ['name' => 'Meredith'],
119           ];
120           break;
121         case 'month':
122           $expected = [
123             ['name' => 'John'],
124             ['name' => 'George'],
125             ['name' => 'Ringo'],
126             ['name' => 'Paul'],
127             ['name' => 'Meredith'],
128           ];
129           break;
130         case 'year':
131           $expected = [
132             ['name' => 'John'],
133             ['name' => 'George'],
134             ['name' => 'Ringo'],
135             ['name' => 'Paul'],
136             ['name' => 'Meredith'],
137           ];
138           break;
139       }
140     }
141
142     return $expected;
143   }
144
145   /**
146    * Tests numeric ordering of the result set.
147    */
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');
152         $view->setDisplay();
153
154         // Change the fields.
155         $view->displayHandlers->get('default')->overrideOption('fields', [
156           'name' => [
157             'id' => 'name',
158             'table' => 'views_test_data',
159             'field' => 'name',
160             'relationship' => 'none',
161           ],
162           'created' => [
163             'id' => 'created',
164             'table' => 'views_test_data',
165             'field' => 'created',
166             'relationship' => 'none',
167           ],
168         ]);
169
170         // Change the ordering
171         $view->displayHandlers->get('default')->overrideOption('sorts', [
172           'created' => [
173             'id' => 'created',
174             'table' => 'views_test_data',
175             'field' => 'created',
176             'relationship' => 'none',
177             'granularity' => $granularity,
178             'order' => $reverse ? 'DESC' : 'ASC',
179           ],
180           'id' => [
181             'id' => 'id',
182             'table' => 'views_test_data',
183             'field' => 'id',
184             'relationship' => 'none',
185             'order' => 'ASC',
186           ],
187         ]);
188
189         // Execute the view.
190         $this->executeView($view);
191
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']));
197         $view->destroy();
198         unset($view);
199       }
200     }
201   }
202
203 }