]>
Commit | Line | Data |
---|---|---|
66063ed1 A |
1 | <?php |
2 | ||
3 | declare(strict_types=1); | |
4 | ||
5 | namespace Shaarli\Front\Controller\Admin; | |
6 | ||
66063ed1 A |
7 | use Shaarli\Config\ConfigManager; |
8 | use Shaarli\Front\Exception\WrongTokenException; | |
9 | use Shaarli\Security\SessionManager; | |
a5a9cf23 | 10 | use Shaarli\TestCase; |
66063ed1 A |
11 | use Shaarli\Thumbnailer; |
12 | use Slim\Http\Request; | |
13 | use Slim\Http\Response; | |
14 | ||
15 | class ConfigureControllerTest extends TestCase | |
16 | { | |
17 | use FrontAdminControllerMockHelper; | |
18 | ||
19 | /** @var ConfigureController */ | |
20 | protected $controller; | |
21 | ||
22 | public function setUp(): void | |
23 | { | |
24 | $this->createContainer(); | |
25 | ||
26 | $this->controller = new ConfigureController($this->container); | |
27 | } | |
28 | ||
29 | /** | |
30 | * Test displaying configure page - it should display all config variables | |
31 | */ | |
32 | public function testIndex(): void | |
33 | { | |
34 | $assignedVariables = []; | |
35 | $this->assignTemplateVars($assignedVariables); | |
36 | ||
37 | $request = $this->createMock(Request::class); | |
38 | $response = new Response(); | |
39 | ||
40 | $this->container->conf = $this->createMock(ConfigManager::class); | |
41 | $this->container->conf->method('get')->willReturnCallback(function (string $key) { | |
42 | return $key; | |
43 | }); | |
44 | ||
45 | $result = $this->controller->index($request, $response); | |
46 | ||
47 | static::assertSame(200, $result->getStatusCode()); | |
48 | static::assertSame('configure', (string) $result->getBody()); | |
49 | ||
50 | static::assertSame('Configure - general.title', $assignedVariables['pagetitle']); | |
51 | static::assertSame('general.title', $assignedVariables['title']); | |
52 | static::assertSame('resource.theme', $assignedVariables['theme']); | |
53 | static::assertEmpty($assignedVariables['theme_available']); | |
54 | static::assertSame(['default', 'markdown'], $assignedVariables['formatter_available']); | |
55 | static::assertNotEmpty($assignedVariables['continents']); | |
56 | static::assertNotEmpty($assignedVariables['cities']); | |
57 | static::assertSame('general.retrieve_description', $assignedVariables['retrieve_description']); | |
58 | static::assertSame('privacy.default_private_links', $assignedVariables['private_links_default']); | |
59 | static::assertSame('security.session_protection_disabled', $assignedVariables['session_protection_disabled']); | |
60 | static::assertSame('feed.rss_permalinks', $assignedVariables['enable_rss_permalinks']); | |
61 | static::assertSame('updates.check_updates', $assignedVariables['enable_update_check']); | |
62 | static::assertSame('privacy.hide_public_links', $assignedVariables['hide_public_links']); | |
63 | static::assertSame('api.enabled', $assignedVariables['api_enabled']); | |
64 | static::assertSame('api.secret', $assignedVariables['api_secret']); | |
8af1d2da | 65 | static::assertCount(5, $assignedVariables['languages']); |
66063ed1 A |
66 | static::assertArrayHasKey('gd_enabled', $assignedVariables); |
67 | static::assertSame('thumbnails.mode', $assignedVariables['thumbnails_mode']); | |
68 | } | |
69 | ||
70 | /** | |
71 | * Test posting a new config - make sure that everything is saved properly, without errors. | |
72 | */ | |
73 | public function testSaveNewConfig(): void | |
74 | { | |
75 | $session = []; | |
76 | $this->assignSessionVars($session); | |
77 | ||
78 | $parameters = [ | |
79 | 'token' => 'token', | |
80 | 'continent' => 'Europe', | |
81 | 'city' => 'Moscow', | |
82 | 'title' => 'Shaarli', | |
83 | 'titleLink' => './', | |
84 | 'retrieveDescription' => 'on', | |
85 | 'theme' => 'vintage', | |
86 | 'disablesessionprotection' => null, | |
87 | 'privateLinkByDefault' => true, | |
88 | 'enableRssPermalinks' => true, | |
89 | 'updateCheck' => false, | |
90 | 'hidePublicLinks' => 'on', | |
91 | 'enableApi' => 'on', | |
92 | 'apiSecret' => 'abcdef', | |
93 | 'formatter' => 'markdown', | |
94 | 'language' => 'fr', | |
95 | 'enableThumbnails' => Thumbnailer::MODE_NONE, | |
96 | ]; | |
97 | ||
98 | $parametersConfigMapping = [ | |
99 | 'general.timezone' => $parameters['continent'] . '/' . $parameters['city'], | |
100 | 'general.title' => $parameters['title'], | |
101 | 'general.header_link' => $parameters['titleLink'], | |
102 | 'general.retrieve_description' => !!$parameters['retrieveDescription'], | |
103 | 'resource.theme' => $parameters['theme'], | |
104 | 'security.session_protection_disabled' => !!$parameters['disablesessionprotection'], | |
105 | 'privacy.default_private_links' => !!$parameters['privateLinkByDefault'], | |
106 | 'feed.rss_permalinks' => !!$parameters['enableRssPermalinks'], | |
107 | 'updates.check_updates' => !!$parameters['updateCheck'], | |
108 | 'privacy.hide_public_links' => !!$parameters['hidePublicLinks'], | |
109 | 'api.enabled' => !!$parameters['enableApi'], | |
110 | 'api.secret' => $parameters['apiSecret'], | |
111 | 'formatter' => $parameters['formatter'], | |
112 | 'translation.language' => $parameters['language'], | |
113 | 'thumbnails.mode' => $parameters['enableThumbnails'], | |
114 | ]; | |
115 | ||
116 | $request = $this->createMock(Request::class); | |
117 | $request | |
118 | ->expects(static::atLeastOnce()) | |
119 | ->method('getParam')->willReturnCallback(function (string $key) use ($parameters) { | |
120 | if (false === array_key_exists($key, $parameters)) { | |
121 | static::fail('unknown key: ' . $key); | |
122 | } | |
123 | ||
124 | return $parameters[$key]; | |
125 | } | |
126 | ); | |
127 | ||
128 | $response = new Response(); | |
129 | ||
130 | $this->container->conf = $this->createMock(ConfigManager::class); | |
131 | $this->container->conf | |
132 | ->expects(static::atLeastOnce()) | |
133 | ->method('set') | |
134 | ->willReturnCallback(function (string $key, $value) use ($parametersConfigMapping): void { | |
135 | if (false === array_key_exists($key, $parametersConfigMapping)) { | |
136 | static::fail('unknown key: ' . $key); | |
137 | } | |
138 | ||
139 | static::assertSame($parametersConfigMapping[$key], $value); | |
140 | } | |
141 | ); | |
142 | ||
143 | $result = $this->controller->save($request, $response); | |
144 | static::assertSame(302, $result->getStatusCode()); | |
9c75f877 | 145 | static::assertSame(['/subfolder/admin/configure'], $result->getHeader('Location')); |
66063ed1 A |
146 | |
147 | static::assertArrayNotHasKey(SessionManager::KEY_WARNING_MESSAGES, $session); | |
148 | static::assertArrayNotHasKey(SessionManager::KEY_ERROR_MESSAGES, $session); | |
149 | static::assertArrayHasKey(SessionManager::KEY_SUCCESS_MESSAGES, $session); | |
150 | static::assertSame(['Configuration was saved.'], $session[SessionManager::KEY_SUCCESS_MESSAGES]); | |
151 | } | |
152 | ||
153 | /** | |
154 | * Test posting a new config - wrong token. | |
155 | */ | |
156 | public function testSaveNewConfigWrongToken(): void | |
157 | { | |
158 | $this->container->sessionManager = $this->createMock(SessionManager::class); | |
159 | $this->container->sessionManager->method('checkToken')->willReturn(false); | |
160 | ||
161 | $this->container->conf->expects(static::never())->method('set'); | |
162 | $this->container->conf->expects(static::never())->method('write'); | |
163 | ||
164 | $request = $this->createMock(Request::class); | |
165 | $response = new Response(); | |
166 | ||
167 | $this->expectException(WrongTokenException::class); | |
168 | ||
169 | $this->controller->save($request, $response); | |
170 | } | |
171 | ||
172 | /** | |
173 | * Test posting a new config - thumbnail activation. | |
174 | */ | |
175 | public function testSaveNewConfigThumbnailsActivation(): void | |
176 | { | |
177 | $session = []; | |
178 | $this->assignSessionVars($session); | |
179 | ||
180 | $request = $this->createMock(Request::class); | |
181 | $request | |
182 | ->expects(static::atLeastOnce()) | |
183 | ->method('getParam')->willReturnCallback(function (string $key) { | |
184 | if ('enableThumbnails' === $key) { | |
185 | return Thumbnailer::MODE_ALL; | |
186 | } | |
187 | ||
188 | return $key; | |
189 | }) | |
190 | ; | |
191 | $response = new Response(); | |
192 | ||
193 | $result = $this->controller->save($request, $response); | |
194 | ||
195 | static::assertSame(302, $result->getStatusCode()); | |
9c75f877 | 196 | static::assertSame(['/subfolder/admin/configure'], $result->getHeader('Location')); |
66063ed1 A |
197 | |
198 | static::assertArrayNotHasKey(SessionManager::KEY_ERROR_MESSAGES, $session); | |
199 | static::assertArrayHasKey(SessionManager::KEY_WARNING_MESSAGES, $session); | |
200 | static::assertStringContainsString( | |
201 | 'You have enabled or changed thumbnails mode', | |
202 | $session[SessionManager::KEY_WARNING_MESSAGES][0] | |
203 | ); | |
204 | static::assertArrayHasKey(SessionManager::KEY_SUCCESS_MESSAGES, $session); | |
205 | static::assertSame(['Configuration was saved.'], $session[SessionManager::KEY_SUCCESS_MESSAGES]); | |
206 | } | |
207 | ||
208 | /** | |
209 | * Test posting a new config - thumbnail activation. | |
210 | */ | |
211 | public function testSaveNewConfigThumbnailsAlreadyActive(): void | |
212 | { | |
213 | $session = []; | |
214 | $this->assignSessionVars($session); | |
215 | ||
216 | $request = $this->createMock(Request::class); | |
217 | $request | |
218 | ->expects(static::atLeastOnce()) | |
219 | ->method('getParam')->willReturnCallback(function (string $key) { | |
220 | if ('enableThumbnails' === $key) { | |
221 | return Thumbnailer::MODE_ALL; | |
222 | } | |
223 | ||
224 | return $key; | |
225 | }) | |
226 | ; | |
227 | $response = new Response(); | |
228 | ||
229 | $this->container->conf = $this->createMock(ConfigManager::class); | |
230 | $this->container->conf | |
231 | ->expects(static::atLeastOnce()) | |
232 | ->method('get') | |
233 | ->willReturnCallback(function (string $key): string { | |
234 | if ('thumbnails.mode' === $key) { | |
235 | return Thumbnailer::MODE_ALL; | |
236 | } | |
237 | ||
238 | return $key; | |
239 | }) | |
240 | ; | |
241 | ||
242 | $result = $this->controller->save($request, $response); | |
243 | ||
244 | static::assertSame(302, $result->getStatusCode()); | |
9c75f877 | 245 | static::assertSame(['/subfolder/admin/configure'], $result->getHeader('Location')); |
66063ed1 A |
246 | |
247 | static::assertArrayNotHasKey(SessionManager::KEY_ERROR_MESSAGES, $session); | |
248 | static::assertArrayNotHasKey(SessionManager::KEY_WARNING_MESSAGES, $session); | |
249 | static::assertArrayHasKey(SessionManager::KEY_SUCCESS_MESSAGES, $session); | |
250 | static::assertSame(['Configuration was saved.'], $session[SessionManager::KEY_SUCCESS_MESSAGES]); | |
251 | } | |
252 | } |