3 namespace Drupal\Tests\datetime\Kernel\Views;
5 use Drupal\node\Entity\Node;
6 use Drupal\views\Views;
9 * Tests the Drupal\datetime\Plugin\views\filter\Date handler.
13 class ArgumentDateTimeTest extends DateTimeHandlerTestBase {
18 public static $testViews = ['test_argument_datetime'];
23 protected function setUp($import_test_views = TRUE) {
24 parent::setUp($import_test_views);
26 // Add some basic test nodes.
31 // Add a date that is the year 2002 in UTC, but 2003 in the site's time
32 // zone (Australia/Sydney).
33 '2002-12-31T23:00:00',
35 foreach ($dates as $date) {
36 $node = Node::create([
37 'title' => $this->randomMachineName(8),
44 $this->nodes[] = $node;
51 * @see \Drupal\datetime\Plugin\views\argument\YearDate
53 public function testDatetimeArgumentYear() {
54 $view = Views::getView('test_argument_datetime');
56 // The 'default' display has the 'year' argument.
57 $view->setDisplay('default');
58 $this->executeView($view, ['2000']);
60 $expected[] = ['nid' => $this->nodes[0]->id()];
61 $this->assertIdenticalResultset($view, $expected, $this->map);
64 $view->setDisplay('default');
65 $this->executeView($view, ['2002']);
67 $expected[] = ['nid' => $this->nodes[2]->id()];
68 $this->assertIdenticalResultset($view, $expected, $this->map);
71 $view->setDisplay('default');
72 $this->executeView($view, ['2003']);
74 $expected[] = ['nid' => $this->nodes[3]->id()];
75 $this->assertIdenticalResultset($view, $expected, $this->map);
78 // Tests different system timezone with the same nodes.
79 $this->setSiteTimezone('America/Vancouver');
81 $view->setDisplay('default');
82 $this->executeView($view, ['2002']);
84 // Only the 3rd node is returned here since UTC 2002-01-01T00:00:00 is still
85 // in 2001 for this user timezone.
86 $expected[] = ['nid' => $this->nodes[3]->id()];
87 $this->assertIdenticalResultset($view, $expected, $this->map);
92 * Test month argument.
94 * @see \Drupal\datetime\Plugin\views\argument\MonthDate
96 public function testDatetimeArgumentMonth() {
97 $view = Views::getView('test_argument_datetime');
98 // The 'embed_1' display has the 'month' argument.
99 $view->setDisplay('embed_1');
101 $this->executeView($view, ['10']);
103 $expected[] = ['nid' => $this->nodes[0]->id()];
104 $expected[] = ['nid' => $this->nodes[1]->id()];
105 $this->assertIdenticalResultset($view, $expected, $this->map);
108 $view->setDisplay('embed_1');
109 $this->executeView($view, ['01']);
111 $expected[] = ['nid' => $this->nodes[2]->id()];
112 $expected[] = ['nid' => $this->nodes[3]->id()];
113 $this->assertIdenticalResultset($view, $expected, $this->map);
120 * @see \Drupal\datetime\Plugin\views\argument\DayDate
122 public function testDatetimeArgumentDay() {
123 $view = Views::getView('test_argument_datetime');
125 // The 'embed_2' display has the 'day' argument.
126 $view->setDisplay('embed_2');
127 $this->executeView($view, ['10']);
129 $expected[] = ['nid' => $this->nodes[0]->id()];
130 $expected[] = ['nid' => $this->nodes[1]->id()];
131 $this->assertIdenticalResultset($view, $expected, $this->map);
134 $view->setDisplay('embed_2');
135 $this->executeView($view, ['01']);
137 $expected[] = ['nid' => $this->nodes[2]->id()];
138 $expected[] = ['nid' => $this->nodes[3]->id()];
139 $this->assertIdenticalResultset($view, $expected, $this->map);
144 * Test year, month, and day arguments combined.
146 public function testDatetimeArgumentAll() {
147 $view = Views::getView('test_argument_datetime');
148 // The 'embed_3' display has year, month, and day arguments.
149 $view->setDisplay('embed_3');
151 $this->executeView($view, ['2000', '10', '10']);
153 $expected[] = ['nid' => $this->nodes[0]->id()];
154 $this->assertIdenticalResultset($view, $expected, $this->map);
157 $view->setDisplay('embed_3');
158 $this->executeView($view, ['2002', '01', '01']);
160 $expected[] = ['nid' => $this->nodes[2]->id()];
161 $this->assertIdenticalResultset($view, $expected, $this->map);
166 * Test week WW argument.
168 public function testDatetimeArgumentWeek() {
169 $view = Views::getView('test_argument_datetime');
170 // The 'embed_4' display has WW argument.
171 $view->setDisplay('embed_4');
173 $this->executeView($view, ['41']);
175 $expected[] = ['nid' => $this->nodes[0]->id()];
176 $expected[] = ['nid' => $this->nodes[1]->id()];
177 $this->assertIdenticalResultset($view, $expected, $this->map);
180 $view->setDisplay('embed_4');
181 $this->executeView($view, ['01']);
183 $expected[] = ['nid' => $this->nodes[2]->id()];
184 $expected[] = ['nid' => $this->nodes[3]->id()];
185 $this->assertIdenticalResultset($view, $expected, $this->map);
190 * Test full_date CCYYMMDD argument.
192 public function testDatetimeArgumentFullDate() {
193 $view = Views::getView('test_argument_datetime');
194 // The 'embed_5' display has CCYYMMDD argument.
195 $view->setDisplay('embed_5');
197 $this->executeView($view, ['20001010']);
199 $expected[] = ['nid' => $this->nodes[0]->id()];
200 $this->assertIdenticalResultset($view, $expected, $this->map);
203 $view->setDisplay('embed_5');
204 $this->executeView($view, ['20020101']);
206 $expected[] = ['nid' => $this->nodes[2]->id()];
207 $this->assertIdenticalResultset($view, $expected, $this->map);
212 * Test year_month CCYYMM argument.
214 public function testDatetimeArgumentYearMonth() {
215 $view = Views::getView('test_argument_datetime');
216 // The 'embed_6' display has CCYYMM argument.
217 $view->setDisplay('embed_6');
219 $this->executeView($view, ['200010']);
221 $expected[] = ['nid' => $this->nodes[0]->id()];
222 $this->assertIdenticalResultset($view, $expected, $this->map);
225 $view->setDisplay('embed_6');
226 $this->executeView($view, ['200201']);
228 $expected[] = ['nid' => $this->nodes[2]->id()];
229 $this->assertIdenticalResultset($view, $expected, $this->map);