3 declare(strict_types
=1);
5 namespace Shaarli\Front\Controller\Visitor
;
7 use PHPUnit\Framework\TestCase
;
8 use Shaarli\Feed\FeedBuilder
;
10 use Slim\Http\Response
;
12 class FeedControllerTest
extends TestCase
14 use FrontControllerMockHelper
;
16 /** @var FeedController */
17 protected $controller;
19 public function setUp(): void
21 $this->createContainer();
23 $this->container
->feedBuilder
= $this->createMock(FeedBuilder
::class);
25 $this->controller
= new FeedController($this->container
);
29 * Feed Controller - RSS default behaviour
31 public function testDefaultRssController(): void
33 $request = $this->createMock(Request
::class);
34 $response = new Response();
36 $this->container
->feedBuilder
->expects(static::once())->method('setLocale');
37 $this->container
->feedBuilder
->expects(static::once())->method('setHideDates')->with(false);
38 $this->container
->feedBuilder
->expects(static::once())->method('setUsePermalinks')->with(true);
40 // Save RainTPL assigned variables
41 $assignedVariables = [];
42 $this->assignTemplateVars($assignedVariables);
44 $this->container
->feedBuilder
->method('buildData')->willReturn(['content' => 'data']);
46 // Make sure that PluginManager hook is triggered
47 $this->container
->pluginManager
48 ->expects(static::at(0))
49 ->method('executeHooks')
50 ->willReturnCallback(function (string $hook, array $data, array $param): void {
51 static::assertSame('render_feed', $hook);
52 static::assertSame('data', $data['content']);
54 static::assertArrayHasKey('loggedin', $param);
55 static::assertSame('feed.rss', $param['target']);
59 $result = $this->controller
->rss($request, $response);
61 static::assertSame(200, $result->getStatusCode());
62 static::assertStringContainsString('application/rss', $result->getHeader('Content-Type')[0]);
63 static::assertSame('feed.rss', (string) $result->getBody());
64 static::assertSame('data', $assignedVariables['content']);
68 * Feed Controller - ATOM default behaviour
70 public function testDefaultAtomController(): void
72 $request = $this->createMock(Request
::class);
73 $response = new Response();
75 $this->container
->feedBuilder
->expects(static::once())->method('setLocale');
76 $this->container
->feedBuilder
->expects(static::once())->method('setHideDates')->with(false);
77 $this->container
->feedBuilder
->expects(static::once())->method('setUsePermalinks')->with(true);
79 // Save RainTPL assigned variables
80 $assignedVariables = [];
81 $this->assignTemplateVars($assignedVariables);
83 $this->container
->feedBuilder
->method('buildData')->willReturn(['content' => 'data']);
85 // Make sure that PluginManager hook is triggered
86 $this->container
->pluginManager
87 ->expects(static::at(0))
88 ->method('executeHooks')
89 ->willReturnCallback(function (string $hook, array $data, array $param): void {
90 static::assertSame('render_feed', $hook);
91 static::assertSame('data', $data['content']);
93 static::assertArrayHasKey('loggedin', $param);
94 static::assertSame('feed.atom', $param['target']);
98 $result = $this->controller
->atom($request, $response);
100 static::assertSame(200, $result->getStatusCode());
101 static::assertStringContainsString('application/atom', $result->getHeader('Content-Type')[0]);
102 static::assertSame('feed.atom', (string) $result->getBody());
103 static::assertSame('data', $assignedVariables['content']);
107 * Feed Controller - ATOM with parameters
109 public function testAtomControllerWithParameters(): void
111 $request = $this->createMock(Request
::class);
112 $request->method('getParams')->willReturn(['parameter' => 'value']);
113 $response = new Response();
115 // Save RainTPL assigned variables
116 $assignedVariables = [];
117 $this->assignTemplateVars($assignedVariables);
119 $this->container
->feedBuilder
120 ->method('buildData')
121 ->with('atom', ['parameter' => 'value'])
122 ->willReturn(['content' => 'data'])
125 // Make sure that PluginManager hook is triggered
126 $this->container
->pluginManager
127 ->expects(static::at(0))
128 ->method('executeHooks')
129 ->willReturnCallback(function (string $hook, array $data, array $param): void {
130 static::assertSame('render_feed', $hook);
131 static::assertSame('data', $data['content']);
133 static::assertArrayHasKey('loggedin', $param);
134 static::assertSame('feed.atom', $param['target']);
138 $result = $this->controller
->atom($request, $response);
140 static::assertSame(200, $result->getStatusCode());
141 static::assertStringContainsString('application/atom', $result->getHeader('Content-Type')[0]);
142 static::assertSame('feed.atom', (string) $result->getBody());
143 static::assertSame('data', $assignedVariables['content']);