3 namespace Tests\Wallabag\CoreBundle\Controller
;
5 use Tests\Wallabag\CoreBundle\WallabagCoreTestCase
;
6 use Wallabag\CoreBundle\Entity\Config
;
7 use Wallabag\CoreBundle\Entity\Entry
;
9 class EntryControllerTest
extends WallabagCoreTestCase
11 public $url = 'http://www.lemonde.fr/pixels/article/2015/03/28/plongee-dans-l-univers-d-ingress-le-jeu-de-google-aux-frontieres-du-reel_4601155_4408996.html';
13 public function testLogin()
15 $client = $this->getClient();
17 $client->request('GET', '/new');
19 $this->assertEquals(302, $client->getResponse()->getStatusCode());
20 $this->assertContains('login', $client->getResponse()->headers
->get('location'));
23 public function testQuickstart()
25 $this->logInAs('empty');
26 $client = $this->getClient();
28 $client->request('GET', '/unread/list');
29 $crawler = $client->followRedirect();
31 $this->assertEquals(200, $client->getResponse()->getStatusCode());
32 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
33 $this->assertContains('quickstart.intro.title', $body[0]);
35 // Test if quickstart is disabled when user has 1 entry
36 $crawler = $client->request('GET', '/new');
38 $this->assertEquals(200, $client->getResponse()->getStatusCode());
40 $form = $crawler->filter('form[name=entry]')->form();
43 'entry[url]' => $this->url
,
46 $client->submit($form, $data);
47 $this->assertEquals(302, $client->getResponse()->getStatusCode());
48 $client->followRedirect();
50 $crawler = $client->request('GET', '/unread/list');
51 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
52 $this->assertContains('entry.list.number_on_the_page', $body[0]);
55 public function testGetNew()
57 $this->logInAs('admin');
58 $client = $this->getClient();
60 $crawler = $client->request('GET', '/new');
62 $this->assertEquals(200, $client->getResponse()->getStatusCode());
64 $this->assertCount(1, $crawler->filter('input[type=url]'));
65 $this->assertCount(1, $crawler->filter('form[name=entry]'));
68 public function testPostNewViaBookmarklet()
70 $this->logInAs('admin');
71 $client = $this->getClient();
73 $crawler = $client->request('GET', '/');
75 $this->assertCount(4, $crawler->filter('div[class=entry]'));
78 $client->request('GET', '/bookmarklet', ['url' => $this->url
]);
79 $this->assertEquals(302, $client->getResponse()->getStatusCode());
80 $client->followRedirect();
81 $crawler = $client->request('GET', '/');
82 $this->assertCount(5, $crawler->filter('div[class=entry]'));
84 $em = $client->getContainer()
85 ->get('doctrine.orm.entity_manager');
87 ->getRepository('WallabagCoreBundle:Entry')
88 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
93 public function testPostNewEmpty()
95 $this->logInAs('admin');
96 $client = $this->getClient();
98 $crawler = $client->request('GET', '/new');
100 $this->assertEquals(200, $client->getResponse()->getStatusCode());
102 $form = $crawler->filter('form[name=entry]')->form();
104 $crawler = $client->submit($form);
106 $this->assertEquals(200, $client->getResponse()->getStatusCode());
107 $this->assertCount(1, $alert = $crawler->filter('form ul li')->extract(['_text']));
108 $this->assertEquals('This value should not be blank.', $alert[0]);
112 * This test will require an internet connection.
114 public function testPostNewOk()
116 $this->logInAs('admin');
117 $client = $this->getClient();
119 $crawler = $client->request('GET', '/new');
121 $this->assertEquals(200, $client->getResponse()->getStatusCode());
123 $form = $crawler->filter('form[name=entry]')->form();
126 'entry[url]' => $this->url
,
129 $client->submit($form, $data);
131 $this->assertEquals(302, $client->getResponse()->getStatusCode());
133 $content = $client->getContainer()
134 ->get('doctrine.orm.entity_manager')
135 ->getRepository('WallabagCoreBundle:Entry')
136 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
138 $this->assertInstanceOf('Wallabag\CoreBundle\Entity\Entry', $content);
139 $this->assertEquals($this->url
, $content->getUrl());
140 $this->assertContains('Google', $content->getTitle());
141 $this->assertEquals('2015-03-28 15:37:39', $content->getPublishedAt());
144 public function testPostNewOkUrlExist()
146 $this->logInAs('admin');
147 $client = $this->getClient();
149 $crawler = $client->request('GET', '/new');
151 $this->assertEquals(200, $client->getResponse()->getStatusCode());
153 $form = $crawler->filter('form[name=entry]')->form();
156 'entry[url]' => $this->url
,
159 $client->submit($form, $data);
161 $this->assertEquals(302, $client->getResponse()->getStatusCode());
162 $this->assertContains('/view/', $client->getResponse()->getTargetUrl());
165 public function testPostNewOkUrlExistWithAccent()
167 $this->logInAs('admin');
168 $client = $this->getClient();
170 $url = 'http://www.aritylabs.com/post/106091708292/des-contr%C3%B4leurs-optionnels-gr%C3%A2ce-%C3%A0-constmissing';
172 $crawler = $client->request('GET', '/new');
174 $this->assertEquals(200, $client->getResponse()->getStatusCode());
176 $form = $crawler->filter('form[name=entry]')->form();
179 'entry[url]' => $url,
182 $client->submit($form, $data);
184 $crawler = $client->request('GET', '/new');
186 $this->assertEquals(200, $client->getResponse()->getStatusCode());
188 $form = $crawler->filter('form[name=entry]')->form();
191 'entry[url]' => $url,
194 $client->submit($form, $data);
196 $this->assertEquals(302, $client->getResponse()->getStatusCode());
197 $this->assertContains('/view/', $client->getResponse()->getTargetUrl());
199 $em = $client->getContainer()
200 ->get('doctrine.orm.entity_manager');
202 ->getRepository('WallabagCoreBundle:Entry')
203 ->findOneByUrl(urldecode($url));
210 * This test will require an internet connection.
212 public function testPostNewThatWillBeTagged()
214 $this->logInAs('admin');
215 $client = $this->getClient();
217 $crawler = $client->request('GET', '/new');
219 $this->assertEquals(200, $client->getResponse()->getStatusCode());
221 $form = $crawler->filter('form[name=entry]')->form();
224 'entry[url]' => $url = 'https://github.com/wallabag/wallabag',
227 $client->submit($form, $data);
229 $this->assertEquals(302, $client->getResponse()->getStatusCode());
230 $this->assertContains('/', $client->getResponse()->getTargetUrl());
232 $em = $client->getContainer()
233 ->get('doctrine.orm.entity_manager');
235 ->getRepository('WallabagCoreBundle:Entry')
236 ->findOneByUrl($url);
237 $tags = $entry->getTags();
239 $this->assertCount(1, $tags);
240 $this->assertEquals('wallabag', $tags[0]->getLabel());
245 // and now re-submit it to test the cascade persistence for tags after entry removal
246 // related https://github.com/wallabag/wallabag/issues/2121
247 $crawler = $client->request('GET', '/new');
249 $this->assertEquals(200, $client->getResponse()->getStatusCode());
251 $form = $crawler->filter('form[name=entry]')->form();
254 'entry[url]' => $url = 'https://github.com/wallabag/wallabag/tree/master',
257 $client->submit($form, $data);
259 $this->assertEquals(302, $client->getResponse()->getStatusCode());
260 $this->assertContains('/', $client->getResponse()->getTargetUrl());
263 ->getRepository('WallabagCoreBundle:Entry')
264 ->findOneByUrl($url);
266 $tags = $entry->getTags();
268 $this->assertCount(1, $tags);
269 $this->assertEquals('wallabag', $tags[0]->getLabel());
275 public function testArchive()
277 $this->logInAs('admin');
278 $client = $this->getClient();
280 $client->request('GET', '/archive/list');
282 $this->assertEquals(200, $client->getResponse()->getStatusCode());
285 public function testUntagged()
287 $this->logInAs('admin');
288 $client = $this->getClient();
290 $client->request('GET', '/untagged/list');
292 $this->assertEquals(200, $client->getResponse()->getStatusCode());
295 public function testStarred()
297 $this->logInAs('admin');
298 $client = $this->getClient();
300 $client->request('GET', '/starred/list');
302 $this->assertEquals(200, $client->getResponse()->getStatusCode());
305 public function testRangeException()
307 $this->logInAs('admin');
308 $client = $this->getClient();
310 $client->request('GET', '/all/list/900');
312 $this->assertEquals(302, $client->getResponse()->getStatusCode());
313 $this->assertEquals('/all/list', $client->getResponse()->getTargetUrl());
317 * @depends testPostNewOk
319 public function testView()
321 $this->logInAs('admin');
322 $client = $this->getClient();
324 $content = $client->getContainer()
325 ->get('doctrine.orm.entity_manager')
326 ->getRepository('WallabagCoreBundle:Entry')
327 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
329 $crawler = $client->request('GET', '/view/'.$content->getId());
331 $this->assertEquals(200, $client->getResponse()->getStatusCode());
332 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
333 $this->assertContains($content->getTitle(), $body[0]);
337 * @depends testPostNewOk
339 * This test will require an internet connection.
341 public function testReload()
343 $this->logInAs('admin');
344 $client = $this->getClient();
346 $em = $client->getContainer()
347 ->get('doctrine.orm.entity_manager');
350 ->getRepository('WallabagCoreBundle:Entry')
351 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
354 $content->setContent('');
355 $em->persist($content);
358 $client->request('GET', '/reload/'.$content->getId());
360 $this->assertEquals(302, $client->getResponse()->getStatusCode());
363 ->getRepository('WallabagCoreBundle:Entry')
364 ->find($content->getId());
366 $this->assertNotEmpty($content->getContent());
370 * @depends testPostNewOk
372 public function testReloadWithFetchingFailed()
374 $this->logInAs('admin');
375 $client = $this->getClient();
377 $em = $client->getContainer()
378 ->get('doctrine.orm.entity_manager');
381 ->getRepository('WallabagCoreBundle:Entry')
382 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
384 // put a known failed url
385 $content->setUrl('http://0.0.0.0/failed.html');
386 $em->persist($content);
389 $client->request('GET', '/reload/'.$content->getId());
391 $this->assertEquals(302, $client->getResponse()->getStatusCode());
393 // force EntityManager to clear previous entity
394 // otherwise, retrieve the same entity will retrieve change from the previous request :0
397 ->getRepository('WallabagCoreBundle:Entry')
398 ->find($content->getId());
400 $newContent->setUrl($this->url
);
401 $em->persist($newContent);
404 $this->assertNotEquals($client->getContainer()->getParameter('wallabag_core.fetching_error_message'), $newContent->getContent());
407 public function testEdit()
409 $this->logInAs('admin');
410 $client = $this->getClient();
412 $content = $client->getContainer()
413 ->get('doctrine.orm.entity_manager')
414 ->getRepository('WallabagCoreBundle:Entry')
415 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
417 $crawler = $client->request('GET', '/edit/'.$content->getId());
419 $this->assertEquals(200, $client->getResponse()->getStatusCode());
421 $this->assertCount(1, $crawler->filter('input[id=entry_title]'));
422 $this->assertCount(1, $crawler->filter('button[id=entry_save]'));
425 public function testEditUpdate()
427 $this->logInAs('admin');
428 $client = $this->getClient();
430 $content = $client->getContainer()
431 ->get('doctrine.orm.entity_manager')
432 ->getRepository('WallabagCoreBundle:Entry')
433 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
435 $crawler = $client->request('GET', '/edit/'.$content->getId());
437 $this->assertEquals(200, $client->getResponse()->getStatusCode());
439 $form = $crawler->filter('button[type=submit]')->form();
442 'entry[title]' => 'My updated title hehe :)',
445 $client->submit($form, $data);
447 $this->assertEquals(302, $client->getResponse()->getStatusCode());
449 $crawler = $client->followRedirect();
451 $this->assertGreaterThan(1, $alert = $crawler->filter('div[id=article] h1')->extract(['_text']));
452 $this->assertContains('My updated title hehe :)', $alert[0]);
455 public function testToggleArchive()
457 $this->logInAs('admin');
458 $client = $this->getClient();
460 $content = $client->getContainer()
461 ->get('doctrine.orm.entity_manager')
462 ->getRepository('WallabagCoreBundle:Entry')
463 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
465 $client->request('GET', '/archive/'.$content->getId());
467 $this->assertEquals(302, $client->getResponse()->getStatusCode());
469 $res = $client->getContainer()
470 ->get('doctrine.orm.entity_manager')
471 ->getRepository('WallabagCoreBundle:Entry')
472 ->find($content->getId());
474 $this->assertEquals($res->isArchived(), true);
477 public function testToggleStar()
479 $this->logInAs('admin');
480 $client = $this->getClient();
482 $content = $client->getContainer()
483 ->get('doctrine.orm.entity_manager')
484 ->getRepository('WallabagCoreBundle:Entry')
485 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
487 $client->request('GET', '/star/'.$content->getId());
489 $this->assertEquals(302, $client->getResponse()->getStatusCode());
491 $res = $client->getContainer()
492 ->get('doctrine.orm.entity_manager')
493 ->getRepository('WallabagCoreBundle:Entry')
494 ->findOneById($content->getId());
496 $this->assertEquals($res->isStarred(), true);
499 public function testDelete()
501 $this->logInAs('admin');
502 $client = $this->getClient();
504 $content = $client->getContainer()
505 ->get('doctrine.orm.entity_manager')
506 ->getRepository('WallabagCoreBundle:Entry')
507 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
509 $client->request('GET', '/delete/'.$content->getId());
511 $this->assertEquals(302, $client->getResponse()->getStatusCode());
513 $client->request('GET', '/delete/'.$content->getId());
515 $this->assertEquals(404, $client->getResponse()->getStatusCode());
519 * It will create a new entry.
523 * And it'll check that user won't be redirected to the view page of the content when it had been removed
525 public function testViewAndDelete()
527 $this->logInAs('admin');
528 $client = $this->getClient();
530 $em = $client->getContainer()
531 ->get('doctrine.orm.entity_manager');
533 // add a new content to be removed later
535 ->getRepository('WallabagUserBundle:User')
536 ->findOneByUserName('admin');
538 $content = new Entry($user);
539 $content->setUrl('http://1.1.1.1/entry');
540 $content->setReadingTime(12);
541 $content->setDomainName('domain.io');
542 $content->setMimetype('text/html');
543 $content->setTitle('test title entry');
544 $content->setContent('This is my content /o/');
545 $content->setArchived(true);
546 $content->setLanguage('fr');
548 $em->persist($content);
551 $client->request('GET', '/view/'.$content->getId());
552 $this->assertEquals(200, $client->getResponse()->getStatusCode());
554 $client->request('GET', '/delete/'.$content->getId());
555 $this->assertEquals(302, $client->getResponse()->getStatusCode());
557 $client->followRedirect();
558 $this->assertEquals(200, $client->getResponse()->getStatusCode());
561 public function testViewOtherUserEntry()
563 $this->logInAs('admin');
564 $client = $this->getClient();
566 $content = $client->getContainer()
567 ->get('doctrine.orm.entity_manager')
568 ->getRepository('WallabagCoreBundle:Entry')
569 ->findOneByUsernameAndNotArchived('bob');
571 $client->request('GET', '/view/'.$content->getId());
573 $this->assertEquals(403, $client->getResponse()->getStatusCode());
576 public function testFilterOnReadingTime()
578 $this->logInAs('admin');
579 $client = $this->getClient();
581 $crawler = $client->request('GET', '/unread/list');
583 $form = $crawler->filter('button[id=submit-filter]')->form();
586 'entry_filter[readingTime][right_number]' => 22,
587 'entry_filter[readingTime][left_number]' => 22,
590 $crawler = $client->submit($form, $data);
592 $this->assertCount(1, $crawler->filter('div[class=entry]'));
595 public function testFilterOnReadingTimeOnlyUpper()
597 $this->logInAs('admin');
598 $client = $this->getClient();
600 $crawler = $client->request('GET', '/unread/list');
602 $form = $crawler->filter('button[id=submit-filter]')->form();
605 'entry_filter[readingTime][right_number]' => 22,
608 $crawler = $client->submit($form, $data);
610 $this->assertCount(2, $crawler->filter('div[class=entry]'));
613 public function testFilterOnReadingTimeOnlyLower()
615 $this->logInAs('admin');
616 $client = $this->getClient();
618 $crawler = $client->request('GET', '/unread/list');
620 $form = $crawler->filter('button[id=submit-filter]')->form();
623 'entry_filter[readingTime][left_number]' => 22,
626 $crawler = $client->submit($form, $data);
628 $this->assertCount(4, $crawler->filter('div[class=entry]'));
631 public function testFilterOnUnreadStatus()
633 $this->logInAs('admin');
634 $client = $this->getClient();
636 $crawler = $client->request('GET', '/all/list');
638 $form = $crawler->filter('button[id=submit-filter]')->form();
641 'entry_filter[isUnread]' => true,
644 $crawler = $client->submit($form, $data);
646 $this->assertCount(4, $crawler->filter('div[class=entry]'));
649 public function testFilterOnCreationDate()
651 $this->logInAs('admin');
652 $client = $this->getClient();
654 $crawler = $client->request('GET', '/unread/list');
656 $form = $crawler->filter('button[id=submit-filter]')->form();
659 'entry_filter[createdAt][left_date]' => date('d/m/Y'),
660 'entry_filter[createdAt][right_date]' => date('d/m/Y', strtotime('+1 day')),
663 $crawler = $client->submit($form, $data);
665 $this->assertCount(5, $crawler->filter('div[class=entry]'));
668 'entry_filter[createdAt][left_date]' => date('d/m/Y'),
669 'entry_filter[createdAt][right_date]' => date('d/m/Y'),
672 $crawler = $client->submit($form, $data);
674 $this->assertCount(5, $crawler->filter('div[class=entry]'));
677 'entry_filter[createdAt][left_date]' => '01/01/1970',
678 'entry_filter[createdAt][right_date]' => '01/01/1970',
681 $crawler = $client->submit($form, $data);
683 $this->assertCount(0, $crawler->filter('div[class=entry]'));
686 public function testPaginationWithFilter()
688 $this->logInAs('admin');
689 $client = $this->getClient();
690 $crawler = $client->request('GET', '/config');
692 $form = $crawler->filter('button[id=config_save]')->form();
695 'config[items_per_page]' => '1',
698 $client->submit($form, $data);
700 $parameters = '?entry_filter%5BreadingTime%5D%5Bleft_number%5D=&entry_filter%5BreadingTime%5D%5Bright_number%5D=';
702 $client->request('GET', 'unread/list'.$parameters);
704 $this->assertContains($parameters, $client->getResponse()->getContent());
707 $crawler = $client->request('GET', '/config');
708 $form = $crawler->filter('button[id=config_save]')->form();
710 'config[items_per_page]' => '12',
712 $client->submit($form, $data);
715 public function testFilterOnDomainName()
717 $this->logInAs('admin');
718 $client = $this->getClient();
720 $crawler = $client->request('GET', '/unread/list');
721 $form = $crawler->filter('button[id=submit-filter]')->form();
723 'entry_filter[domainName]' => 'domain',
726 $crawler = $client->submit($form, $data);
727 $this->assertCount(5, $crawler->filter('div[class=entry]'));
729 $crawler = $client->request('GET', '/unread/list');
730 $form = $crawler->filter('button[id=submit-filter]')->form();
732 'entry_filter[domainName]' => 'dOmain',
735 $crawler = $client->submit($form, $data);
736 $this->assertCount(5, $crawler->filter('div[class=entry]'));
738 $form = $crawler->filter('button[id=submit-filter]')->form();
740 'entry_filter[domainName]' => 'wallabag',
743 $crawler = $client->submit($form, $data);
744 $this->assertCount(0, $crawler->filter('div[class=entry]'));
747 public function testFilterOnStatus()
749 $this->logInAs('admin');
750 $client = $this->getClient();
752 $crawler = $client->request('GET', '/unread/list');
753 $form = $crawler->filter('button[id=submit-filter]')->form();
754 $form['entry_filter[isArchived]']->tick();
755 $form['entry_filter[isStarred]']->untick();
757 $crawler = $client->submit($form);
758 $this->assertCount(1, $crawler->filter('div[class=entry]'));
760 $form = $crawler->filter('button[id=submit-filter]')->form();
761 $form['entry_filter[isArchived]']->untick();
762 $form['entry_filter[isStarred]']->tick();
764 $crawler = $client->submit($form);
765 $this->assertCount(1, $crawler->filter('div[class=entry]'));
768 public function testPreviewPictureFilter()
770 $this->logInAs('admin');
771 $client = $this->getClient();
773 $crawler = $client->request('GET', '/unread/list');
774 $form = $crawler->filter('button[id=submit-filter]')->form();
775 $form['entry_filter[previewPicture]']->tick();
777 $crawler = $client->submit($form);
778 $this->assertCount(1, $crawler->filter('div[class=entry]'));
781 public function testFilterOnLanguage()
783 $this->logInAs('admin');
784 $client = $this->getClient();
786 $crawler = $client->request('GET', '/unread/list');
787 $form = $crawler->filter('button[id=submit-filter]')->form();
789 'entry_filter[language]' => 'fr',
792 $crawler = $client->submit($form, $data);
793 $this->assertCount(2, $crawler->filter('div[class=entry]'));
795 $form = $crawler->filter('button[id=submit-filter]')->form();
797 'entry_filter[language]' => 'en',
800 $crawler = $client->submit($form, $data);
801 $this->assertCount(2, $crawler->filter('div[class=entry]'));
804 public function testShareEntryPublicly()
806 $this->logInAs('admin');
807 $client = $this->getClient();
809 $content = $client->getContainer()
810 ->get('doctrine.orm.entity_manager')
811 ->getRepository('WallabagCoreBundle:Entry')
812 ->findOneByUser($this->getLoggedInUserId());
815 $client->request('GET', '/share/'.$content->getUid());
816 $this->assertEquals(404, $client->getResponse()->getStatusCode());
818 // generating the uid
819 $client->request('GET', '/share/'.$content->getId());
820 $this->assertEquals(302, $client->getResponse()->getStatusCode());
822 // follow link with uid
823 $crawler = $client->followRedirect();
824 $this->assertEquals(200, $client->getResponse()->getStatusCode());
825 $this->assertContains('max-age=25200', $client->getResponse()->headers
->get('cache-control'));
826 $this->assertContains('public', $client->getResponse()->headers
->get('cache-control'));
827 $this->assertContains('s-maxage=25200', $client->getResponse()->headers
->get('cache-control'));
828 $this->assertNotContains('no-cache', $client->getResponse()->headers
->get('cache-control'));
829 $this->assertContains('og:title', $client->getResponse()->getContent());
830 $this->assertContains('og:type', $client->getResponse()->getContent());
831 $this->assertContains('og:url', $client->getResponse()->getContent());
832 $this->assertContains('og:image', $client->getResponse()->getContent());
834 // sharing is now disabled
835 $client->getContainer()->get('craue_config')->set('share_public', 0);
836 $client->request('GET', '/share/'.$content->getUid());
837 $this->assertEquals(404, $client->getResponse()->getStatusCode());
839 $client->request('GET', '/view/'.$content->getId());
840 $this->assertContains('no-cache', $client->getResponse()->headers
->get('cache-control'));
842 // removing the share
843 $client->request('GET', '/share/delete/'.$content->getId());
844 $this->assertEquals(302, $client->getResponse()->getStatusCode());
846 // share is now disable
847 $client->request('GET', '/share/'.$content->getUid());
848 $this->assertEquals(404, $client->getResponse()->getStatusCode());
851 public function testNewEntryWithDownloadImagesEnabled()
853 $this->logInAs('admin');
854 $client = $this->getClient();
856 $url = 'http://www.20minutes.fr/montpellier/1952003-20161030-video-car-tombe-panne-rugbymen-perpignan-improvisent-melee-route';
857 $client->getContainer()->get('craue_config')->set('download_images_enabled', 1);
859 $crawler = $client->request('GET', '/new');
861 $this->assertEquals(200, $client->getResponse()->getStatusCode());
863 $form = $crawler->filter('form[name=entry]')->form();
866 'entry[url]' => $url,
869 $client->submit($form, $data);
871 $this->assertEquals(302, $client->getResponse()->getStatusCode());
873 $em = $client->getContainer()
874 ->get('doctrine.orm.entity_manager');
877 ->getRepository('WallabagCoreBundle:Entry')
878 ->findByUrlAndUserId($url, $this->getLoggedInUserId());
880 $this->assertInstanceOf('Wallabag\CoreBundle\Entity\Entry', $entry);
881 $this->assertEquals($url, $entry->getUrl());
882 $this->assertContains('Perpignan', $entry->getTitle());
883 $this->assertContains('/d9bc0fcd.jpeg', $entry->getContent());
885 $client->getContainer()->get('craue_config')->set('download_images_enabled', 0);
889 * @depends testNewEntryWithDownloadImagesEnabled
891 public function testRemoveEntryWithDownloadImagesEnabled()
893 $this->logInAs('admin');
894 $client = $this->getClient();
896 $url = 'http://www.20minutes.fr/montpellier/1952003-20161030-video-car-tombe-panne-rugbymen-perpignan-improvisent-melee-route';
897 $client->getContainer()->get('craue_config')->set('download_images_enabled', 1);
899 $content = $client->getContainer()
900 ->get('doctrine.orm.entity_manager')
901 ->getRepository('WallabagCoreBundle:Entry')
902 ->findByUrlAndUserId($url, $this->getLoggedInUserId());
904 $client->request('GET', '/delete/'.$content->getId());
906 $this->assertEquals(302, $client->getResponse()->getStatusCode());
908 $client->getContainer()->get('craue_config')->set('download_images_enabled', 0);
911 public function testRedirectToHomepage()
913 $this->logInAs('empty');
914 $client = $this->getClient();
916 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
918 ->getRepository('WallabagUserBundle:User')
919 ->find($this->getLoggedInUserId());
922 $this->markTestSkipped('No user found in db.');
925 // Redirect to homepage
926 $config = $user->getConfig();
927 $config->setActionMarkAsRead(Config
::REDIRECT_TO_HOMEPAGE
);
928 $em->persist($config);
931 $content = $client->getContainer()
932 ->get('doctrine.orm.entity_manager')
933 ->getRepository('WallabagCoreBundle:Entry')
934 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
936 $client->request('GET', '/view/'.$content->getId());
937 $client->request('GET', '/archive/'.$content->getId());
939 $this->assertEquals(302, $client->getResponse()->getStatusCode());
940 $this->assertEquals('/', $client->getResponse()->headers
->get('location'));
943 public function testRedirectToCurrentPage()
945 $this->logInAs('empty');
946 $client = $this->getClient();
948 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
950 ->getRepository('WallabagUserBundle:User')
951 ->find($this->getLoggedInUserId());
954 $this->markTestSkipped('No user found in db.');
957 // Redirect to current page
958 $config = $user->getConfig();
959 $config->setActionMarkAsRead(Config
::REDIRECT_TO_CURRENT_PAGE
);
960 $em->persist($config);
963 $content = $client->getContainer()
964 ->get('doctrine.orm.entity_manager')
965 ->getRepository('WallabagCoreBundle:Entry')
966 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
968 $client->request('GET', '/view/'.$content->getId());
969 $client->request('GET', '/archive/'.$content->getId());
971 $this->assertEquals(302, $client->getResponse()->getStatusCode());
972 $this->assertContains('/view/'.$content->getId(), $client->getResponse()->headers
->get('location'));
975 public function testFilterOnHttpStatus()
977 $this->logInAs('admin');
978 $client = $this->getClient();
980 $crawler = $client->request('GET', '/new');
981 $form = $crawler->filter('form[name=entry]')->form();
984 'entry[url]' => 'http://www.lemonde.fr/incorrect-url/',
987 $client->submit($form, $data);
989 $crawler = $client->request('GET', '/all/list');
990 $form = $crawler->filter('button[id=submit-filter]')->form();
993 'entry_filter[httpStatus]' => 404,
996 $crawler = $client->submit($form, $data);
998 $this->assertCount(1, $crawler->filter('div[class=entry]'));
1000 $crawler = $client->request('GET', '/new');
1001 $form = $crawler->filter('form[name=entry]')->form();
1004 'entry[url]' => 'http://www.nextinpact.com/news/101235-wallabag-alternative-libre-a-pocket-creuse-petit-a-petit-son-nid.htm',
1007 $client->submit($form, $data);
1009 $crawler = $client->request('GET', '/all/list');
1010 $form = $crawler->filter('button[id=submit-filter]')->form();
1013 'entry_filter[httpStatus]' => 200,
1016 $crawler = $client->submit($form, $data);
1018 $this->assertCount(1, $crawler->filter('div[class=entry]'));
1020 $crawler = $client->request('GET', '/all/list');
1021 $form = $crawler->filter('button[id=submit-filter]')->form();
1024 'entry_filter[httpStatus]' => 1024,
1027 $crawler = $client->submit($form, $data);
1029 $this->assertCount(7, $crawler->filter('div[class=entry]'));
1032 public function testSearch()
1034 $this->logInAs('admin');
1035 $client = $this->getClient();
1037 // Search on unread list
1038 $crawler = $client->request('GET', '/unread/list');
1040 $form = $crawler->filter('form[name=search]')->form();
1042 'search_entry[term]' => 'title',
1045 $crawler = $client->submit($form, $data);
1047 $this->assertCount(5, $crawler->filter('div[class=entry]'));
1049 // Search on starred list
1050 $crawler = $client->request('GET', '/starred/list');
1052 $form = $crawler->filter('form[name=search]')->form();
1054 'search_entry[term]' => 'title',
1057 $crawler = $client->submit($form, $data);
1059 $this->assertCount(1, $crawler->filter('div[class=entry]'));
1061 // Added new article to test on archive list
1062 $crawler = $client->request('GET', '/new');
1063 $form = $crawler->filter('form[name=entry]')->form();
1065 'entry[url]' => $this->url
,
1067 $client->submit($form, $data);
1068 $content = $client->getContainer()
1069 ->get('doctrine.orm.entity_manager')
1070 ->getRepository('WallabagCoreBundle:Entry')
1071 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
1072 $client->request('GET', '/archive/'.$content->getId());
1074 $crawler = $client->request('GET', '/archive/list');
1076 $form = $crawler->filter('form[name=search]')->form();
1078 'search_entry[term]' => 'manège',
1081 $crawler = $client->submit($form, $data);
1083 $this->assertCount(1, $crawler->filter('div[class=entry]'));
1084 $client->request('GET', '/delete/'.$content->getId());
1086 // test on list of all articles
1087 $crawler = $client->request('GET', '/all/list');
1089 $form = $crawler->filter('form[name=search]')->form();
1091 'search_entry[term]' => 'wxcvbnqsdf', // a string not available in the database
1094 $crawler = $client->submit($form, $data);
1096 $this->assertCount(0, $crawler->filter('div[class=entry]'));
1098 // test url search on list of all articles
1099 $crawler = $client->request('GET', '/all/list');
1101 $form = $crawler->filter('form[name=search]')->form();
1103 'search_entry[term]' => 'domain', // the search will match an entry with 'domain' in its url
1106 $crawler = $client->submit($form, $data);
1108 $this->assertCount(1, $crawler->filter('div[class=entry]'));
1110 // same as previous test but for case-sensitivity
1111 $crawler = $client->request('GET', '/all/list');
1113 $form = $crawler->filter('form[name=search]')->form();
1115 'search_entry[term]' => 'doMain', // the search will match an entry with 'domain' in its url
1118 $crawler = $client->submit($form, $data);
1120 $this->assertCount(1, $crawler->filter('div[class=entry]'));