]> git.immae.eu Git - github/wallabag/wallabag.git/blob - tests/Wallabag/CoreBundle/Controller/ConfigControllerTest.php
Merge remote-tracking branch 'origin/master' into 2.2
[github/wallabag/wallabag.git] / tests / Wallabag / CoreBundle / Controller / ConfigControllerTest.php
1 <?php
2
3 namespace Tests\Wallabag\CoreBundle\Controller;
4
5 use Tests\Wallabag\CoreBundle\WallabagCoreTestCase;
6 use Wallabag\CoreBundle\Entity\Config;
7 use Wallabag\UserBundle\Entity\User;
8 use Wallabag\CoreBundle\Entity\Entry;
9 use Wallabag\CoreBundle\Entity\Tag;
10 use Wallabag\AnnotationBundle\Entity\Annotation;
11
12 class ConfigControllerTest extends WallabagCoreTestCase
13 {
14 public function testLogin()
15 {
16 $client = $this->getClient();
17
18 $client->request('GET', '/new');
19
20 $this->assertEquals(302, $client->getResponse()->getStatusCode());
21 $this->assertContains('login', $client->getResponse()->headers->get('location'));
22 }
23
24 public function testIndex()
25 {
26 $this->logInAs('admin');
27 $client = $this->getClient();
28
29 $crawler = $client->request('GET', '/config');
30
31 $this->assertEquals(200, $client->getResponse()->getStatusCode());
32
33 $this->assertCount(1, $crawler->filter('button[id=config_save]'));
34 $this->assertCount(1, $crawler->filter('button[id=change_passwd_save]'));
35 $this->assertCount(1, $crawler->filter('button[id=update_user_save]'));
36 $this->assertCount(1, $crawler->filter('button[id=rss_config_save]'));
37 }
38
39 public function testUpdate()
40 {
41 $this->logInAs('admin');
42 $client = $this->getClient();
43
44 $crawler = $client->request('GET', '/config');
45
46 $this->assertEquals(200, $client->getResponse()->getStatusCode());
47
48 $form = $crawler->filter('button[id=config_save]')->form();
49
50 $data = [
51 'config[theme]' => 'baggy',
52 'config[items_per_page]' => '30',
53 'config[reading_speed]' => '0.5',
54 'config[language]' => 'en',
55 ];
56
57 $client->submit($form, $data);
58
59 $this->assertEquals(302, $client->getResponse()->getStatusCode());
60
61 $crawler = $client->followRedirect();
62
63 $this->assertContains('flashes.config.notice.config_saved', $crawler->filter('body')->extract(['_text'])[0]);
64 }
65
66 public function testChangeReadingSpeed()
67 {
68 $this->logInAs('admin');
69 $client = $this->getClient();
70
71 $crawler = $client->request('GET', '/unread/list');
72 $form = $crawler->filter('button[id=submit-filter]')->form();
73 $dataFilters = [
74 'entry_filter[readingTime][right_number]' => 22,
75 'entry_filter[readingTime][left_number]' => 22,
76 ];
77 $crawler = $client->submit($form, $dataFilters);
78 $this->assertCount(1, $crawler->filter('div[class=entry]'));
79
80 // Change reading speed
81 $crawler = $client->request('GET', '/config');
82 $form = $crawler->filter('button[id=config_save]')->form();
83 $data = [
84 'config[reading_speed]' => '2',
85 ];
86 $client->submit($form, $data);
87
88 // Is the entry still available via filters?
89 $crawler = $client->request('GET', '/unread/list');
90 $form = $crawler->filter('button[id=submit-filter]')->form();
91 $crawler = $client->submit($form, $dataFilters);
92 $this->assertCount(0, $crawler->filter('div[class=entry]'));
93
94 // Restore old configuration
95 $crawler = $client->request('GET', '/config');
96 $form = $crawler->filter('button[id=config_save]')->form();
97 $data = [
98 'config[reading_speed]' => '0.5',
99 ];
100 $client->submit($form, $data);
101 }
102
103 public function dataForUpdateFailed()
104 {
105 return [
106 [[
107 'config[theme]' => 'baggy',
108 'config[items_per_page]' => '',
109 'config[language]' => 'en',
110 ]],
111 ];
112 }
113
114 /**
115 * @dataProvider dataForUpdateFailed
116 */
117 public function testUpdateFailed($data)
118 {
119 $this->logInAs('admin');
120 $client = $this->getClient();
121
122 $crawler = $client->request('GET', '/config');
123
124 $this->assertEquals(200, $client->getResponse()->getStatusCode());
125
126 $form = $crawler->filter('button[id=config_save]')->form();
127
128 $crawler = $client->submit($form, $data);
129
130 $this->assertEquals(200, $client->getResponse()->getStatusCode());
131
132 $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(['_text']));
133 $this->assertContains('This value should not be blank', $alert[0]);
134 }
135
136 public function dataForChangePasswordFailed()
137 {
138 return [
139 [
140 [
141 'change_passwd[old_password]' => 'material',
142 'change_passwd[new_password][first]' => '',
143 'change_passwd[new_password][second]' => '',
144 ],
145 'validator.password_wrong_value',
146 ],
147 [
148 [
149 'change_passwd[old_password]' => 'mypassword',
150 'change_passwd[new_password][first]' => '',
151 'change_passwd[new_password][second]' => '',
152 ],
153 'This value should not be blank',
154 ],
155 [
156 [
157 'change_passwd[old_password]' => 'mypassword',
158 'change_passwd[new_password][first]' => 'hop',
159 'change_passwd[new_password][second]' => '',
160 ],
161 'validator.password_must_match',
162 ],
163 [
164 [
165 'change_passwd[old_password]' => 'mypassword',
166 'change_passwd[new_password][first]' => 'hop',
167 'change_passwd[new_password][second]' => 'hop',
168 ],
169 'validator.password_too_short',
170 ],
171 ];
172 }
173
174 /**
175 * @dataProvider dataForChangePasswordFailed
176 */
177 public function testChangePasswordFailed($data, $expectedMessage)
178 {
179 $this->logInAs('admin');
180 $client = $this->getClient();
181
182 $crawler = $client->request('GET', '/config');
183
184 $this->assertEquals(200, $client->getResponse()->getStatusCode());
185
186 $form = $crawler->filter('button[id=change_passwd_save]')->form();
187
188 $crawler = $client->submit($form, $data);
189
190 $this->assertEquals(200, $client->getResponse()->getStatusCode());
191
192 $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(['_text']));
193 $this->assertContains($expectedMessage, $alert[0]);
194 }
195
196 public function testChangePassword()
197 {
198 $this->logInAs('admin');
199 $client = $this->getClient();
200
201 $crawler = $client->request('GET', '/config');
202
203 $this->assertEquals(200, $client->getResponse()->getStatusCode());
204
205 $form = $crawler->filter('button[id=change_passwd_save]')->form();
206
207 $data = [
208 'change_passwd[old_password]' => 'mypassword',
209 'change_passwd[new_password][first]' => 'mypassword',
210 'change_passwd[new_password][second]' => 'mypassword',
211 ];
212
213 $client->submit($form, $data);
214
215 $this->assertEquals(302, $client->getResponse()->getStatusCode());
216
217 $crawler = $client->followRedirect();
218
219 $this->assertContains('flashes.config.notice.password_updated', $crawler->filter('body')->extract(['_text'])[0]);
220 }
221
222 public function dataForUserFailed()
223 {
224 return [
225 [
226 [
227 'update_user[name]' => '',
228 'update_user[email]' => '',
229 ],
230 'fos_user.email.blank',
231 ],
232 [
233 [
234 'update_user[name]' => '',
235 'update_user[email]' => 'test',
236 ],
237 'fos_user.email.invalid',
238 ],
239 ];
240 }
241
242 /**
243 * @dataProvider dataForUserFailed
244 */
245 public function testUserFailed($data, $expectedMessage)
246 {
247 $this->logInAs('admin');
248 $client = $this->getClient();
249
250 $crawler = $client->request('GET', '/config');
251
252 $this->assertEquals(200, $client->getResponse()->getStatusCode());
253
254 $form = $crawler->filter('button[id=update_user_save]')->form();
255
256 $crawler = $client->submit($form, $data);
257
258 $this->assertEquals(200, $client->getResponse()->getStatusCode());
259
260 $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(['_text']));
261 $this->assertContains($expectedMessage, $alert[0]);
262 }
263
264 public function testUserUpdate()
265 {
266 $this->logInAs('admin');
267 $client = $this->getClient();
268
269 $crawler = $client->request('GET', '/config');
270
271 $this->assertEquals(200, $client->getResponse()->getStatusCode());
272
273 $form = $crawler->filter('button[id=update_user_save]')->form();
274
275 $data = [
276 'update_user[name]' => 'new name',
277 'update_user[email]' => 'admin@wallabag.io',
278 ];
279
280 $client->submit($form, $data);
281
282 $this->assertEquals(302, $client->getResponse()->getStatusCode());
283
284 $crawler = $client->followRedirect();
285
286 $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(['_text']));
287 $this->assertContains('flashes.config.notice.user_updated', $alert[0]);
288 }
289
290 public function testRssUpdateResetToken()
291 {
292 $this->logInAs('admin');
293 $client = $this->getClient();
294
295 // reset the token
296 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
297 $user = $em
298 ->getRepository('WallabagUserBundle:User')
299 ->findOneByUsername('admin');
300
301 if (!$user) {
302 $this->markTestSkipped('No user found in db.');
303 }
304
305 $config = $user->getConfig();
306 $config->setRssToken(null);
307 $em->persist($config);
308 $em->flush();
309
310 $crawler = $client->request('GET', '/config');
311
312 $this->assertEquals(200, $client->getResponse()->getStatusCode());
313
314 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
315 $this->assertContains('config.form_rss.no_token', $body[0]);
316
317 $client->request('GET', '/generate-token');
318 $this->assertEquals(302, $client->getResponse()->getStatusCode());
319
320 $crawler = $client->followRedirect();
321
322 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
323 $this->assertNotContains('config.form_rss.no_token', $body[0]);
324 }
325
326 public function testGenerateTokenAjax()
327 {
328 $this->logInAs('admin');
329 $client = $this->getClient();
330
331 $client->request(
332 'GET',
333 '/generate-token',
334 [],
335 [],
336 ['HTTP_X-Requested-With' => 'XMLHttpRequest']
337 );
338
339 $this->assertEquals(200, $client->getResponse()->getStatusCode());
340 $content = json_decode($client->getResponse()->getContent(), true);
341 $this->assertArrayHasKey('token', $content);
342 }
343
344 public function testRssUpdate()
345 {
346 $this->logInAs('admin');
347 $client = $this->getClient();
348
349 $crawler = $client->request('GET', '/config');
350
351 $this->assertEquals(200, $client->getResponse()->getStatusCode());
352
353 $form = $crawler->filter('button[id=rss_config_save]')->form();
354
355 $data = [
356 'rss_config[rss_limit]' => 12,
357 ];
358
359 $client->submit($form, $data);
360
361 $this->assertEquals(302, $client->getResponse()->getStatusCode());
362
363 $crawler = $client->followRedirect();
364
365 $this->assertContains('flashes.config.notice.rss_updated', $crawler->filter('body')->extract(['_text'])[0]);
366 }
367
368 public function dataForRssFailed()
369 {
370 return [
371 [
372 [
373 'rss_config[rss_limit]' => 0,
374 ],
375 'This value should be 1 or more.',
376 ],
377 [
378 [
379 'rss_config[rss_limit]' => 1000000000000,
380 ],
381 'validator.rss_limit_too_hight',
382 ],
383 ];
384 }
385
386 /**
387 * @dataProvider dataForRssFailed
388 */
389 public function testRssFailed($data, $expectedMessage)
390 {
391 $this->logInAs('admin');
392 $client = $this->getClient();
393
394 $crawler = $client->request('GET', '/config');
395
396 $this->assertEquals(200, $client->getResponse()->getStatusCode());
397
398 $form = $crawler->filter('button[id=rss_config_save]')->form();
399
400 $crawler = $client->submit($form, $data);
401
402 $this->assertEquals(200, $client->getResponse()->getStatusCode());
403
404 $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(['_text']));
405 $this->assertContains($expectedMessage, $alert[0]);
406 }
407
408 public function testTaggingRuleCreation()
409 {
410 $this->logInAs('admin');
411 $client = $this->getClient();
412
413 $crawler = $client->request('GET', '/config');
414
415 $this->assertTrue($client->getResponse()->isSuccessful());
416
417 $form = $crawler->filter('button[id=tagging_rule_save]')->form();
418
419 $data = [
420 'tagging_rule[rule]' => 'readingTime <= 3',
421 'tagging_rule[tags]' => 'short reading',
422 ];
423
424 $client->submit($form, $data);
425
426 $this->assertEquals(302, $client->getResponse()->getStatusCode());
427
428 $crawler = $client->followRedirect();
429
430 $this->assertContains('flashes.config.notice.tagging_rules_updated', $crawler->filter('body')->extract(['_text'])[0]);
431
432 $editLink = $crawler->filter('.mode_edit')->last()->link();
433
434 $crawler = $client->click($editLink);
435 $this->assertEquals(302, $client->getResponse()->getStatusCode());
436 $this->assertContains('?tagging-rule=', $client->getResponse()->headers->get('location'));
437
438 $crawler = $client->followRedirect();
439
440 $form = $crawler->filter('button[id=tagging_rule_save]')->form();
441
442 $data = [
443 'tagging_rule[rule]' => 'readingTime <= 30',
444 'tagging_rule[tags]' => 'short reading',
445 ];
446
447 $client->submit($form, $data);
448
449 $this->assertEquals(302, $client->getResponse()->getStatusCode());
450
451 $crawler = $client->followRedirect();
452
453 $this->assertContains('flashes.config.notice.tagging_rules_updated', $crawler->filter('body')->extract(['_text'])[0]);
454
455 $this->assertContains('readingTime <= 30', $crawler->filter('body')->extract(['_text'])[0]);
456
457 $deleteLink = $crawler->filter('.delete')->last()->link();
458
459 $crawler = $client->click($deleteLink);
460 $this->assertEquals(302, $client->getResponse()->getStatusCode());
461
462 $crawler = $client->followRedirect();
463 $this->assertContains('flashes.config.notice.tagging_rules_deleted', $crawler->filter('body')->extract(['_text'])[0]);
464 }
465
466 public function dataForTaggingRuleFailed()
467 {
468 return [
469 [
470 [
471 'tagging_rule[rule]' => 'unknownVar <= 3',
472 'tagging_rule[tags]' => 'cool tag',
473 ],
474 [
475 'The variable',
476 'does not exist.',
477 ],
478 ],
479 [
480 [
481 'tagging_rule[rule]' => 'length(domainName) <= 42',
482 'tagging_rule[tags]' => 'cool tag',
483 ],
484 [
485 'The operator',
486 'does not exist.',
487 ],
488 ],
489 ];
490 }
491
492 /**
493 * @dataProvider dataForTaggingRuleFailed
494 */
495 public function testTaggingRuleCreationFail($data, $messages)
496 {
497 $this->logInAs('admin');
498 $client = $this->getClient();
499
500 $crawler = $client->request('GET', '/config');
501
502 $this->assertTrue($client->getResponse()->isSuccessful());
503
504 $form = $crawler->filter('button[id=tagging_rule_save]')->form();
505
506 $crawler = $client->submit($form, $data);
507
508 $this->assertEquals(200, $client->getResponse()->getStatusCode());
509
510 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
511
512 foreach ($messages as $message) {
513 $this->assertContains($message, $body[0]);
514 }
515 }
516
517 public function testDeletingTaggingRuleFromAnOtherUser()
518 {
519 $this->logInAs('bob');
520 $client = $this->getClient();
521
522 $rule = $client->getContainer()->get('doctrine.orm.entity_manager')
523 ->getRepository('WallabagCoreBundle:TaggingRule')
524 ->findAll()[0];
525
526 $crawler = $client->request('GET', '/tagging-rule/edit/'.$rule->getId());
527
528 $this->assertEquals(403, $client->getResponse()->getStatusCode());
529 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
530 $this->assertContains('You can not access this tagging rule', $body[0]);
531 }
532
533 public function testEditingTaggingRuleFromAnOtherUser()
534 {
535 $this->logInAs('bob');
536 $client = $this->getClient();
537
538 $rule = $client->getContainer()->get('doctrine.orm.entity_manager')
539 ->getRepository('WallabagCoreBundle:TaggingRule')
540 ->findAll()[0];
541
542 $crawler = $client->request('GET', '/tagging-rule/edit/'.$rule->getId());
543
544 $this->assertEquals(403, $client->getResponse()->getStatusCode());
545 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
546 $this->assertContains('You can not access this tagging rule', $body[0]);
547 }
548
549 public function testDemoMode()
550 {
551 $this->logInAs('admin');
552 $client = $this->getClient();
553
554 $config = $client->getContainer()->get('craue_config');
555 $config->set('demo_mode_enabled', 1);
556 $config->set('demo_mode_username', 'admin');
557
558 $crawler = $client->request('GET', '/config');
559
560 $this->assertEquals(200, $client->getResponse()->getStatusCode());
561
562 $form = $crawler->filter('button[id=change_passwd_save]')->form();
563
564 $data = [
565 'change_passwd[old_password]' => 'mypassword',
566 'change_passwd[new_password][first]' => 'mypassword',
567 'change_passwd[new_password][second]' => 'mypassword',
568 ];
569
570 $client->submit($form, $data);
571
572 $this->assertEquals(302, $client->getResponse()->getStatusCode());
573 $this->assertContains('flashes.config.notice.password_not_updated_demo', $client->getContainer()->get('session')->getFlashBag()->get('notice')[0]);
574
575 $config->set('demo_mode_enabled', 0);
576 $config->set('demo_mode_username', 'wallabag');
577 }
578
579 public function testDeleteUserButtonVisibility()
580 {
581 $this->logInAs('admin');
582 $client = $this->getClient();
583
584 $crawler = $client->request('GET', '/config');
585
586 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
587 $this->assertContains('config.form_user.delete.button', $body[0]);
588
589 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
590
591 $user = $em
592 ->getRepository('WallabagUserBundle:User')
593 ->findOneByUsername('empty');
594 $user->setExpired(1);
595 $em->persist($user);
596
597 $user = $em
598 ->getRepository('WallabagUserBundle:User')
599 ->findOneByUsername('bob');
600 $user->setExpired(1);
601 $em->persist($user);
602
603 $em->flush();
604
605 $crawler = $client->request('GET', '/config');
606
607 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
608 $this->assertNotContains('config.form_user.delete.button', $body[0]);
609
610 $client->request('GET', '/account/delete');
611 $this->assertEquals(403, $client->getResponse()->getStatusCode());
612
613 $user = $em
614 ->getRepository('WallabagUserBundle:User')
615 ->findOneByUsername('empty');
616 $user->setExpired(0);
617 $em->persist($user);
618
619 $user = $em
620 ->getRepository('WallabagUserBundle:User')
621 ->findOneByUsername('bob');
622 $user->setExpired(0);
623 $em->persist($user);
624
625 $em->flush();
626 }
627
628 public function testDeleteAccount()
629 {
630 $client = $this->getClient();
631 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
632
633 $user = new User();
634 $user->setName('Wallace');
635 $user->setEmail('wallace@wallabag.org');
636 $user->setUsername('wallace');
637 $user->setPlainPassword('wallace');
638 $user->setEnabled(true);
639 $user->addRole('ROLE_SUPER_ADMIN');
640
641 $em->persist($user);
642
643 $config = new Config($user);
644
645 $config->setTheme('material');
646 $config->setItemsPerPage(30);
647 $config->setReadingSpeed(1);
648 $config->setLanguage('en');
649 $config->setPocketConsumerKey('xxxxx');
650
651 $em->persist($config);
652 $em->flush();
653
654 $this->logInAs('wallace');
655 $loggedInUserId = $this->getLoggedInUserId();
656
657 // create entry to check after user deletion
658 // that this entry is also deleted
659 $crawler = $client->request('GET', '/new');
660
661 $this->assertEquals(200, $client->getResponse()->getStatusCode());
662
663 $form = $crawler->filter('form[name=entry]')->form();
664 $data = [
665 'entry[url]' => $url = 'https://github.com/wallabag/wallabag',
666 ];
667
668 $client->submit($form, $data);
669 $this->assertEquals(302, $client->getResponse()->getStatusCode());
670
671 $crawler = $client->request('GET', '/config');
672
673 $deleteLink = $crawler->filter('.delete-account')->last()->link();
674
675 $client->click($deleteLink);
676 $this->assertEquals(302, $client->getResponse()->getStatusCode());
677
678 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
679 $user = $em
680 ->getRepository('WallabagUserBundle:User')
681 ->createQueryBuilder('u')
682 ->where('u.username = :username')->setParameter('username', 'wallace')
683 ->getQuery()
684 ->getOneOrNullResult()
685 ;
686
687 $this->assertNull($user);
688
689 $entries = $client->getContainer()
690 ->get('doctrine.orm.entity_manager')
691 ->getRepository('WallabagCoreBundle:Entry')
692 ->findByUser($loggedInUserId);
693
694 $this->assertEmpty($entries);
695 }
696
697 public function testReset()
698 {
699 $this->logInAs('empty');
700 $client = $this->getClient();
701
702 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
703
704 $user = static::$kernel->getContainer()->get('security.token_storage')->getToken()->getUser();
705
706 $tag = new Tag();
707 $tag->setLabel('super');
708 $em->persist($tag);
709
710 $entry = new Entry($user);
711 $entry->setUrl('http://www.lemonde.fr/europe/article/2016/10/01/pour-le-psoe-chaque-election-s-est-transformee-en-une-agonie_5006476_3214.html');
712 $entry->setContent('Youhou');
713 $entry->setTitle('Youhou');
714 $entry->addTag($tag);
715 $em->persist($entry);
716
717 $entry2 = new Entry($user);
718 $entry2->setUrl('http://www.lemonde.de/europe/article/2016/10/01/pour-le-psoe-chaque-election-s-est-transformee-en-une-agonie_5006476_3214.html');
719 $entry2->setContent('Youhou');
720 $entry2->setTitle('Youhou');
721 $entry2->addTag($tag);
722 $em->persist($entry2);
723
724 $annotation = new Annotation($user);
725 $annotation->setText('annotated');
726 $annotation->setQuote('annotated');
727 $annotation->setRanges([]);
728 $annotation->setEntry($entry);
729 $em->persist($annotation);
730
731 $em->flush();
732
733 // reset annotations
734 $crawler = $client->request('GET', '/config#set3');
735
736 $this->assertEquals(200, $client->getResponse()->getStatusCode());
737
738 $crawler = $client->click($crawler->selectLink('config.reset.annotations')->link());
739
740 $this->assertEquals(302, $client->getResponse()->getStatusCode());
741 $this->assertContains('flashes.config.notice.annotations_reset', $client->getContainer()->get('session')->getFlashBag()->get('notice')[0]);
742
743 $annotationsReset = $em
744 ->getRepository('WallabagAnnotationBundle:Annotation')
745 ->findAnnotationsByPageId($entry->getId(), $user->getId());
746
747 $this->assertEmpty($annotationsReset, 'Annotations were reset');
748
749 // reset tags
750 $crawler = $client->request('GET', '/config#set3');
751
752 $this->assertEquals(200, $client->getResponse()->getStatusCode());
753
754 $crawler = $client->click($crawler->selectLink('config.reset.tags')->link());
755
756 $this->assertEquals(302, $client->getResponse()->getStatusCode());
757 $this->assertContains('flashes.config.notice.tags_reset', $client->getContainer()->get('session')->getFlashBag()->get('notice')[0]);
758
759 $tagReset = $em
760 ->getRepository('WallabagCoreBundle:Tag')
761 ->countAllTags($user->getId());
762
763 $this->assertEquals(0, $tagReset, 'Tags were reset');
764
765 // reset entries
766 $crawler = $client->request('GET', '/config#set3');
767
768 $this->assertEquals(200, $client->getResponse()->getStatusCode());
769
770 $crawler = $client->click($crawler->selectLink('config.reset.entries')->link());
771
772 $this->assertEquals(302, $client->getResponse()->getStatusCode());
773 $this->assertContains('flashes.config.notice.entries_reset', $client->getContainer()->get('session')->getFlashBag()->get('notice')[0]);
774
775 $entryReset = $em
776 ->getRepository('WallabagCoreBundle:Entry')
777 ->countAllEntriesByUsername($user->getId());
778
779 $this->assertEquals(0, $entryReset, 'Entries were reset');
780 }
781
782 public function testResetEntriesCascade()
783 {
784 $this->logInAs('empty');
785 $client = $this->getClient();
786
787 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
788
789 $user = static::$kernel->getContainer()->get('security.token_storage')->getToken()->getUser();
790
791 $tag = new Tag();
792 $tag->setLabel('super');
793 $em->persist($tag);
794
795 $entry = new Entry($user);
796 $entry->setUrl('http://www.lemonde.fr/europe/article/2016/10/01/pour-le-psoe-chaque-election-s-est-transformee-en-une-agonie_5006476_3214.html');
797 $entry->setContent('Youhou');
798 $entry->setTitle('Youhou');
799 $entry->addTag($tag);
800 $em->persist($entry);
801
802 $annotation = new Annotation($user);
803 $annotation->setText('annotated');
804 $annotation->setQuote('annotated');
805 $annotation->setRanges([]);
806 $annotation->setEntry($entry);
807 $em->persist($annotation);
808
809 $em->flush();
810
811 $crawler = $client->request('GET', '/config#set3');
812
813 $this->assertEquals(200, $client->getResponse()->getStatusCode());
814
815 $crawler = $client->click($crawler->selectLink('config.reset.entries')->link());
816
817 $this->assertEquals(302, $client->getResponse()->getStatusCode());
818 $this->assertContains('flashes.config.notice.entries_reset', $client->getContainer()->get('session')->getFlashBag()->get('notice')[0]);
819
820 $entryReset = $em
821 ->getRepository('WallabagCoreBundle:Entry')
822 ->countAllEntriesByUsername($user->getId());
823
824 $this->assertEquals(0, $entryReset, 'Entries were reset');
825
826 $tagReset = $em
827 ->getRepository('WallabagCoreBundle:Tag')
828 ->countAllTags($user->getId());
829
830 $this->assertEquals(0, $tagReset, 'Tags were reset');
831
832 $annotationsReset = $em
833 ->getRepository('WallabagAnnotationBundle:Annotation')
834 ->findAnnotationsByPageId($entry->getId(), $user->getId());
835
836 $this->assertEmpty($annotationsReset, 'Annotations were reset');
837 }
838 }