3 declare(strict_types
=1);
5 namespace Shaarli\Front\Controller
;
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 $this->createValidContainerMockSet();
35 $request = $this->createMock(Request
::class);
36 $response = new Response();
38 $this->container
->feedBuilder
->expects(static::once())->method('setLocale');
39 $this->container
->feedBuilder
->expects(static::once())->method('setHideDates')->with(false);
40 $this->container
->feedBuilder
->expects(static::once())->method('setUsePermalinks')->with(true);
42 // Save RainTPL assigned variables
43 $assignedVariables = [];
44 $this->assignTemplateVars($assignedVariables);
46 $this->container
->feedBuilder
->method('buildData')->willReturn(['content' => 'data']);
48 // Make sure that PluginManager hook is triggered
49 $this->container
->pluginManager
50 ->expects(static::at(0))
51 ->method('executeHooks')
52 ->willReturnCallback(function (string $hook, array $data, array $param): void {
53 static::assertSame('render_feed', $hook);
54 static::assertSame('data', $data['content']);
56 static::assertArrayHasKey('loggedin', $param);
57 static::assertSame('rss', $param['target']);
61 $result = $this->controller
->rss($request, $response);
63 static::assertSame(200, $result->getStatusCode());
64 static::assertStringContainsString('application/rss', $result->getHeader('Content-Type')[0]);
65 static::assertSame('feed.rss', (string) $result->getBody());
66 static::assertSame('data', $assignedVariables['content']);
70 * Feed Controller - ATOM default behaviour
72 public function testDefaultAtomController(): void
74 $this->createValidContainerMockSet();
76 $request = $this->createMock(Request
::class);
77 $response = new Response();
79 $this->container
->feedBuilder
->expects(static::once())->method('setLocale');
80 $this->container
->feedBuilder
->expects(static::once())->method('setHideDates')->with(false);
81 $this->container
->feedBuilder
->expects(static::once())->method('setUsePermalinks')->with(true);
83 // Save RainTPL assigned variables
84 $assignedVariables = [];
85 $this->assignTemplateVars($assignedVariables);
87 $this->container
->feedBuilder
->method('buildData')->willReturn(['content' => 'data']);
89 // Make sure that PluginManager hook is triggered
90 $this->container
->pluginManager
91 ->expects(static::at(0))
92 ->method('executeHooks')
93 ->willReturnCallback(function (string $hook, array $data, array $param): void {
94 static::assertSame('render_feed', $hook);
95 static::assertSame('data', $data['content']);
97 static::assertArrayHasKey('loggedin', $param);
98 static::assertSame('atom', $param['target']);
102 $result = $this->controller
->atom($request, $response);
104 static::assertSame(200, $result->getStatusCode());
105 static::assertStringContainsString('application/atom', $result->getHeader('Content-Type')[0]);
106 static::assertSame('feed.atom', (string) $result->getBody());
107 static::assertSame('data', $assignedVariables['content']);
111 * Feed Controller - ATOM with parameters
113 public function testAtomControllerWithParameters(): void
115 $this->createValidContainerMockSet();
117 $request = $this->createMock(Request
::class);
118 $request->method('getParams')->willReturn(['parameter' => 'value']);
119 $response = new Response();
121 // Save RainTPL assigned variables
122 $assignedVariables = [];
123 $this->assignTemplateVars($assignedVariables);
125 $this->container
->feedBuilder
126 ->method('buildData')
127 ->with('atom', ['parameter' => 'value'])
128 ->willReturn(['content' => 'data'])
131 // Make sure that PluginManager hook is triggered
132 $this->container
->pluginManager
133 ->expects(static::at(0))
134 ->method('executeHooks')
135 ->willReturnCallback(function (string $hook, array $data, array $param): void {
136 static::assertSame('render_feed', $hook);
137 static::assertSame('data', $data['content']);
139 static::assertArrayHasKey('loggedin', $param);
140 static::assertSame('atom', $param['target']);
144 $result = $this->controller
->atom($request, $response);
146 static::assertSame(200, $result->getStatusCode());
147 static::assertStringContainsString('application/atom', $result->getHeader('Content-Type')[0]);
148 static::assertSame('feed.atom', (string) $result->getBody());
149 static::assertSame('data', $assignedVariables['content']);