]> git.immae.eu Git - github/shaarli/Shaarli.git/blame - tests/front/controller/visitor/DailyControllerTest.php
Merge pull request #1697 from ArthurHoaro/feature/pagination
[github/shaarli/Shaarli.git] / tests / front / controller / visitor / DailyControllerTest.php
CommitLineData
69e29ff6
A
1<?php
2
3declare(strict_types=1);
4
2899ebb5 5namespace Shaarli\Front\Controller\Visitor;
69e29ff6 6
69e29ff6 7use Shaarli\Bookmark\Bookmark;
9b8c0a45 8use Shaarli\Bookmark\SearchResult;
c4d5be53 9use Shaarli\Feed\CachedPage;
a5a9cf23 10use Shaarli\TestCase;
69e29ff6
A
11use Slim\Http\Request;
12use Slim\Http\Response;
13
14class DailyControllerTest extends TestCase
15{
dd09ec52 16 use FrontControllerMockHelper;
69e29ff6
A
17
18 /** @var DailyController */
19 protected $controller;
20
21 public function setUp(): void
22 {
dd09ec52
A
23 $this->createContainer();
24
69e29ff6 25 $this->controller = new DailyController($this->container);
c4d5be53 26 DailyController::$DAILY_RSS_NB_DAYS = 2;
69e29ff6
A
27 }
28
c4d5be53 29 public function testValidIndexControllerInvokeDefault(): void
69e29ff6 30 {
69e29ff6 31 $currentDay = new \DateTimeImmutable('2020-05-13');
36e6d88d
A
32 $previousDate = new \DateTime('2 days ago 00:00:00');
33 $nextDate = new \DateTime('today 00:00:00');
69e29ff6
A
34
35 $request = $this->createMock(Request::class);
36e6d88d
A
36 $request->method('getQueryParam')->willReturnCallback(function (string $key) use ($currentDay): ?string {
37 return $key === 'day' ? $currentDay->format('Ymd') : null;
38 });
69e29ff6
A
39 $response = new Response();
40
41 // Save RainTPL assigned variables
42 $assignedVariables = [];
43 $this->assignTemplateVars($assignedVariables);
44
69e29ff6
A
45 $this->container->bookmarkService
46 ->expects(static::once())
36e6d88d
A
47 ->method('findByDate')
48 ->willReturnCallback(
49 function ($from, $to, &$previous, &$next) use ($currentDay, $previousDate, $nextDate): array {
50 $previous = $previousDate;
51 $next = $nextDate;
52
53 return [
54 (new Bookmark())
55 ->setId(1)
56 ->setUrl('http://url.tld')
57 ->setTitle(static::generateString(50))
58 ->setDescription(static::generateString(500))
59 ,
60 (new Bookmark())
61 ->setId(2)
62 ->setUrl('http://url2.tld')
63 ->setTitle(static::generateString(50))
64 ->setDescription(static::generateString(500))
65 ,
66 (new Bookmark())
67 ->setId(3)
68 ->setUrl('http://url3.tld')
69 ->setTitle(static::generateString(50))
70 ->setDescription(static::generateString(500))
71 ,
72 ];
73 }
74 )
69e29ff6
A
75 ;
76
77 // Make sure that PluginManager hook is triggered
78 $this->container->pluginManager
a5a9cf23 79 ->expects(static::atLeastOnce())
69e29ff6 80 ->method('executeHooks')
a5a9cf23 81 ->withConsecutive(['render_daily'])
36e6d88d
A
82 ->willReturnCallback(
83 function (string $hook, array $data, array $param) use ($currentDay, $previousDate, $nextDate): array {
84 if ('render_daily' === $hook) {
85 static::assertArrayHasKey('linksToDisplay', $data);
86 static::assertCount(3, $data['linksToDisplay']);
87 static::assertSame(1, $data['linksToDisplay'][0]['id']);
88 static::assertSame($currentDay->getTimestamp(), $data['day']);
89 static::assertSame($previousDate->format('Ymd'), $data['previousday']);
90 static::assertSame($nextDate->format('Ymd'), $data['nextday']);
91
92 static::assertArrayHasKey('loggedin', $param);
93 }
94
95 return $data;
a5a9cf23 96 }
36e6d88d 97 )
dd09ec52 98 ;
69e29ff6
A
99
100 $result = $this->controller->index($request, $response);
101
102 static::assertSame(200, $result->getStatusCode());
103 static::assertSame('daily', (string) $result->getBody());
104 static::assertSame(
105 'Daily - '. format_date($currentDay, false, true) .' - Shaarli',
106 $assignedVariables['pagetitle']
107 );
e3d28be9
A
108 static::assertEquals($currentDay, $assignedVariables['dayDate']);
109 static::assertEquals($currentDay->getTimestamp(), $assignedVariables['day']);
36e6d88d
A
110 static::assertSame($previousDate->format('Ymd'), $assignedVariables['previousday']);
111 static::assertSame($nextDate->format('Ymd'), $assignedVariables['nextday']);
112 static::assertSame('day', $assignedVariables['type']);
113 static::assertSame('May 13, 2020', $assignedVariables['dayDesc']);
114 static::assertSame('Daily', $assignedVariables['localizedType']);
69e29ff6
A
115 static::assertCount(3, $assignedVariables['linksToDisplay']);
116
117 $link = $assignedVariables['linksToDisplay'][0];
118
119 static::assertSame(1, $link['id']);
120 static::assertSame('http://url.tld', $link['url']);
121 static::assertNotEmpty($link['title']);
122 static::assertNotEmpty($link['description']);
123 static::assertNotEmpty($link['formatedDescription']);
124
125 $link = $assignedVariables['linksToDisplay'][1];
126
127 static::assertSame(2, $link['id']);
128 static::assertSame('http://url2.tld', $link['url']);
129 static::assertNotEmpty($link['title']);
130 static::assertNotEmpty($link['description']);
131 static::assertNotEmpty($link['formatedDescription']);
132
133 $link = $assignedVariables['linksToDisplay'][2];
134
135 static::assertSame(3, $link['id']);
136 static::assertSame('http://url3.tld', $link['url']);
137 static::assertNotEmpty($link['title']);
138 static::assertNotEmpty($link['description']);
139 static::assertNotEmpty($link['formatedDescription']);
140
141 static::assertCount(3, $assignedVariables['cols']);
142 static::assertCount(1, $assignedVariables['cols'][0]);
143 static::assertCount(1, $assignedVariables['cols'][1]);
144 static::assertCount(1, $assignedVariables['cols'][2]);
145
146 $link = $assignedVariables['cols'][0][0];
147
148 static::assertSame(1, $link['id']);
149 static::assertSame('http://url.tld', $link['url']);
150 static::assertNotEmpty($link['title']);
151 static::assertNotEmpty($link['description']);
152 static::assertNotEmpty($link['formatedDescription']);
153
154 $link = $assignedVariables['cols'][1][0];
155
156 static::assertSame(2, $link['id']);
157 static::assertSame('http://url2.tld', $link['url']);
158 static::assertNotEmpty($link['title']);
159 static::assertNotEmpty($link['description']);
160 static::assertNotEmpty($link['formatedDescription']);
161
162 $link = $assignedVariables['cols'][2][0];
163
164 static::assertSame(3, $link['id']);
165 static::assertSame('http://url3.tld', $link['url']);
166 static::assertNotEmpty($link['title']);
167 static::assertNotEmpty($link['description']);
168 static::assertNotEmpty($link['formatedDescription']);
169 }
170
171 /**
172 * Daily page - test that everything goes fine with no future or past bookmarks
173 */
c4d5be53 174 public function testValidIndexControllerInvokeNoFutureOrPast(): void
69e29ff6 175 {
69e29ff6
A
176 $currentDay = new \DateTimeImmutable('2020-05-13');
177
178 $request = $this->createMock(Request::class);
36e6d88d
A
179 $request->method('getQueryParam')->willReturnCallback(function (string $key) use ($currentDay): ?string {
180 return $key === 'day' ? $currentDay->format('Ymd') : null;
181 });
69e29ff6
A
182 $response = new Response();
183
184 // Save RainTPL assigned variables
185 $assignedVariables = [];
186 $this->assignTemplateVars($assignedVariables);
187
69e29ff6
A
188 $this->container->bookmarkService
189 ->expects(static::once())
36e6d88d 190 ->method('findByDate')
69e29ff6 191 ->willReturnCallback(function () use ($currentDay): array {
69e29ff6
A
192 return [
193 (new Bookmark())
194 ->setId(1)
195 ->setUrl('http://url.tld')
66063ed1
A
196 ->setTitle(static::generateString(50))
197 ->setDescription(static::generateString(500))
69e29ff6
A
198 ,
199 ];
200 })
201 ;
202
203 // Make sure that PluginManager hook is triggered
204 $this->container->pluginManager
a5a9cf23 205 ->expects(static::atLeastOnce())
69e29ff6 206 ->method('executeHooks')
a5a9cf23 207 ->withConsecutive(['render_daily'])
69e29ff6 208 ->willReturnCallback(function (string $hook, array $data, array $param) use ($currentDay): array {
a5a9cf23
A
209 if ('render_daily' === $hook) {
210 static::assertArrayHasKey('linksToDisplay', $data);
211 static::assertCount(1, $data['linksToDisplay']);
212 static::assertSame(1, $data['linksToDisplay'][0]['id']);
213 static::assertSame($currentDay->getTimestamp(), $data['day']);
214 static::assertEmpty($data['previousday']);
215 static::assertEmpty($data['nextday']);
69e29ff6 216
a5a9cf23
A
217 static::assertArrayHasKey('loggedin', $param);
218 }
69e29ff6
A
219
220 return $data;
221 });
222
223 $result = $this->controller->index($request, $response);
224
225 static::assertSame(200, $result->getStatusCode());
226 static::assertSame('daily', (string) $result->getBody());
227 static::assertSame(
228 'Daily - '. format_date($currentDay, false, true) .' - Shaarli',
229 $assignedVariables['pagetitle']
230 );
231 static::assertCount(1, $assignedVariables['linksToDisplay']);
232
233 $link = $assignedVariables['linksToDisplay'][0];
234 static::assertSame(1, $link['id']);
235 }
236
237 /**
238 * Daily page - test that height adjustment in columns is working
239 */
c4d5be53 240 public function testValidIndexControllerInvokeHeightAdjustment(): void
69e29ff6 241 {
69e29ff6
A
242 $currentDay = new \DateTimeImmutable('2020-05-13');
243
244 $request = $this->createMock(Request::class);
245 $response = new Response();
246
247 // Save RainTPL assigned variables
248 $assignedVariables = [];
249 $this->assignTemplateVars($assignedVariables);
250
69e29ff6
A
251 $this->container->bookmarkService
252 ->expects(static::once())
36e6d88d 253 ->method('findByDate')
69e29ff6 254 ->willReturnCallback(function () use ($currentDay): array {
69e29ff6
A
255 return [
256 (new Bookmark())->setId(1)->setUrl('http://url.tld')->setTitle('title'),
257 (new Bookmark())
258 ->setId(2)
259 ->setUrl('http://url.tld')
66063ed1
A
260 ->setTitle(static::generateString(50))
261 ->setDescription(static::generateString(5000))
69e29ff6
A
262 ,
263 (new Bookmark())->setId(3)->setUrl('http://url.tld')->setTitle('title'),
264 (new Bookmark())->setId(4)->setUrl('http://url.tld')->setTitle('title'),
265 (new Bookmark())->setId(5)->setUrl('http://url.tld')->setTitle('title'),
266 (new Bookmark())->setId(6)->setUrl('http://url.tld')->setTitle('title'),
267 (new Bookmark())->setId(7)->setUrl('http://url.tld')->setTitle('title'),
268 ];
269 })
270 ;
271
272 // Make sure that PluginManager hook is triggered
273 $this->container->pluginManager
a5a9cf23 274 ->expects(static::atLeastOnce())
69e29ff6
A
275 ->method('executeHooks')
276 ->willReturnCallback(function (string $hook, array $data, array $param): array {
277 return $data;
278 })
279 ;
280
281 $result = $this->controller->index($request, $response);
282
283 static::assertSame(200, $result->getStatusCode());
284 static::assertSame('daily', (string) $result->getBody());
285 static::assertCount(7, $assignedVariables['linksToDisplay']);
286
287 $columnIds = function (array $column): array {
288 return array_map(function (array $item): int { return $item['id']; }, $column);
289 };
290
291 static::assertSame([1, 4, 6], $columnIds($assignedVariables['cols'][0]));
292 static::assertSame([2], $columnIds($assignedVariables['cols'][1]));
293 static::assertSame([3, 5, 7], $columnIds($assignedVariables['cols'][2]));
294 }
295
296 /**
297 * Daily page - no bookmark
298 */
c4d5be53 299 public function testValidIndexControllerInvokeNoBookmark(): void
69e29ff6 300 {
69e29ff6
A
301 $request = $this->createMock(Request::class);
302 $response = new Response();
303
304 // Save RainTPL assigned variables
305 $assignedVariables = [];
306 $this->assignTemplateVars($assignedVariables);
307
308 // Links dataset: 2 links with thumbnails
309 $this->container->bookmarkService
310 ->expects(static::once())
36e6d88d 311 ->method('findByDate')
69e29ff6
A
312 ->willReturnCallback(function (): array {
313 return [];
314 })
315 ;
316
317 // Make sure that PluginManager hook is triggered
318 $this->container->pluginManager
a5a9cf23 319 ->expects(static::atLeastOnce())
69e29ff6
A
320 ->method('executeHooks')
321 ->willReturnCallback(function (string $hook, array $data, array $param): array {
322 return $data;
323 })
324 ;
325
326 $result = $this->controller->index($request, $response);
327
328 static::assertSame(200, $result->getStatusCode());
329 static::assertSame('daily', (string) $result->getBody());
330 static::assertCount(0, $assignedVariables['linksToDisplay']);
b8627059 331 static::assertSame('Today - ' . (new \DateTime())->format('F j, Y'), $assignedVariables['dayDesc']);
e3d28be9
A
332 static::assertEquals((new \DateTime())->setTime(0, 0)->getTimestamp(), $assignedVariables['day']);
333 static::assertEquals((new \DateTime())->setTime(0, 0), $assignedVariables['dayDate']);
69e29ff6
A
334 }
335
c4d5be53
A
336 /**
337 * Daily RSS - default behaviour
338 */
339 public function testValidRssControllerInvokeDefault(): void
340 {
c4d5be53
A
341 $dates = [
342 new \DateTimeImmutable('2020-05-17'),
343 new \DateTimeImmutable('2020-05-15'),
344 new \DateTimeImmutable('2020-05-13'),
36e6d88d 345 new \DateTimeImmutable('+1 month'),
c4d5be53
A
346 ];
347
348 $request = $this->createMock(Request::class);
349 $response = new Response();
350
9b8c0a45
A
351 $this->container->bookmarkService->expects(static::once())->method('search')->willReturn(
352 SearchResult::getSearchResult([
353 (new Bookmark())->setId(1)->setCreated($dates[0])->setUrl('http://domain.tld/1'),
354 (new Bookmark())->setId(2)->setCreated($dates[1])->setUrl('http://domain.tld/2'),
355 (new Bookmark())->setId(3)->setCreated($dates[1])->setUrl('http://domain.tld/3'),
356 (new Bookmark())->setId(4)->setCreated($dates[2])->setUrl('http://domain.tld/4'),
357 (new Bookmark())->setId(5)->setCreated($dates[3])->setUrl('http://domain.tld/5'),
358 ])
359 );
c4d5be53
A
360
361 $this->container->pageCacheManager
362 ->expects(static::once())
363 ->method('getCachePage')
364 ->willReturnCallback(function (): CachedPage {
365 $cachedPage = $this->createMock(CachedPage::class);
366 $cachedPage->expects(static::once())->method('cache')->with('dailyrss');
367
368 return $cachedPage;
369 }
370 );
371
372 // Save RainTPL assigned variables
373 $assignedVariables = [];
374 $this->assignTemplateVars($assignedVariables);
375
376 $result = $this->controller->rss($request, $response);
377
378 static::assertSame(200, $result->getStatusCode());
379 static::assertStringContainsString('application/rss', $result->getHeader('Content-Type')[0]);
380 static::assertSame('dailyrss', (string) $result->getBody());
381 static::assertSame('Shaarli', $assignedVariables['title']);
b93cfeba
A
382 static::assertSame('http://shaarli/subfolder/', $assignedVariables['index_url']);
383 static::assertSame('http://shaarli/subfolder/daily-rss', $assignedVariables['page_url']);
c4d5be53 384 static::assertFalse($assignedVariables['hide_timestamps']);
36e6d88d 385 static::assertCount(3, $assignedVariables['days']);
c4d5be53
A
386
387 $day = $assignedVariables['days'][$dates[0]->format('Ymd')];
36e6d88d 388 $date = $dates[0]->setTime(23, 59, 59);
c4d5be53 389
36e6d88d
A
390 static::assertEquals($date, $day['date']);
391 static::assertSame($date->format(\DateTime::RSS), $day['date_rss']);
392 static::assertSame(format_date($date, false), $day['date_human']);
b93cfeba 393 static::assertSame('http://shaarli/subfolder/daily?day='. $dates[0]->format('Ymd'), $day['absolute_url']);
c4d5be53
A
394 static::assertCount(1, $day['links']);
395 static::assertSame(1, $day['links'][0]['id']);
396 static::assertSame('http://domain.tld/1', $day['links'][0]['url']);
397 static::assertEquals($dates[0], $day['links'][0]['created']);
398
399 $day = $assignedVariables['days'][$dates[1]->format('Ymd')];
36e6d88d 400 $date = $dates[1]->setTime(23, 59, 59);
c4d5be53 401
36e6d88d
A
402 static::assertEquals($date, $day['date']);
403 static::assertSame($date->format(\DateTime::RSS), $day['date_rss']);
404 static::assertSame(format_date($date, false), $day['date_human']);
b93cfeba 405 static::assertSame('http://shaarli/subfolder/daily?day='. $dates[1]->format('Ymd'), $day['absolute_url']);
c4d5be53
A
406 static::assertCount(2, $day['links']);
407
408 static::assertSame(2, $day['links'][0]['id']);
409 static::assertSame('http://domain.tld/2', $day['links'][0]['url']);
410 static::assertEquals($dates[1], $day['links'][0]['created']);
411 static::assertSame(3, $day['links'][1]['id']);
412 static::assertSame('http://domain.tld/3', $day['links'][1]['url']);
413 static::assertEquals($dates[1], $day['links'][1]['created']);
36e6d88d
A
414
415 $day = $assignedVariables['days'][$dates[2]->format('Ymd')];
416 $date = $dates[2]->setTime(23, 59, 59);
417
418 static::assertEquals($date, $day['date']);
419 static::assertSame($date->format(\DateTime::RSS), $day['date_rss']);
420 static::assertSame(format_date($date, false), $day['date_human']);
421 static::assertSame('http://shaarli/subfolder/daily?day='. $dates[2]->format('Ymd'), $day['absolute_url']);
422 static::assertCount(1, $day['links']);
423 static::assertSame(4, $day['links'][0]['id']);
424 static::assertSame('http://domain.tld/4', $day['links'][0]['url']);
425 static::assertEquals($dates[2], $day['links'][0]['created']);
c4d5be53
A
426 }
427
428 /**
429 * Daily RSS - trigger cache rendering
430 */
431 public function testValidRssControllerInvokeTriggerCache(): void
432 {
c4d5be53
A
433 $request = $this->createMock(Request::class);
434 $response = new Response();
435
436 $this->container->pageCacheManager->method('getCachePage')->willReturnCallback(function (): CachedPage {
437 $cachedPage = $this->createMock(CachedPage::class);
438 $cachedPage->method('cachedVersion')->willReturn('this is cache!');
439
440 return $cachedPage;
441 });
442
443 $this->container->bookmarkService->expects(static::never())->method('search');
444
445 $result = $this->controller->rss($request, $response);
446
447 static::assertSame(200, $result->getStatusCode());
448 static::assertStringContainsString('application/rss', $result->getHeader('Content-Type')[0]);
449 static::assertSame('this is cache!', (string) $result->getBody());
450 }
451
452 /**
453 * Daily RSS - No bookmark
454 */
455 public function testValidRssControllerInvokeNoBookmark(): void
456 {
c4d5be53
A
457 $request = $this->createMock(Request::class);
458 $response = new Response();
459
9b8c0a45
A
460 $this->container->bookmarkService
461 ->expects(static::once())->method('search')
462 ->willReturn(SearchResult::getSearchResult([]));
c4d5be53
A
463
464 // Save RainTPL assigned variables
465 $assignedVariables = [];
466 $this->assignTemplateVars($assignedVariables);
467
468 $result = $this->controller->rss($request, $response);
469
470 static::assertSame(200, $result->getStatusCode());
471 static::assertStringContainsString('application/rss', $result->getHeader('Content-Type')[0]);
472 static::assertSame('dailyrss', (string) $result->getBody());
473 static::assertSame('Shaarli', $assignedVariables['title']);
b93cfeba
A
474 static::assertSame('http://shaarli/subfolder/', $assignedVariables['index_url']);
475 static::assertSame('http://shaarli/subfolder/daily-rss', $assignedVariables['page_url']);
c4d5be53
A
476 static::assertFalse($assignedVariables['hide_timestamps']);
477 static::assertCount(0, $assignedVariables['days']);
478 }
36e6d88d
A
479
480 /**
481 * Test simple display index with week parameter
482 */
483 public function testSimpleIndexWeekly(): void
484 {
485 $currentDay = new \DateTimeImmutable('2020-05-13');
486 $expectedDay = new \DateTimeImmutable('2020-05-11');
487
488 $request = $this->createMock(Request::class);
489 $request->method('getQueryParam')->willReturnCallback(function (string $key) use ($currentDay): ?string {
490 return $key === 'week' ? $currentDay->format('YW') : null;
491 });
492 $response = new Response();
493
494 // Save RainTPL assigned variables
495 $assignedVariables = [];
496 $this->assignTemplateVars($assignedVariables);
497
498 $this->container->bookmarkService
499 ->expects(static::once())
500 ->method('findByDate')
501 ->willReturnCallback(
502 function (): array {
503 return [
504 (new Bookmark())
505 ->setId(1)
506 ->setUrl('http://url.tld')
507 ->setTitle(static::generateString(50))
508 ->setDescription(static::generateString(500))
509 ,
510 (new Bookmark())
511 ->setId(2)
512 ->setUrl('http://url2.tld')
513 ->setTitle(static::generateString(50))
514 ->setDescription(static::generateString(500))
515 ,
516 ];
517 }
518 )
519 ;
520
521 $result = $this->controller->index($request, $response);
522
523 static::assertSame(200, $result->getStatusCode());
524 static::assertSame('daily', (string) $result->getBody());
525 static::assertSame(
526 'Weekly - Week 20 (May 11, 2020) - Shaarli',
527 $assignedVariables['pagetitle']
528 );
529
530 static::assertCount(2, $assignedVariables['linksToDisplay']);
531 static::assertEquals($expectedDay->setTime(0, 0), $assignedVariables['dayDate']);
532 static::assertSame($expectedDay->setTime(0, 0)->getTimestamp(), $assignedVariables['day']);
533 static::assertSame('', $assignedVariables['previousday']);
534 static::assertSame('', $assignedVariables['nextday']);
535 static::assertSame('Week 20 (May 11, 2020)', $assignedVariables['dayDesc']);
536 static::assertSame('week', $assignedVariables['type']);
537 static::assertSame('Weekly', $assignedVariables['localizedType']);
538 }
539
540 /**
541 * Test simple display index with month parameter
542 */
543 public function testSimpleIndexMonthly(): void
544 {
545 $currentDay = new \DateTimeImmutable('2020-05-13');
546 $expectedDay = new \DateTimeImmutable('2020-05-01');
547
548 $request = $this->createMock(Request::class);
549 $request->method('getQueryParam')->willReturnCallback(function (string $key) use ($currentDay): ?string {
550 return $key === 'month' ? $currentDay->format('Ym') : null;
551 });
552 $response = new Response();
553
554 // Save RainTPL assigned variables
555 $assignedVariables = [];
556 $this->assignTemplateVars($assignedVariables);
557
558 $this->container->bookmarkService
559 ->expects(static::once())
560 ->method('findByDate')
561 ->willReturnCallback(
562 function (): array {
563 return [
564 (new Bookmark())
565 ->setId(1)
566 ->setUrl('http://url.tld')
567 ->setTitle(static::generateString(50))
568 ->setDescription(static::generateString(500))
569 ,
570 (new Bookmark())
571 ->setId(2)
572 ->setUrl('http://url2.tld')
573 ->setTitle(static::generateString(50))
574 ->setDescription(static::generateString(500))
575 ,
576 ];
577 }
578 )
579 ;
580
581 $result = $this->controller->index($request, $response);
582
583 static::assertSame(200, $result->getStatusCode());
584 static::assertSame('daily', (string) $result->getBody());
585 static::assertSame(
586 'Monthly - May, 2020 - Shaarli',
587 $assignedVariables['pagetitle']
588 );
589
590 static::assertCount(2, $assignedVariables['linksToDisplay']);
591 static::assertEquals($expectedDay->setTime(0, 0), $assignedVariables['dayDate']);
592 static::assertSame($expectedDay->setTime(0, 0)->getTimestamp(), $assignedVariables['day']);
593 static::assertSame('', $assignedVariables['previousday']);
594 static::assertSame('', $assignedVariables['nextday']);
595 static::assertSame('May, 2020', $assignedVariables['dayDesc']);
596 static::assertSame('month', $assignedVariables['type']);
597 static::assertSame('Monthly', $assignedVariables['localizedType']);
598 }
599
600 /**
601 * Test simple display RSS with week parameter
602 */
603 public function testSimpleRssWeekly(): void
604 {
605 $dates = [
606 new \DateTimeImmutable('2020-05-19'),
607 new \DateTimeImmutable('2020-05-13'),
608 ];
609 $expectedDates = [
610 new \DateTimeImmutable('2020-05-24 23:59:59'),
611 new \DateTimeImmutable('2020-05-17 23:59:59'),
612 ];
613
614 $this->container->environment['QUERY_STRING'] = 'week';
615 $request = $this->createMock(Request::class);
616 $request->method('getQueryParam')->willReturnCallback(function (string $key): ?string {
617 return $key === 'week' ? '' : null;
618 });
619 $response = new Response();
620
9b8c0a45
A
621 $this->container->bookmarkService->expects(static::once())->method('search')->willReturn(
622 SearchResult::getSearchResult([
623 (new Bookmark())->setId(1)->setCreated($dates[0])->setUrl('http://domain.tld/1'),
624 (new Bookmark())->setId(2)->setCreated($dates[1])->setUrl('http://domain.tld/2'),
625 (new Bookmark())->setId(3)->setCreated($dates[1])->setUrl('http://domain.tld/3'),
626 ])
627 );
36e6d88d
A
628
629 // Save RainTPL assigned variables
630 $assignedVariables = [];
631 $this->assignTemplateVars($assignedVariables);
632
633 $result = $this->controller->rss($request, $response);
634
635 static::assertSame(200, $result->getStatusCode());
636 static::assertStringContainsString('application/rss', $result->getHeader('Content-Type')[0]);
637 static::assertSame('dailyrss', (string) $result->getBody());
638 static::assertSame('Shaarli', $assignedVariables['title']);
639 static::assertSame('http://shaarli/subfolder/', $assignedVariables['index_url']);
640 static::assertSame('http://shaarli/subfolder/daily-rss?week', $assignedVariables['page_url']);
641 static::assertFalse($assignedVariables['hide_timestamps']);
642 static::assertCount(2, $assignedVariables['days']);
643
644 $day = $assignedVariables['days'][$dates[0]->format('YW')];
645 $date = $expectedDates[0];
646
647 static::assertEquals($date, $day['date']);
648 static::assertSame($date->format(\DateTime::RSS), $day['date_rss']);
649 static::assertSame('Week 21 (May 18, 2020)', $day['date_human']);
650 static::assertSame('http://shaarli/subfolder/daily?week='. $dates[0]->format('YW'), $day['absolute_url']);
651 static::assertCount(1, $day['links']);
652
653 $day = $assignedVariables['days'][$dates[1]->format('YW')];
654 $date = $expectedDates[1];
655
656 static::assertEquals($date, $day['date']);
657 static::assertSame($date->format(\DateTime::RSS), $day['date_rss']);
658 static::assertSame('Week 20 (May 11, 2020)', $day['date_human']);
659 static::assertSame('http://shaarli/subfolder/daily?week='. $dates[1]->format('YW'), $day['absolute_url']);
660 static::assertCount(2, $day['links']);
661 }
662
663 /**
664 * Test simple display RSS with month parameter
665 */
666 public function testSimpleRssMonthly(): void
667 {
668 $dates = [
669 new \DateTimeImmutable('2020-05-19'),
670 new \DateTimeImmutable('2020-04-13'),
671 ];
672 $expectedDates = [
673 new \DateTimeImmutable('2020-05-31 23:59:59'),
674 new \DateTimeImmutable('2020-04-30 23:59:59'),
675 ];
676
677 $this->container->environment['QUERY_STRING'] = 'month';
678 $request = $this->createMock(Request::class);
679 $request->method('getQueryParam')->willReturnCallback(function (string $key): ?string {
680 return $key === 'month' ? '' : null;
681 });
682 $response = new Response();
683
9b8c0a45
A
684 $this->container->bookmarkService->expects(static::once())->method('search')->willReturn(
685 SearchResult::getSearchResult([
686 (new Bookmark())->setId(1)->setCreated($dates[0])->setUrl('http://domain.tld/1'),
687 (new Bookmark())->setId(2)->setCreated($dates[1])->setUrl('http://domain.tld/2'),
688 (new Bookmark())->setId(3)->setCreated($dates[1])->setUrl('http://domain.tld/3'),
689 ])
690 );
36e6d88d
A
691
692 // Save RainTPL assigned variables
693 $assignedVariables = [];
694 $this->assignTemplateVars($assignedVariables);
695
696 $result = $this->controller->rss($request, $response);
697
698 static::assertSame(200, $result->getStatusCode());
699 static::assertStringContainsString('application/rss', $result->getHeader('Content-Type')[0]);
700 static::assertSame('dailyrss', (string) $result->getBody());
701 static::assertSame('Shaarli', $assignedVariables['title']);
702 static::assertSame('http://shaarli/subfolder/', $assignedVariables['index_url']);
703 static::assertSame('http://shaarli/subfolder/daily-rss?month', $assignedVariables['page_url']);
704 static::assertFalse($assignedVariables['hide_timestamps']);
705 static::assertCount(2, $assignedVariables['days']);
706
707 $day = $assignedVariables['days'][$dates[0]->format('Ym')];
708 $date = $expectedDates[0];
709
710 static::assertEquals($date, $day['date']);
711 static::assertSame($date->format(\DateTime::RSS), $day['date_rss']);
712 static::assertSame('May, 2020', $day['date_human']);
713 static::assertSame('http://shaarli/subfolder/daily?month='. $dates[0]->format('Ym'), $day['absolute_url']);
714 static::assertCount(1, $day['links']);
715
716 $day = $assignedVariables['days'][$dates[1]->format('Ym')];
717 $date = $expectedDates[1];
718
719 static::assertEquals($date, $day['date']);
720 static::assertSame($date->format(\DateTime::RSS), $day['date_rss']);
721 static::assertSame('April, 2020', $day['date_human']);
722 static::assertSame('http://shaarli/subfolder/daily?month='. $dates[1]->format('Ym'), $day['absolute_url']);
723 static::assertCount(2, $day['links']);
724 }
69e29ff6 725}