3 declare(strict_types
=1);
5 namespace Shaarli\Front\Controller\Visitor
;
7 use Shaarli\Bookmark\Bookmark
;
8 use Shaarli\Bookmark\SearchResult
;
9 use Shaarli\Feed\CachedPage
;
11 use Slim\Http\Request
;
12 use Slim\Http\Response
;
14 class DailyControllerTest
extends TestCase
16 use FrontControllerMockHelper
;
18 /** @var DailyController */
19 protected $controller;
21 public function setUp(): void
23 $this->createContainer();
25 $this->controller
= new DailyController($this->container
);
26 DailyController
::$DAILY_RSS_NB_DAYS = 2;
29 public function testValidIndexControllerInvokeDefault(): void
31 $currentDay = new \
DateTimeImmutable('2020-05-13');
32 $previousDate = new \
DateTime('2 days ago 00:00:00');
33 $nextDate = new \
DateTime('today 00:00:00');
35 $request = $this->createMock(Request
::class);
36 $request->method('getQueryParam')->willReturnCallback(function (string $key) use ($currentDay): ?string {
37 return $key === 'day' ? $currentDay->format('Ymd') : null;
39 $response = new Response();
41 // Save RainTPL assigned variables
42 $assignedVariables = [];
43 $this->assignTemplateVars($assignedVariables);
45 $this->container
->bookmarkService
46 ->expects(static::once())
47 ->method('findByDate')
49 function ($from, $to, &$previous, &$next) use ($currentDay, $previousDate, $nextDate): array {
50 $previous = $previousDate;
56 ->setUrl('http://url.tld')
57 ->setTitle(static::generateString(50))
58 ->setDescription(static::generateString(500))
62 ->setUrl('http://url2.tld')
63 ->setTitle(static::generateString(50))
64 ->setDescription(static::generateString(500))
68 ->setUrl('http://url3.tld')
69 ->setTitle(static::generateString(50))
70 ->setDescription(static::generateString(500))
77 // Make sure that PluginManager hook is triggered
78 $this->container
->pluginManager
79 ->expects(static::atLeastOnce())
80 ->method('executeHooks')
81 ->withConsecutive(['render_daily'])
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']);
92 static::assertArrayHasKey('loggedin', $param);
100 $result = $this->controller
->index($request, $response);
102 static::assertSame(200, $result->getStatusCode());
103 static::assertSame('daily', (string) $result->getBody());
105 'Daily - '. format_date($currentDay, false, true) .' - Shaarli',
106 $assignedVariables['pagetitle']
108 static::assertEquals($currentDay, $assignedVariables['dayDate']);
109 static::assertEquals($currentDay->getTimestamp(), $assignedVariables['day']);
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']);
115 static::assertCount(3, $assignedVariables['linksToDisplay']);
117 $link = $assignedVariables['linksToDisplay'][0];
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']);
125 $link = $assignedVariables['linksToDisplay'][1];
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']);
133 $link = $assignedVariables['linksToDisplay'][2];
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']);
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]);
146 $link = $assignedVariables['cols'][0][0];
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']);
154 $link = $assignedVariables['cols'][1][0];
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']);
162 $link = $assignedVariables['cols'][2][0];
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']);
172 * Daily page - test that everything goes fine with no future or past bookmarks
174 public function testValidIndexControllerInvokeNoFutureOrPast(): void
176 $currentDay = new \
DateTimeImmutable('2020-05-13');
178 $request = $this->createMock(Request
::class);
179 $request->method('getQueryParam')->willReturnCallback(function (string $key) use ($currentDay): ?string {
180 return $key === 'day' ? $currentDay->format('Ymd') : null;
182 $response = new Response();
184 // Save RainTPL assigned variables
185 $assignedVariables = [];
186 $this->assignTemplateVars($assignedVariables);
188 $this->container
->bookmarkService
189 ->expects(static::once())
190 ->method('findByDate')
191 ->willReturnCallback(function () use ($currentDay): array {
195 ->setUrl('http://url.tld')
196 ->setTitle(static::generateString(50))
197 ->setDescription(static::generateString(500))
203 // Make sure that PluginManager hook is triggered
204 $this->container
->pluginManager
205 ->expects(static::atLeastOnce())
206 ->method('executeHooks')
207 ->withConsecutive(['render_daily'])
208 ->willReturnCallback(function (string $hook, array $data, array $param) use ($currentDay): array {
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']);
217 static::assertArrayHasKey('loggedin', $param);
223 $result = $this->controller
->index($request, $response);
225 static::assertSame(200, $result->getStatusCode());
226 static::assertSame('daily', (string) $result->getBody());
228 'Daily - '. format_date($currentDay, false, true) .' - Shaarli',
229 $assignedVariables['pagetitle']
231 static::assertCount(1, $assignedVariables['linksToDisplay']);
233 $link = $assignedVariables['linksToDisplay'][0];
234 static::assertSame(1, $link['id']);
238 * Daily page - test that height adjustment in columns is working
240 public function testValidIndexControllerInvokeHeightAdjustment(): void
242 $currentDay = new \
DateTimeImmutable('2020-05-13');
244 $request = $this->createMock(Request
::class);
245 $response = new Response();
247 // Save RainTPL assigned variables
248 $assignedVariables = [];
249 $this->assignTemplateVars($assignedVariables);
251 $this->container
->bookmarkService
252 ->expects(static::once())
253 ->method('findByDate')
254 ->willReturnCallback(function () use ($currentDay): array {
256 (new Bookmark())->setId(1)->setUrl('http://url.tld')->setTitle('title'),
259 ->setUrl('http://url.tld')
260 ->setTitle(static::generateString(50))
261 ->setDescription(static::generateString(5000))
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'),
272 // Make sure that PluginManager hook is triggered
273 $this->container
->pluginManager
274 ->expects(static::atLeastOnce())
275 ->method('executeHooks')
276 ->willReturnCallback(function (string $hook, array $data, array $param): array {
281 $result = $this->controller
->index($request, $response);
283 static::assertSame(200, $result->getStatusCode());
284 static::assertSame('daily', (string) $result->getBody());
285 static::assertCount(7, $assignedVariables['linksToDisplay']);
287 $columnIds = function (array $column): array {
288 return array_map(function (array $item): int {
return $item
['id']; }, $column);
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]));
297 * Daily page - no bookmark
299 public function testValidIndexControllerInvokeNoBookmark(): void
301 $request = $this->createMock(Request
::class);
302 $response = new Response();
304 // Save RainTPL assigned variables
305 $assignedVariables = [];
306 $this->assignTemplateVars($assignedVariables);
308 // Links dataset: 2 links with thumbnails
309 $this->container
->bookmarkService
310 ->expects(static::once())
311 ->method('findByDate')
312 ->willReturnCallback(function (): array {
317 // Make sure that PluginManager hook is triggered
318 $this->container
->pluginManager
319 ->expects(static::atLeastOnce())
320 ->method('executeHooks')
321 ->willReturnCallback(function (string $hook, array $data, array $param): array {
326 $result = $this->controller
->index($request, $response);
328 static::assertSame(200, $result->getStatusCode());
329 static::assertSame('daily', (string) $result->getBody());
330 static::assertCount(0, $assignedVariables['linksToDisplay']);
331 static::assertSame('Today - ' . (new \
DateTime())->format('F j, Y'), $assignedVariables['dayDesc']);
332 static::assertEquals((new \
DateTime())->setTime(0, 0)->getTimestamp(), $assignedVariables['day']);
333 static::assertEquals((new \
DateTime())->setTime(0, 0), $assignedVariables['dayDate']);
337 * Daily RSS - default behaviour
339 public function testValidRssControllerInvokeDefault(): void
342 new \
DateTimeImmutable('2020-05-17'),
343 new \
DateTimeImmutable('2020-05-15'),
344 new \
DateTimeImmutable('2020-05-13'),
345 new \
DateTimeImmutable('+1 month'),
348 $request = $this->createMock(Request
::class);
349 $response = new Response();
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'),
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');
372 // Save RainTPL assigned variables
373 $assignedVariables = [];
374 $this->assignTemplateVars($assignedVariables);
376 $result = $this->controller
->rss($request, $response);
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']);
382 static::assertSame('http://shaarli/subfolder/', $assignedVariables['index_url']);
383 static::assertSame('http://shaarli/subfolder/daily-rss', $assignedVariables['page_url']);
384 static::assertFalse($assignedVariables['hide_timestamps']);
385 static::assertCount(3, $assignedVariables['days']);
387 $day = $assignedVariables['days'][$dates[0]->format('Ymd')];
388 $date = $dates[0]->setTime(23, 59, 59);
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']);
393 static::assertSame('http://shaarli/subfolder/daily?day='. $dates[0]->format('Ymd'), $day['absolute_url']);
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']);
399 $day = $assignedVariables['days'][$dates[1]->format('Ymd')];
400 $date = $dates[1]->setTime(23, 59, 59);
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']);
405 static::assertSame('http://shaarli/subfolder/daily?day='. $dates[1]->format('Ymd'), $day['absolute_url']);
406 static::assertCount(2, $day['links']);
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']);
415 $day = $assignedVariables['days'][$dates[2]->format('Ymd')];
416 $date = $dates[2]->setTime(23, 59, 59);
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']);
429 * Daily RSS - trigger cache rendering
431 public function testValidRssControllerInvokeTriggerCache(): void
433 $request = $this->createMock(Request
::class);
434 $response = new Response();
436 $this->container
->pageCacheManager
->method('getCachePage')->willReturnCallback(function (): CachedPage
{
437 $cachedPage = $this->createMock(CachedPage
::class);
438 $cachedPage->method('cachedVersion')->willReturn('this is cache!');
443 $this->container
->bookmarkService
->expects(static::never())->method('search');
445 $result = $this->controller
->rss($request, $response);
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());
453 * Daily RSS - No bookmark
455 public function testValidRssControllerInvokeNoBookmark(): void
457 $request = $this->createMock(Request
::class);
458 $response = new Response();
460 $this->container
->bookmarkService
461 ->expects(static::once())->method('search')
462 ->willReturn(SearchResult
::getSearchResult([]));
464 // Save RainTPL assigned variables
465 $assignedVariables = [];
466 $this->assignTemplateVars($assignedVariables);
468 $result = $this->controller
->rss($request, $response);
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']);
474 static::assertSame('http://shaarli/subfolder/', $assignedVariables['index_url']);
475 static::assertSame('http://shaarli/subfolder/daily-rss', $assignedVariables['page_url']);
476 static::assertFalse($assignedVariables['hide_timestamps']);
477 static::assertCount(0, $assignedVariables['days']);
481 * Test simple display index with week parameter
483 public function testSimpleIndexWeekly(): void
485 $currentDay = new \
DateTimeImmutable('2020-05-13');
486 $expectedDay = new \
DateTimeImmutable('2020-05-11');
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;
492 $response = new Response();
494 // Save RainTPL assigned variables
495 $assignedVariables = [];
496 $this->assignTemplateVars($assignedVariables);
498 $this->container
->bookmarkService
499 ->expects(static::once())
500 ->method('findByDate')
501 ->willReturnCallback(
506 ->setUrl('http://url.tld')
507 ->setTitle(static::generateString(50))
508 ->setDescription(static::generateString(500))
512 ->setUrl('http://url2.tld')
513 ->setTitle(static::generateString(50))
514 ->setDescription(static::generateString(500))
521 $result = $this->controller
->index($request, $response);
523 static::assertSame(200, $result->getStatusCode());
524 static::assertSame('daily', (string) $result->getBody());
526 'Weekly - Week 20 (May 11, 2020) - Shaarli',
527 $assignedVariables['pagetitle']
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']);
541 * Test simple display index with month parameter
543 public function testSimpleIndexMonthly(): void
545 $currentDay = new \
DateTimeImmutable('2020-05-13');
546 $expectedDay = new \
DateTimeImmutable('2020-05-01');
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;
552 $response = new Response();
554 // Save RainTPL assigned variables
555 $assignedVariables = [];
556 $this->assignTemplateVars($assignedVariables);
558 $this->container
->bookmarkService
559 ->expects(static::once())
560 ->method('findByDate')
561 ->willReturnCallback(
566 ->setUrl('http://url.tld')
567 ->setTitle(static::generateString(50))
568 ->setDescription(static::generateString(500))
572 ->setUrl('http://url2.tld')
573 ->setTitle(static::generateString(50))
574 ->setDescription(static::generateString(500))
581 $result = $this->controller
->index($request, $response);
583 static::assertSame(200, $result->getStatusCode());
584 static::assertSame('daily', (string) $result->getBody());
586 'Monthly - May, 2020 - Shaarli',
587 $assignedVariables['pagetitle']
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']);
601 * Test simple display RSS with week parameter
603 public function testSimpleRssWeekly(): void
606 new \
DateTimeImmutable('2020-05-19'),
607 new \
DateTimeImmutable('2020-05-13'),
610 new \
DateTimeImmutable('2020-05-24 23:59:59'),
611 new \
DateTimeImmutable('2020-05-17 23:59:59'),
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;
619 $response = new Response();
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'),
629 // Save RainTPL assigned variables
630 $assignedVariables = [];
631 $this->assignTemplateVars($assignedVariables);
633 $result = $this->controller
->rss($request, $response);
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']);
644 $day = $assignedVariables['days'][$dates[0]->format('YW')];
645 $date = $expectedDates[0];
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']);
653 $day = $assignedVariables['days'][$dates[1]->format('YW')];
654 $date = $expectedDates[1];
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']);
664 * Test simple display RSS with month parameter
666 public function testSimpleRssMonthly(): void
669 new \
DateTimeImmutable('2020-05-19'),
670 new \
DateTimeImmutable('2020-04-13'),
673 new \
DateTimeImmutable('2020-05-31 23:59:59'),
674 new \
DateTimeImmutable('2020-04-30 23:59:59'),
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;
682 $response = new Response();
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'),
692 // Save RainTPL assigned variables
693 $assignedVariables = [];
694 $this->assignTemplateVars($assignedVariables);
696 $result = $this->controller
->rss($request, $response);
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']);
707 $day = $assignedVariables['days'][$dates[0]->format('Ym')];
708 $date = $expectedDates[0];
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']);
716 $day = $assignedVariables['days'][$dates[1]->format('Ym')];
717 $date = $expectedDates[1];
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']);