]> git.immae.eu Git - github/wallabag/wallabag.git/blame - src/Wallabag/CoreBundle/Tests/Controller/ConfigControllerTest.php
Add test for creation of new user in config page
[github/wallabag/wallabag.git] / src / Wallabag / CoreBundle / Tests / Controller / ConfigControllerTest.php
CommitLineData
4d85d7e9
J
1<?php
2
3namespace Wallabag\CoreBundle\Tests\Controller;
4
769e19dc 5use Wallabag\CoreBundle\Tests\WallabagCoreTestCase;
4d85d7e9 6
769e19dc 7class 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 45
4094ea47 46 $data = [
23ff8d36 47 'config[theme]' => 'baggy',
4d85d7e9 48 'config[items_per_page]' => '30',
1b64a84b 49 'config[reading_speed]' => '0.5',
c89d35e8 50 'config[language]' => 'en',
4094ea47 51 ];
4d85d7e9
J
52
53 $client->submit($form, $data);
54
55 $this->assertEquals(302, $client->getResponse()->getStatusCode());
56
57 $crawler = $client->followRedirect();
58
4094ea47 59 $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(['_text']));
4204a06b 60 $this->assertContains('flashes.config.notice.config_saved', $alert[0]);
4d85d7e9
J
61 }
62
63 public function dataForUpdateFailed()
64 {
4094ea47
JB
65 return [
66 [[
23ff8d36 67 'config[theme]' => 'baggy',
4d85d7e9 68 'config[items_per_page]' => '',
c89d35e8 69 'config[language]' => 'en',
4094ea47
JB
70 ]],
71 ];
4d85d7e9
J
72 }
73
74 /**
75 * @dataProvider dataForUpdateFailed
76 */
77 public function testUpdateFailed($data)
78 {
79 $this->logInAs('admin');
80 $client = $this->getClient();
81
82 $crawler = $client->request('GET', '/config');
83
84 $this->assertEquals(200, $client->getResponse()->getStatusCode());
85
d9085c63 86 $form = $crawler->filter('button[id=config_save]')->form();
4d85d7e9
J
87
88 $crawler = $client->submit($form, $data);
89
90 $this->assertEquals(200, $client->getResponse()->getStatusCode());
91
4094ea47 92 $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(['_text']));
4d85d7e9
J
93 $this->assertContains('This value should not be blank', $alert[0]);
94 }
d9085c63
J
95
96 public function dataForChangePasswordFailed()
97 {
4094ea47
JB
98 return [
99 [
100 [
4ab58dcf 101 'change_passwd[old_password]' => 'material',
d9085c63
J
102 'change_passwd[new_password][first]' => '',
103 'change_passwd[new_password][second]' => '',
4094ea47 104 ],
0d42217e 105 'validator.password_wrong_value',
4094ea47
JB
106 ],
107 [
108 [
d9085c63
J
109 'change_passwd[old_password]' => 'mypassword',
110 'change_passwd[new_password][first]' => '',
111 'change_passwd[new_password][second]' => '',
4094ea47 112 ],
c0d9eba0 113 'This value should not be blank',
4094ea47
JB
114 ],
115 [
116 [
d9085c63
J
117 'change_passwd[old_password]' => 'mypassword',
118 'change_passwd[new_password][first]' => 'hop',
119 'change_passwd[new_password][second]' => '',
4094ea47 120 ],
0d42217e 121 'validator.password_must_match',
4094ea47
JB
122 ],
123 [
124 [
d9085c63
J
125 'change_passwd[old_password]' => 'mypassword',
126 'change_passwd[new_password][first]' => 'hop',
127 'change_passwd[new_password][second]' => 'hop',
4094ea47 128 ],
0d42217e 129 'validator.password_too_short',
4094ea47
JB
130 ],
131 ];
d9085c63
J
132 }
133
134 /**
135 * @dataProvider dataForChangePasswordFailed
136 */
137 public function testChangePasswordFailed($data, $expectedMessage)
138 {
139 $this->logInAs('admin');
140 $client = $this->getClient();
141
142 $crawler = $client->request('GET', '/config');
143
144 $this->assertEquals(200, $client->getResponse()->getStatusCode());
145
146 $form = $crawler->filter('button[id=change_passwd_save]')->form();
147
148 $crawler = $client->submit($form, $data);
149
150 $this->assertEquals(200, $client->getResponse()->getStatusCode());
151
4094ea47 152 $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(['_text']));
d9085c63
J
153 $this->assertContains($expectedMessage, $alert[0]);
154 }
155
156 public function testChangePassword()
157 {
158 $this->logInAs('admin');
159 $client = $this->getClient();
160
161 $crawler = $client->request('GET', '/config');
162
163 $this->assertEquals(200, $client->getResponse()->getStatusCode());
164
165 $form = $crawler->filter('button[id=change_passwd_save]')->form();
166
4094ea47 167 $data = [
d9085c63
J
168 'change_passwd[old_password]' => 'mypassword',
169 'change_passwd[new_password][first]' => 'mypassword',
170 'change_passwd[new_password][second]' => 'mypassword',
4094ea47 171 ];
d9085c63
J
172
173 $client->submit($form, $data);
174
175 $this->assertEquals(302, $client->getResponse()->getStatusCode());
176
177 $crawler = $client->followRedirect();
178
4094ea47 179 $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(['_text']));
4204a06b 180 $this->assertContains('flashes.config.notice.password_updated', $alert[0]);
d9085c63 181 }
c0d9eba0
J
182
183 public function dataForUserFailed()
184 {
4094ea47
JB
185 return [
186 [
187 [
c844dc0c
J
188 'update_user[name]' => '',
189 'update_user[email]' => '',
4094ea47 190 ],
0d42217e 191 'fos_user.email.blank',
4094ea47
JB
192 ],
193 [
194 [
c844dc0c
J
195 'update_user[name]' => '',
196 'update_user[email]' => 'test',
4094ea47 197 ],
0d42217e 198 'fos_user.email.invalid',
4094ea47
JB
199 ],
200 ];
c0d9eba0
J
201 }
202
203 /**
204 * @dataProvider dataForUserFailed
205 */
206 public function testUserFailed($data, $expectedMessage)
207 {
208 $this->logInAs('admin');
209 $client = $this->getClient();
210
211 $crawler = $client->request('GET', '/config');
212
213 $this->assertEquals(200, $client->getResponse()->getStatusCode());
214
c844dc0c 215 $form = $crawler->filter('button[id=update_user_save]')->form();
c0d9eba0
J
216
217 $crawler = $client->submit($form, $data);
218
219 $this->assertEquals(200, $client->getResponse()->getStatusCode());
220
4094ea47 221 $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(['_text']));
c0d9eba0
J
222 $this->assertContains($expectedMessage, $alert[0]);
223 }
224
225 public function testUserUpdate()
226 {
227 $this->logInAs('admin');
228 $client = $this->getClient();
229
230 $crawler = $client->request('GET', '/config');
231
232 $this->assertEquals(200, $client->getResponse()->getStatusCode());
233
c844dc0c 234 $form = $crawler->filter('button[id=update_user_save]')->form();
c0d9eba0 235
4094ea47 236 $data = [
c844dc0c
J
237 'update_user[name]' => 'new name',
238 'update_user[email]' => 'admin@wallabag.io',
4094ea47 239 ];
c0d9eba0
J
240
241 $client->submit($form, $data);
242
243 $this->assertEquals(302, $client->getResponse()->getStatusCode());
244
245 $crawler = $client->followRedirect();
246
4094ea47 247 $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(['_text']));
4204a06b 248 $this->assertContains('flashes.config.notice.user_updated', $alert[0]);
c0d9eba0 249 }
e4977b8a
J
250
251 public function dataForNewUserFailed()
252 {
4094ea47
JB
253 return [
254 [
255 [
e4977b8a 256 'new_user[username]' => '',
fcb1fba5
NL
257 'new_user[plainPassword][first]' => '',
258 'new_user[plainPassword][second]' => '',
e4977b8a 259 'new_user[email]' => '',
4094ea47 260 ],
0d42217e 261 'fos_user.username.blank',
4094ea47
JB
262 ],
263 [
264 [
3f7a6290 265 'new_user[username]' => 'a',
fcb1fba5
NL
266 'new_user[plainPassword][first]' => 'mypassword',
267 'new_user[plainPassword][second]' => 'mypassword',
e4977b8a 268 'new_user[email]' => '',
4094ea47 269 ],
0d42217e 270 'fos_user.username.short',
4094ea47
JB
271 ],
272 [
273 [
e4977b8a 274 'new_user[username]' => 'wallace',
fcb1fba5
NL
275 'new_user[plainPassword][first]' => 'mypassword',
276 'new_user[plainPassword][second]' => 'mypassword',
e4977b8a 277 'new_user[email]' => 'test',
4094ea47 278 ],
0d42217e 279 'fos_user.email.invalid',
4094ea47
JB
280 ],
281 [
282 [
c844dc0c 283 'new_user[username]' => 'admin',
fcb1fba5
NL
284 'new_user[plainPassword][first]' => 'wallacewallace',
285 'new_user[plainPassword][second]' => 'wallacewallace',
c844dc0c 286 'new_user[email]' => 'wallace@wallace.me',
4094ea47 287 ],
0d42217e 288 'fos_user.username.already_used',
4094ea47
JB
289 ],
290 [
291 [
fcb1fba5
NL
292 'new_user[username]' => 'wallace',
293 'new_user[plainPassword][first]' => 'mypassword1',
294 'new_user[plainPassword][second]' => 'mypassword2',
295 'new_user[email]' => 'wallace@wallace.me',
4094ea47 296 ],
0d42217e 297 'validator.password_must_match',
4094ea47
JB
298 ],
299 ];
e4977b8a
J
300 }
301
302 /**
303 * @dataProvider dataForNewUserFailed
304 */
305 public function testNewUserFailed($data, $expectedMessage)
306 {
307 $this->logInAs('admin');
308 $client = $this->getClient();
309
310 $crawler = $client->request('GET', '/config');
311
312 $this->assertEquals(200, $client->getResponse()->getStatusCode());
313
314 $form = $crawler->filter('button[id=new_user_save]')->form();
315
316 $crawler = $client->submit($form, $data);
317
318 $this->assertEquals(200, $client->getResponse()->getStatusCode());
319
4094ea47 320 $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(['_text']));
e4977b8a
J
321 $this->assertContains($expectedMessage, $alert[0]);
322 }
323
324 public function testNewUserCreated()
325 {
326 $this->logInAs('admin');
327 $client = $this->getClient();
328
329 $crawler = $client->request('GET', '/config');
330
331 $this->assertEquals(200, $client->getResponse()->getStatusCode());
332
333 $form = $crawler->filter('button[id=new_user_save]')->form();
334
4094ea47 335 $data = [
e4977b8a 336 'new_user[username]' => 'wallace',
fcb1fba5
NL
337 'new_user[plainPassword][first]' => 'wallace1',
338 'new_user[plainPassword][second]' => 'wallace1',
e4977b8a 339 'new_user[email]' => 'wallace@wallace.me',
4094ea47 340 ];
e4977b8a
J
341
342 $client->submit($form, $data);
343
344 $this->assertEquals(302, $client->getResponse()->getStatusCode());
345
346 $crawler = $client->followRedirect();
347
4094ea47 348 $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(['_text']));
4204a06b 349 $this->assertContains('flashes.config.notice.user_added', $alert[0]);
0f30f48b
JB
350
351 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
352 $user = $em
1210dae1 353 ->getRepository('WallabagUserBundle:User')
0f30f48b
JB
354 ->findOneByUsername('wallace');
355
356 $this->assertTrue(false !== $user);
357 $this->assertTrue($user->isEnabled());
83890741
NL
358 $this->assertEquals('material', $user->getConfig()->getTheme());
359 $this->assertEquals(12, $user->getConfig()->getItemsPerPage());
360 $this->assertEquals(50, $user->getConfig()->getRssLimit());
361 $this->assertEquals('en', $user->getConfig()->getLanguage());
362 $this->assertEquals(1, $user->getConfig()->getReadingSpeed());
e4977b8a 363 }
371ac69a
J
364
365 public function testRssUpdateResetToken()
366 {
367 $this->logInAs('admin');
368 $client = $this->getClient();
369
370 // reset the token
371 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
372 $user = $em
1210dae1 373 ->getRepository('WallabagUserBundle:User')
371ac69a
J
374 ->findOneByUsername('admin');
375
376 if (!$user) {
377 $this->markTestSkipped('No user found in db.');
378 }
379
380 $config = $user->getConfig();
381 $config->setRssToken(null);
382 $em->persist($config);
383 $em->flush();
384
385 $crawler = $client->request('GET', '/config');
386
387 $this->assertEquals(200, $client->getResponse()->getStatusCode());
388
4094ea47 389 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
0d42217e 390 $this->assertContains('config.form_rss.no_token', $body[0]);
371ac69a
J
391
392 $client->request('GET', '/generate-token');
393 $this->assertEquals(302, $client->getResponse()->getStatusCode());
394
395 $crawler = $client->followRedirect();
396
4094ea47 397 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
0d42217e 398 $this->assertNotContains('config.form_rss.no_token', $body[0]);
371ac69a
J
399 }
400
401 public function testGenerateTokenAjax()
402 {
403 $this->logInAs('admin');
404 $client = $this->getClient();
405
406 $client->request(
407 'GET',
408 '/generate-token',
4094ea47
JB
409 [],
410 [],
411 ['HTTP_X-Requested-With' => 'XMLHttpRequest']
371ac69a
J
412 );
413
414 $this->assertEquals(200, $client->getResponse()->getStatusCode());
9744e971 415 $content = json_decode($client->getResponse()->getContent(), true);
371ac69a
J
416 $this->assertArrayHasKey('token', $content);
417 }
418
419 public function testRssUpdate()
420 {
421 $this->logInAs('admin');
422 $client = $this->getClient();
423
424 $crawler = $client->request('GET', '/config');
425
371ac69a
J
426 $this->assertEquals(200, $client->getResponse()->getStatusCode());
427
428 $form = $crawler->filter('button[id=rss_config_save]')->form();
429
4094ea47 430 $data = [
371ac69a 431 'rss_config[rss_limit]' => 12,
4094ea47 432 ];
371ac69a
J
433
434 $client->submit($form, $data);
435
436 $this->assertEquals(302, $client->getResponse()->getStatusCode());
437
438 $crawler = $client->followRedirect();
439
4094ea47 440 $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(['_text']));
4204a06b 441 $this->assertContains('flashes.config.notice.rss_updated', $alert[0]);
371ac69a
J
442 }
443
444 public function dataForRssFailed()
445 {
4094ea47
JB
446 return [
447 [
448 [
371ac69a 449 'rss_config[rss_limit]' => 0,
4094ea47 450 ],
371ac69a 451 'This value should be 1 or more.',
4094ea47
JB
452 ],
453 [
454 [
371ac69a 455 'rss_config[rss_limit]' => 1000000000000,
4094ea47 456 ],
0d42217e 457 'validator.rss_limit_too_hight',
4094ea47
JB
458 ],
459 ];
371ac69a
J
460 }
461
462 /**
463 * @dataProvider dataForRssFailed
464 */
465 public function testRssFailed($data, $expectedMessage)
466 {
467 $this->logInAs('admin');
468 $client = $this->getClient();
469
470 $crawler = $client->request('GET', '/config');
471
472 $this->assertEquals(200, $client->getResponse()->getStatusCode());
473
474 $form = $crawler->filter('button[id=rss_config_save]')->form();
475
476 $crawler = $client->submit($form, $data);
477
478 $this->assertEquals(200, $client->getResponse()->getStatusCode());
479
4094ea47 480 $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(['_text']));
371ac69a
J
481 $this->assertContains($expectedMessage, $alert[0]);
482 }
8a99c7a8
KG
483
484 public function testTaggingRuleCreation()
485 {
486 $this->logInAs('admin');
487 $client = $this->getClient();
488
489 $crawler = $client->request('GET', '/config');
490
491 $this->assertTrue($client->getResponse()->isSuccessful());
492
493 $form = $crawler->filter('button[id=tagging_rule_save]')->form();
494
4094ea47 495 $data = [
8a99c7a8
KG
496 'tagging_rule[rule]' => 'readingTime <= 3',
497 'tagging_rule[tags]' => 'short reading',
4094ea47 498 ];
8a99c7a8
KG
499
500 $client->submit($form, $data);
501
502 $this->assertEquals(302, $client->getResponse()->getStatusCode());
503
504 $crawler = $client->followRedirect();
505
4094ea47 506 $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(['_text']));
4204a06b 507 $this->assertContains('flashes.config.notice.tagging_rules_updated', $alert[0]);
8a99c7a8 508
958671a7 509 $deleteLink = $crawler->filter('.delete')->last()->link();
8a99c7a8
KG
510
511 $crawler = $client->click($deleteLink);
512 $this->assertEquals(302, $client->getResponse()->getStatusCode());
513
514 $crawler = $client->followRedirect();
4094ea47 515 $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(['_text']));
4204a06b 516 $this->assertContains('flashes.config.notice.tagging_rules_deleted', $alert[0]);
8a99c7a8
KG
517 }
518
519 public function dataForTaggingRuleFailed()
520 {
4094ea47
JB
521 return [
522 [
523 [
a3cac44c
JB
524 'tagging_rule[rule]' => 'unknownVar <= 3',
525 'tagging_rule[tags]' => 'cool tag',
4094ea47
JB
526 ],
527 [
a3cac44c
JB
528 'The variable',
529 'does not exist.',
4094ea47
JB
530 ],
531 ],
532 [
533 [
a3cac44c
JB
534 'tagging_rule[rule]' => 'length(domainName) <= 42',
535 'tagging_rule[tags]' => 'cool tag',
4094ea47
JB
536 ],
537 [
a3cac44c
JB
538 'The operator',
539 'does not exist.',
4094ea47
JB
540 ],
541 ],
542 ];
8a99c7a8 543 }
a3cac44c
JB
544
545 /**
546 * @dataProvider dataForTaggingRuleFailed
547 */
548 public function testTaggingRuleCreationFail($data, $messages)
549 {
550 $this->logInAs('admin');
551 $client = $this->getClient();
552
553 $crawler = $client->request('GET', '/config');
554
555 $this->assertTrue($client->getResponse()->isSuccessful());
556
557 $form = $crawler->filter('button[id=tagging_rule_save]')->form();
558
4f9cf232 559 $crawler = $client->submit($form, $data);
a3cac44c
JB
560
561 $this->assertEquals(200, $client->getResponse()->getStatusCode());
562
4094ea47 563 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
4f9cf232 564
a3cac44c 565 foreach ($messages as $message) {
4f9cf232 566 $this->assertContains($message, $body[0]);
a3cac44c
JB
567 }
568 }
569
570 public function testDeletingTaggingRuleFromAnOtherUser()
571 {
572 $this->logInAs('bob');
573 $client = $this->getClient();
574
575 $rule = $client->getContainer()->get('doctrine.orm.entity_manager')
576 ->getRepository('WallabagCoreBundle:TaggingRule')
577 ->findAll()[0];
578
4f9cf232
JB
579 $crawler = $client->request('GET', '/tagging-rule/delete/'.$rule->getId());
580
a3cac44c 581 $this->assertEquals(403, $client->getResponse()->getStatusCode());
4094ea47 582 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
4f9cf232 583 $this->assertContains('You can not access this tagging rule', $body[0]);
a3cac44c 584 }
b6c00b0b
JB
585
586 public function testDemoMode()
587 {
588 $this->logInAs('admin');
589 $client = $this->getClient();
590
591 $config = $client->getContainer()->get('craue_config');
592 $config->set('demo_mode_enabled', 1);
593 $config->set('demo_mode_username', 'admin');
594
595 $crawler = $client->request('GET', '/config');
596
597 $this->assertEquals(200, $client->getResponse()->getStatusCode());
598
599 $form = $crawler->filter('button[id=change_passwd_save]')->form();
600
4094ea47 601 $data = [
b6c00b0b
JB
602 'change_passwd[old_password]' => 'mypassword',
603 'change_passwd[new_password][first]' => 'mypassword',
604 'change_passwd[new_password][second]' => 'mypassword',
4094ea47 605 ];
b6c00b0b
JB
606
607 $client->submit($form, $data);
608
609 $this->assertEquals(302, $client->getResponse()->getStatusCode());
4204a06b 610 $this->assertContains('flashes.config.notice.password_not_updated_demo', $client->getContainer()->get('session')->getFlashBag()->get('notice')[0]);
b6c00b0b
JB
611
612 $config->set('demo_mode_enabled', 0);
613 $config->set('demo_mode_username', 'wallabag');
614 }
4d85d7e9 615}