]>
Commit | Line | Data |
---|---|---|
4d85d7e9 J |
1 | <?php |
2 | ||
3 | namespace Wallabag\CoreBundle\Tests\Controller; | |
4 | ||
769e19dc | 5 | use Wallabag\CoreBundle\Tests\WallabagCoreTestCase; |
4d85d7e9 | 6 | |
769e19dc | 7 | class ConfigControllerTest extends WallabagCoreTestCase |
4d85d7e9 J |
8 | { |
9 | public function testLogin() | |
10 | { | |
11 | $client = $this->getClient(); | |
12 | ||
13 | $client->request('GET', '/new'); | |
14 | ||
15 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | |
16 | $this->assertContains('login', $client->getResponse()->headers->get('location')); | |
17 | } | |
18 | ||
19 | public function testIndex() | |
20 | { | |
21 | $this->logInAs('admin'); | |
22 | $client = $this->getClient(); | |
23 | ||
24 | $crawler = $client->request('GET', '/config'); | |
25 | ||
26 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | |
27 | ||
d9085c63 J |
28 | $this->assertCount(1, $crawler->filter('button[id=config_save]')); |
29 | $this->assertCount(1, $crawler->filter('button[id=change_passwd_save]')); | |
c844dc0c | 30 | $this->assertCount(1, $crawler->filter('button[id=update_user_save]')); |
371ac69a J |
31 | $this->assertCount(1, $crawler->filter('button[id=new_user_save]')); |
32 | $this->assertCount(1, $crawler->filter('button[id=rss_config_save]')); | |
4d85d7e9 J |
33 | } |
34 | ||
35 | public function testUpdate() | |
36 | { | |
37 | $this->logInAs('admin'); | |
38 | $client = $this->getClient(); | |
39 | ||
40 | $crawler = $client->request('GET', '/config'); | |
41 | ||
42 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | |
43 | ||
d9085c63 | 44 | $form = $crawler->filter('button[id=config_save]')->form(); |
4d85d7e9 J |
45 | |
46 | $data = array( | |
75e9d1df | 47 | 'config[theme]' => 0, |
4d85d7e9 J |
48 | 'config[items_per_page]' => '30', |
49 | 'config[language]' => 'fr_FR', | |
50 | ); | |
51 | ||
52 | $client->submit($form, $data); | |
53 | ||
54 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | |
55 | ||
56 | $crawler = $client->followRedirect(); | |
57 | ||
32da2a70 | 58 | $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); |
4d85d7e9 J |
59 | $this->assertContains('Config saved', $alert[0]); |
60 | } | |
61 | ||
62 | public function dataForUpdateFailed() | |
63 | { | |
64 | return array( | |
65 | array(array( | |
75e9d1df | 66 | 'config[theme]' => 0, |
4d85d7e9 J |
67 | 'config[items_per_page]' => '', |
68 | 'config[language]' => 'fr_FR', | |
69 | )), | |
70 | array(array( | |
75e9d1df | 71 | 'config[theme]' => 0, |
4d85d7e9 J |
72 | 'config[items_per_page]' => '12', |
73 | 'config[language]' => '', | |
74 | )), | |
75 | ); | |
76 | } | |
77 | ||
78 | /** | |
79 | * @dataProvider dataForUpdateFailed | |
80 | */ | |
81 | public function testUpdateFailed($data) | |
82 | { | |
83 | $this->logInAs('admin'); | |
84 | $client = $this->getClient(); | |
85 | ||
86 | $crawler = $client->request('GET', '/config'); | |
87 | ||
88 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | |
89 | ||
d9085c63 | 90 | $form = $crawler->filter('button[id=config_save]')->form(); |
4d85d7e9 J |
91 | |
92 | $crawler = $client->submit($form, $data); | |
93 | ||
94 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | |
95 | ||
96 | $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(array('_text'))); | |
97 | $this->assertContains('This value should not be blank', $alert[0]); | |
98 | } | |
d9085c63 J |
99 | |
100 | public function dataForChangePasswordFailed() | |
101 | { | |
102 | return array( | |
103 | array( | |
104 | array( | |
4ab58dcf | 105 | 'change_passwd[old_password]' => 'material', |
d9085c63 J |
106 | 'change_passwd[new_password][first]' => '', |
107 | 'change_passwd[new_password][second]' => '', | |
108 | ), | |
c0d9eba0 | 109 | 'Wrong value for your current password', |
d9085c63 J |
110 | ), |
111 | array( | |
112 | array( | |
113 | 'change_passwd[old_password]' => 'mypassword', | |
114 | 'change_passwd[new_password][first]' => '', | |
115 | 'change_passwd[new_password][second]' => '', | |
116 | ), | |
c0d9eba0 | 117 | 'This value should not be blank', |
d9085c63 J |
118 | ), |
119 | array( | |
120 | array( | |
121 | 'change_passwd[old_password]' => 'mypassword', | |
122 | 'change_passwd[new_password][first]' => 'hop', | |
123 | 'change_passwd[new_password][second]' => '', | |
124 | ), | |
c0d9eba0 | 125 | 'The password fields must match', |
d9085c63 J |
126 | ), |
127 | array( | |
128 | array( | |
129 | 'change_passwd[old_password]' => 'mypassword', | |
130 | 'change_passwd[new_password][first]' => 'hop', | |
131 | 'change_passwd[new_password][second]' => 'hop', | |
132 | ), | |
e4977b8a | 133 | 'Password should by at least', |
d9085c63 J |
134 | ), |
135 | ); | |
136 | } | |
137 | ||
138 | /** | |
139 | * @dataProvider dataForChangePasswordFailed | |
140 | */ | |
141 | public function testChangePasswordFailed($data, $expectedMessage) | |
142 | { | |
143 | $this->logInAs('admin'); | |
144 | $client = $this->getClient(); | |
145 | ||
146 | $crawler = $client->request('GET', '/config'); | |
147 | ||
148 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | |
149 | ||
150 | $form = $crawler->filter('button[id=change_passwd_save]')->form(); | |
151 | ||
152 | $crawler = $client->submit($form, $data); | |
153 | ||
154 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | |
155 | ||
156 | $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(array('_text'))); | |
157 | $this->assertContains($expectedMessage, $alert[0]); | |
158 | } | |
159 | ||
160 | public function testChangePassword() | |
161 | { | |
162 | $this->logInAs('admin'); | |
163 | $client = $this->getClient(); | |
164 | ||
165 | $crawler = $client->request('GET', '/config'); | |
166 | ||
167 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | |
168 | ||
169 | $form = $crawler->filter('button[id=change_passwd_save]')->form(); | |
170 | ||
171 | $data = array( | |
172 | 'change_passwd[old_password]' => 'mypassword', | |
173 | 'change_passwd[new_password][first]' => 'mypassword', | |
174 | 'change_passwd[new_password][second]' => 'mypassword', | |
175 | ); | |
176 | ||
177 | $client->submit($form, $data); | |
178 | ||
179 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | |
180 | ||
181 | $crawler = $client->followRedirect(); | |
182 | ||
32da2a70 | 183 | $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); |
d9085c63 J |
184 | $this->assertContains('Password updated', $alert[0]); |
185 | } | |
c0d9eba0 J |
186 | |
187 | public function dataForUserFailed() | |
188 | { | |
189 | return array( | |
190 | array( | |
191 | array( | |
c844dc0c J |
192 | 'update_user[name]' => '', |
193 | 'update_user[email]' => '', | |
c0d9eba0 | 194 | ), |
3f7a6290 | 195 | 'Please enter an email', |
c0d9eba0 J |
196 | ), |
197 | array( | |
198 | array( | |
c844dc0c J |
199 | 'update_user[name]' => '', |
200 | 'update_user[email]' => 'test', | |
c0d9eba0 | 201 | ), |
3f7a6290 | 202 | 'The email is not valid', |
c0d9eba0 J |
203 | ), |
204 | ); | |
205 | } | |
206 | ||
207 | /** | |
208 | * @dataProvider dataForUserFailed | |
209 | */ | |
210 | public function testUserFailed($data, $expectedMessage) | |
211 | { | |
212 | $this->logInAs('admin'); | |
213 | $client = $this->getClient(); | |
214 | ||
215 | $crawler = $client->request('GET', '/config'); | |
216 | ||
217 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | |
218 | ||
c844dc0c | 219 | $form = $crawler->filter('button[id=update_user_save]')->form(); |
c0d9eba0 J |
220 | |
221 | $crawler = $client->submit($form, $data); | |
222 | ||
223 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | |
224 | ||
225 | $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(array('_text'))); | |
226 | $this->assertContains($expectedMessage, $alert[0]); | |
227 | } | |
228 | ||
229 | public function testUserUpdate() | |
230 | { | |
231 | $this->logInAs('admin'); | |
232 | $client = $this->getClient(); | |
233 | ||
234 | $crawler = $client->request('GET', '/config'); | |
235 | ||
236 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | |
237 | ||
c844dc0c | 238 | $form = $crawler->filter('button[id=update_user_save]')->form(); |
c0d9eba0 J |
239 | |
240 | $data = array( | |
c844dc0c J |
241 | 'update_user[name]' => 'new name', |
242 | 'update_user[email]' => 'admin@wallabag.io', | |
c0d9eba0 J |
243 | ); |
244 | ||
245 | $client->submit($form, $data); | |
246 | ||
247 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | |
248 | ||
249 | $crawler = $client->followRedirect(); | |
250 | ||
32da2a70 | 251 | $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); |
c0d9eba0 J |
252 | $this->assertContains('Information updated', $alert[0]); |
253 | } | |
e4977b8a J |
254 | |
255 | public function dataForNewUserFailed() | |
256 | { | |
257 | return array( | |
258 | array( | |
259 | array( | |
260 | 'new_user[username]' => '', | |
fcb1fba5 NL |
261 | 'new_user[plainPassword][first]' => '', |
262 | 'new_user[plainPassword][second]' => '', | |
e4977b8a J |
263 | 'new_user[email]' => '', |
264 | ), | |
3f7a6290 | 265 | 'Please enter a username', |
e4977b8a J |
266 | ), |
267 | array( | |
268 | array( | |
3f7a6290 | 269 | 'new_user[username]' => 'a', |
fcb1fba5 NL |
270 | 'new_user[plainPassword][first]' => 'mypassword', |
271 | 'new_user[plainPassword][second]' => 'mypassword', | |
e4977b8a J |
272 | 'new_user[email]' => '', |
273 | ), | |
3f7a6290 | 274 | 'The username is too short', |
e4977b8a J |
275 | ), |
276 | array( | |
277 | array( | |
278 | 'new_user[username]' => 'wallace', | |
fcb1fba5 NL |
279 | 'new_user[plainPassword][first]' => 'mypassword', |
280 | 'new_user[plainPassword][second]' => 'mypassword', | |
e4977b8a J |
281 | 'new_user[email]' => 'test', |
282 | ), | |
3f7a6290 | 283 | 'The email is not valid', |
e4977b8a | 284 | ), |
c844dc0c J |
285 | array( |
286 | array( | |
287 | 'new_user[username]' => 'admin', | |
fcb1fba5 NL |
288 | 'new_user[plainPassword][first]' => 'wallacewallace', |
289 | 'new_user[plainPassword][second]' => 'wallacewallace', | |
c844dc0c J |
290 | 'new_user[email]' => 'wallace@wallace.me', |
291 | ), | |
3f7a6290 | 292 | 'The username is already used', |
c844dc0c | 293 | ), |
fcb1fba5 NL |
294 | array( |
295 | array( | |
296 | 'new_user[username]' => 'wallace', | |
297 | 'new_user[plainPassword][first]' => 'mypassword1', | |
298 | 'new_user[plainPassword][second]' => 'mypassword2', | |
299 | 'new_user[email]' => 'wallace@wallace.me', | |
300 | ), | |
301 | 'This value is not valid', | |
302 | ), | |
e4977b8a J |
303 | ); |
304 | } | |
305 | ||
306 | /** | |
307 | * @dataProvider dataForNewUserFailed | |
308 | */ | |
309 | public function testNewUserFailed($data, $expectedMessage) | |
310 | { | |
311 | $this->logInAs('admin'); | |
312 | $client = $this->getClient(); | |
313 | ||
314 | $crawler = $client->request('GET', '/config'); | |
315 | ||
316 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | |
317 | ||
318 | $form = $crawler->filter('button[id=new_user_save]')->form(); | |
319 | ||
320 | $crawler = $client->submit($form, $data); | |
321 | ||
322 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | |
323 | ||
324 | $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(array('_text'))); | |
325 | $this->assertContains($expectedMessage, $alert[0]); | |
326 | } | |
327 | ||
328 | public function testNewUserCreated() | |
329 | { | |
330 | $this->logInAs('admin'); | |
331 | $client = $this->getClient(); | |
332 | ||
333 | $crawler = $client->request('GET', '/config'); | |
334 | ||
335 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | |
336 | ||
337 | $form = $crawler->filter('button[id=new_user_save]')->form(); | |
338 | ||
339 | $data = array( | |
340 | 'new_user[username]' => 'wallace', | |
fcb1fba5 NL |
341 | 'new_user[plainPassword][first]' => 'wallace1', |
342 | 'new_user[plainPassword][second]' => 'wallace1', | |
e4977b8a J |
343 | 'new_user[email]' => 'wallace@wallace.me', |
344 | ); | |
345 | ||
346 | $client->submit($form, $data); | |
347 | ||
348 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | |
349 | ||
350 | $crawler = $client->followRedirect(); | |
351 | ||
32da2a70 | 352 | $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); |
e4977b8a | 353 | $this->assertContains('User "wallace" added', $alert[0]); |
0f30f48b JB |
354 | |
355 | $em = $client->getContainer()->get('doctrine.orm.entity_manager'); | |
356 | $user = $em | |
1210dae1 | 357 | ->getRepository('WallabagUserBundle:User') |
0f30f48b JB |
358 | ->findOneByUsername('wallace'); |
359 | ||
360 | $this->assertTrue(false !== $user); | |
361 | $this->assertTrue($user->isEnabled()); | |
e4977b8a | 362 | } |
371ac69a J |
363 | |
364 | public function testRssUpdateResetToken() | |
365 | { | |
366 | $this->logInAs('admin'); | |
367 | $client = $this->getClient(); | |
368 | ||
369 | // reset the token | |
370 | $em = $client->getContainer()->get('doctrine.orm.entity_manager'); | |
371 | $user = $em | |
1210dae1 | 372 | ->getRepository('WallabagUserBundle:User') |
371ac69a J |
373 | ->findOneByUsername('admin'); |
374 | ||
375 | if (!$user) { | |
376 | $this->markTestSkipped('No user found in db.'); | |
377 | } | |
378 | ||
379 | $config = $user->getConfig(); | |
380 | $config->setRssToken(null); | |
381 | $em->persist($config); | |
382 | $em->flush(); | |
383 | ||
384 | $crawler = $client->request('GET', '/config'); | |
385 | ||
386 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | |
387 | ||
388 | $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text'))); | |
389 | $this->assertContains('You need to generate a token first.', $body[0]); | |
390 | ||
391 | $client->request('GET', '/generate-token'); | |
392 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | |
393 | ||
394 | $crawler = $client->followRedirect(); | |
395 | ||
396 | $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text'))); | |
397 | $this->assertNotContains('You need to generate a token first.', $body[0]); | |
398 | } | |
399 | ||
400 | public function testGenerateTokenAjax() | |
401 | { | |
402 | $this->logInAs('admin'); | |
403 | $client = $this->getClient(); | |
404 | ||
405 | $client->request( | |
406 | 'GET', | |
407 | '/generate-token', | |
408 | array(), | |
409 | array(), | |
410 | array('HTTP_X-Requested-With' => 'XMLHttpRequest') | |
411 | ); | |
412 | ||
413 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | |
9744e971 | 414 | $content = json_decode($client->getResponse()->getContent(), true); |
371ac69a J |
415 | $this->assertArrayHasKey('token', $content); |
416 | } | |
417 | ||
418 | public function testRssUpdate() | |
419 | { | |
420 | $this->logInAs('admin'); | |
421 | $client = $this->getClient(); | |
422 | ||
423 | $crawler = $client->request('GET', '/config'); | |
424 | ||
425 | if (500 == $client->getResponse()->getStatusCode()) { | |
426 | var_export($client->getResponse()->getContent()); | |
427 | die(); | |
428 | } | |
429 | ||
430 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | |
431 | ||
432 | $form = $crawler->filter('button[id=rss_config_save]')->form(); | |
433 | ||
434 | $data = array( | |
435 | 'rss_config[rss_limit]' => 12, | |
436 | ); | |
437 | ||
438 | $client->submit($form, $data); | |
439 | ||
440 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | |
441 | ||
442 | $crawler = $client->followRedirect(); | |
443 | ||
444 | $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); | |
445 | $this->assertContains('RSS information updated', $alert[0]); | |
446 | } | |
447 | ||
448 | public function dataForRssFailed() | |
449 | { | |
450 | return array( | |
451 | array( | |
452 | array( | |
453 | 'rss_config[rss_limit]' => 0, | |
454 | ), | |
455 | 'This value should be 1 or more.', | |
456 | ), | |
457 | array( | |
458 | array( | |
459 | 'rss_config[rss_limit]' => 1000000000000, | |
460 | ), | |
461 | 'This will certainly kill the app', | |
462 | ), | |
463 | ); | |
464 | } | |
465 | ||
466 | /** | |
467 | * @dataProvider dataForRssFailed | |
468 | */ | |
469 | public function testRssFailed($data, $expectedMessage) | |
470 | { | |
471 | $this->logInAs('admin'); | |
472 | $client = $this->getClient(); | |
473 | ||
474 | $crawler = $client->request('GET', '/config'); | |
475 | ||
476 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | |
477 | ||
478 | $form = $crawler->filter('button[id=rss_config_save]')->form(); | |
479 | ||
480 | $crawler = $client->submit($form, $data); | |
481 | ||
482 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | |
483 | ||
484 | $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(array('_text'))); | |
485 | $this->assertContains($expectedMessage, $alert[0]); | |
486 | } | |
4d85d7e9 | 487 | } |