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 $author = $content->getPublishedBy();
140 $this->assertInstanceOf('Wallabag\CoreBundle\Entity\Entry', $content);
141 $this->assertEquals($this->url
, $content->getUrl());
142 $this->assertContains('Google', $content->getTitle());
143 $this->assertEquals('2015-03-28 15:37:39', $content->getPublishedAt()->format('Y-m-d H:i:s'));
144 $this->assertEquals('Morgane Tual', $author[0]);
147 public function testPostNewOkUrlExist()
149 $this->logInAs('admin');
150 $client = $this->getClient();
152 $crawler = $client->request('GET', '/new');
154 $this->assertEquals(200, $client->getResponse()->getStatusCode());
156 $form = $crawler->filter('form[name=entry]')->form();
159 'entry[url]' => $this->url
,
162 $client->submit($form, $data);
164 $this->assertEquals(302, $client->getResponse()->getStatusCode());
165 $this->assertContains('/view/', $client->getResponse()->getTargetUrl());
168 public function testPostNewOkUrlExistWithAccent()
170 $this->logInAs('admin');
171 $client = $this->getClient();
173 $url = 'http://www.aritylabs.com/post/106091708292/des-contr%C3%B4leurs-optionnels-gr%C3%A2ce-%C3%A0-constmissing';
175 $crawler = $client->request('GET', '/new');
177 $this->assertEquals(200, $client->getResponse()->getStatusCode());
179 $form = $crawler->filter('form[name=entry]')->form();
182 'entry[url]' => $url,
185 $client->submit($form, $data);
187 $crawler = $client->request('GET', '/new');
189 $this->assertEquals(200, $client->getResponse()->getStatusCode());
191 $form = $crawler->filter('form[name=entry]')->form();
194 'entry[url]' => $url,
197 $client->submit($form, $data);
199 $this->assertEquals(302, $client->getResponse()->getStatusCode());
200 $this->assertContains('/view/', $client->getResponse()->getTargetUrl());
202 $em = $client->getContainer()
203 ->get('doctrine.orm.entity_manager');
205 ->getRepository('WallabagCoreBundle:Entry')
206 ->findOneByUrl(urldecode($url));
213 * This test will require an internet connection.
215 public function testPostNewThatWillBeTagged()
217 $this->logInAs('admin');
218 $client = $this->getClient();
220 $crawler = $client->request('GET', '/new');
222 $this->assertEquals(200, $client->getResponse()->getStatusCode());
224 $form = $crawler->filter('form[name=entry]')->form();
227 'entry[url]' => $url = 'https://github.com/wallabag/wallabag',
230 $client->submit($form, $data);
232 $this->assertEquals(302, $client->getResponse()->getStatusCode());
233 $this->assertContains('/', $client->getResponse()->getTargetUrl());
235 $em = $client->getContainer()
236 ->get('doctrine.orm.entity_manager');
238 ->getRepository('WallabagCoreBundle:Entry')
239 ->findOneByUrl($url);
240 $tags = $entry->getTags();
242 $this->assertCount(1, $tags);
243 $this->assertEquals('wallabag', $tags[0]->getLabel());
248 // and now re-submit it to test the cascade persistence for tags after entry removal
249 // related https://github.com/wallabag/wallabag/issues/2121
250 $crawler = $client->request('GET', '/new');
252 $this->assertEquals(200, $client->getResponse()->getStatusCode());
254 $form = $crawler->filter('form[name=entry]')->form();
257 'entry[url]' => $url = 'https://github.com/wallabag/wallabag/tree/master',
260 $client->submit($form, $data);
262 $this->assertEquals(302, $client->getResponse()->getStatusCode());
263 $this->assertContains('/', $client->getResponse()->getTargetUrl());
266 ->getRepository('WallabagCoreBundle:Entry')
267 ->findOneByUrl($url);
269 $tags = $entry->getTags();
271 $this->assertCount(1, $tags);
272 $this->assertEquals('wallabag', $tags[0]->getLabel());
278 public function testArchive()
280 $this->logInAs('admin');
281 $client = $this->getClient();
283 $client->request('GET', '/archive/list');
285 $this->assertEquals(200, $client->getResponse()->getStatusCode());
288 public function testUntagged()
290 $this->logInAs('admin');
291 $client = $this->getClient();
293 $client->request('GET', '/untagged/list');
295 $this->assertEquals(200, $client->getResponse()->getStatusCode());
298 public function testStarred()
300 $this->logInAs('admin');
301 $client = $this->getClient();
303 $client->request('GET', '/starred/list');
305 $this->assertEquals(200, $client->getResponse()->getStatusCode());
308 public function testRangeException()
310 $this->logInAs('admin');
311 $client = $this->getClient();
313 $client->request('GET', '/all/list/900');
315 $this->assertEquals(302, $client->getResponse()->getStatusCode());
316 $this->assertEquals('/all/list', $client->getResponse()->getTargetUrl());
320 * @depends testPostNewOk
322 public function testView()
324 $this->logInAs('admin');
325 $client = $this->getClient();
327 $content = $client->getContainer()
328 ->get('doctrine.orm.entity_manager')
329 ->getRepository('WallabagCoreBundle:Entry')
330 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
332 $crawler = $client->request('GET', '/view/'.$content->getId());
334 $this->assertEquals(200, $client->getResponse()->getStatusCode());
335 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
336 $this->assertContains($content->getTitle(), $body[0]);
340 * @depends testPostNewOk
342 * This test will require an internet connection.
344 public function testReload()
346 $this->logInAs('admin');
347 $client = $this->getClient();
349 $em = $client->getContainer()
350 ->get('doctrine.orm.entity_manager');
353 ->getRepository('WallabagCoreBundle:Entry')
354 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
357 $content->setContent('');
358 $em->persist($content);
361 $client->request('GET', '/reload/'.$content->getId());
363 $this->assertEquals(302, $client->getResponse()->getStatusCode());
366 ->getRepository('WallabagCoreBundle:Entry')
367 ->find($content->getId());
369 $this->assertNotEmpty($content->getContent());
373 * @depends testPostNewOk
375 public function testReloadWithFetchingFailed()
377 $this->logInAs('admin');
378 $client = $this->getClient();
380 $em = $client->getContainer()
381 ->get('doctrine.orm.entity_manager');
384 ->getRepository('WallabagCoreBundle:Entry')
385 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
387 // put a known failed url
388 $content->setUrl('http://0.0.0.0/failed.html');
389 $em->persist($content);
392 $client->request('GET', '/reload/'.$content->getId());
394 $this->assertEquals(302, $client->getResponse()->getStatusCode());
396 // force EntityManager to clear previous entity
397 // otherwise, retrieve the same entity will retrieve change from the previous request :0
400 ->getRepository('WallabagCoreBundle:Entry')
401 ->find($content->getId());
403 $newContent->setUrl($this->url
);
404 $em->persist($newContent);
407 $this->assertNotEquals($client->getContainer()->getParameter('wallabag_core.fetching_error_message'), $newContent->getContent());
410 public function testEdit()
412 $this->logInAs('admin');
413 $client = $this->getClient();
415 $content = $client->getContainer()
416 ->get('doctrine.orm.entity_manager')
417 ->getRepository('WallabagCoreBundle:Entry')
418 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
420 $crawler = $client->request('GET', '/edit/'.$content->getId());
422 $this->assertEquals(200, $client->getResponse()->getStatusCode());
424 $this->assertCount(1, $crawler->filter('input[id=entry_title]'));
425 $this->assertCount(1, $crawler->filter('button[id=entry_save]'));
428 public function testEditUpdate()
430 $this->logInAs('admin');
431 $client = $this->getClient();
433 $content = $client->getContainer()
434 ->get('doctrine.orm.entity_manager')
435 ->getRepository('WallabagCoreBundle:Entry')
436 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
438 $crawler = $client->request('GET', '/edit/'.$content->getId());
440 $this->assertEquals(200, $client->getResponse()->getStatusCode());
442 $form = $crawler->filter('button[type=submit]')->form();
445 'entry[title]' => 'My updated title hehe :)',
448 $client->submit($form, $data);
450 $this->assertEquals(302, $client->getResponse()->getStatusCode());
452 $crawler = $client->followRedirect();
454 $this->assertGreaterThan(1, $alert = $crawler->filter('div[id=article] h1')->extract(['_text']));
455 $this->assertContains('My updated title hehe :)', $alert[0]);
458 public function testToggleArchive()
460 $this->logInAs('admin');
461 $client = $this->getClient();
463 $content = $client->getContainer()
464 ->get('doctrine.orm.entity_manager')
465 ->getRepository('WallabagCoreBundle:Entry')
466 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
468 $client->request('GET', '/archive/'.$content->getId());
470 $this->assertEquals(302, $client->getResponse()->getStatusCode());
472 $res = $client->getContainer()
473 ->get('doctrine.orm.entity_manager')
474 ->getRepository('WallabagCoreBundle:Entry')
475 ->find($content->getId());
477 $this->assertEquals($res->isArchived(), true);
480 public function testToggleStar()
482 $this->logInAs('admin');
483 $client = $this->getClient();
485 $content = $client->getContainer()
486 ->get('doctrine.orm.entity_manager')
487 ->getRepository('WallabagCoreBundle:Entry')
488 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
490 $client->request('GET', '/star/'.$content->getId());
492 $this->assertEquals(302, $client->getResponse()->getStatusCode());
494 $res = $client->getContainer()
495 ->get('doctrine.orm.entity_manager')
496 ->getRepository('WallabagCoreBundle:Entry')
497 ->findOneById($content->getId());
499 $this->assertEquals($res->isStarred(), true);
502 public function testDelete()
504 $this->logInAs('admin');
505 $client = $this->getClient();
507 $content = $client->getContainer()
508 ->get('doctrine.orm.entity_manager')
509 ->getRepository('WallabagCoreBundle:Entry')
510 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
512 $client->request('GET', '/delete/'.$content->getId());
514 $this->assertEquals(302, $client->getResponse()->getStatusCode());
516 $client->request('GET', '/delete/'.$content->getId());
518 $this->assertEquals(404, $client->getResponse()->getStatusCode());
522 * It will create a new entry.
526 * And it'll check that user won't be redirected to the view page of the content when it had been removed
528 public function testViewAndDelete()
530 $this->logInAs('admin');
531 $client = $this->getClient();
533 $em = $client->getContainer()
534 ->get('doctrine.orm.entity_manager');
536 // add a new content to be removed later
538 ->getRepository('WallabagUserBundle:User')
539 ->findOneByUserName('admin');
541 $content = new Entry($user);
542 $content->setUrl('http://1.1.1.1/entry');
543 $content->setReadingTime(12);
544 $content->setDomainName('domain.io');
545 $content->setMimetype('text/html');
546 $content->setTitle('test title entry');
547 $content->setContent('This is my content /o/');
548 $content->setArchived(true);
549 $content->setLanguage('fr');
551 $em->persist($content);
554 $client->request('GET', '/view/'.$content->getId());
555 $this->assertEquals(200, $client->getResponse()->getStatusCode());
557 $client->request('GET', '/delete/'.$content->getId());
558 $this->assertEquals(302, $client->getResponse()->getStatusCode());
560 $client->followRedirect();
561 $this->assertEquals(200, $client->getResponse()->getStatusCode());
564 public function testViewOtherUserEntry()
566 $this->logInAs('admin');
567 $client = $this->getClient();
569 $content = $client->getContainer()
570 ->get('doctrine.orm.entity_manager')
571 ->getRepository('WallabagCoreBundle:Entry')
572 ->findOneByUsernameAndNotArchived('bob');
574 $client->request('GET', '/view/'.$content->getId());
576 $this->assertEquals(403, $client->getResponse()->getStatusCode());
579 public function testFilterOnReadingTime()
581 $this->logInAs('admin');
582 $client = $this->getClient();
584 $crawler = $client->request('GET', '/unread/list');
586 $form = $crawler->filter('button[id=submit-filter]')->form();
589 'entry_filter[readingTime][right_number]' => 22,
590 'entry_filter[readingTime][left_number]' => 22,
593 $crawler = $client->submit($form, $data);
595 $this->assertCount(1, $crawler->filter('div[class=entry]'));
598 public function testFilterOnReadingTimeOnlyUpper()
600 $this->logInAs('admin');
601 $client = $this->getClient();
603 $crawler = $client->request('GET', '/unread/list');
605 $form = $crawler->filter('button[id=submit-filter]')->form();
608 'entry_filter[readingTime][right_number]' => 22,
611 $crawler = $client->submit($form, $data);
613 $this->assertCount(2, $crawler->filter('div[class=entry]'));
616 public function testFilterOnReadingTimeOnlyLower()
618 $this->logInAs('admin');
619 $client = $this->getClient();
621 $crawler = $client->request('GET', '/unread/list');
623 $form = $crawler->filter('button[id=submit-filter]')->form();
626 'entry_filter[readingTime][left_number]' => 22,
629 $crawler = $client->submit($form, $data);
631 $this->assertCount(4, $crawler->filter('div[class=entry]'));
634 public function testFilterOnUnreadStatus()
636 $this->logInAs('admin');
637 $client = $this->getClient();
639 $crawler = $client->request('GET', '/all/list');
641 $form = $crawler->filter('button[id=submit-filter]')->form();
644 'entry_filter[isUnread]' => true,
647 $crawler = $client->submit($form, $data);
649 $this->assertCount(4, $crawler->filter('div[class=entry]'));
652 public function testFilterOnCreationDate()
654 $this->logInAs('admin');
655 $client = $this->getClient();
657 $crawler = $client->request('GET', '/unread/list');
659 $form = $crawler->filter('button[id=submit-filter]')->form();
662 'entry_filter[createdAt][left_date]' => date('d/m/Y'),
663 'entry_filter[createdAt][right_date]' => date('d/m/Y', strtotime('+1 day')),
666 $crawler = $client->submit($form, $data);
668 $this->assertCount(5, $crawler->filter('div[class=entry]'));
671 'entry_filter[createdAt][left_date]' => date('d/m/Y'),
672 'entry_filter[createdAt][right_date]' => date('d/m/Y'),
675 $crawler = $client->submit($form, $data);
677 $this->assertCount(5, $crawler->filter('div[class=entry]'));
680 'entry_filter[createdAt][left_date]' => '01/01/1970',
681 'entry_filter[createdAt][right_date]' => '01/01/1970',
684 $crawler = $client->submit($form, $data);
686 $this->assertCount(0, $crawler->filter('div[class=entry]'));
689 public function testPaginationWithFilter()
691 $this->logInAs('admin');
692 $client = $this->getClient();
693 $crawler = $client->request('GET', '/config');
695 $form = $crawler->filter('button[id=config_save]')->form();
698 'config[items_per_page]' => '1',
701 $client->submit($form, $data);
703 $parameters = '?entry_filter%5BreadingTime%5D%5Bleft_number%5D=&entry_filter%5BreadingTime%5D%5Bright_number%5D=';
705 $client->request('GET', 'unread/list'.$parameters);
707 $this->assertContains($parameters, $client->getResponse()->getContent());
710 $crawler = $client->request('GET', '/config');
711 $form = $crawler->filter('button[id=config_save]')->form();
713 'config[items_per_page]' => '12',
715 $client->submit($form, $data);
718 public function testFilterOnDomainName()
720 $this->logInAs('admin');
721 $client = $this->getClient();
723 $crawler = $client->request('GET', '/unread/list');
724 $form = $crawler->filter('button[id=submit-filter]')->form();
726 'entry_filter[domainName]' => 'domain',
729 $crawler = $client->submit($form, $data);
730 $this->assertCount(5, $crawler->filter('div[class=entry]'));
732 $crawler = $client->request('GET', '/unread/list');
733 $form = $crawler->filter('button[id=submit-filter]')->form();
735 'entry_filter[domainName]' => 'dOmain',
738 $crawler = $client->submit($form, $data);
739 $this->assertCount(5, $crawler->filter('div[class=entry]'));
741 $form = $crawler->filter('button[id=submit-filter]')->form();
743 'entry_filter[domainName]' => 'wallabag',
746 $crawler = $client->submit($form, $data);
747 $this->assertCount(0, $crawler->filter('div[class=entry]'));
750 public function testFilterOnStatus()
752 $this->logInAs('admin');
753 $client = $this->getClient();
755 $crawler = $client->request('GET', '/unread/list');
756 $form = $crawler->filter('button[id=submit-filter]')->form();
757 $form['entry_filter[isArchived]']->tick();
758 $form['entry_filter[isStarred]']->untick();
760 $crawler = $client->submit($form);
761 $this->assertCount(1, $crawler->filter('div[class=entry]'));
763 $form = $crawler->filter('button[id=submit-filter]')->form();
764 $form['entry_filter[isArchived]']->untick();
765 $form['entry_filter[isStarred]']->tick();
767 $crawler = $client->submit($form);
768 $this->assertCount(1, $crawler->filter('div[class=entry]'));
771 public function testPreviewPictureFilter()
773 $this->logInAs('admin');
774 $client = $this->getClient();
776 $crawler = $client->request('GET', '/unread/list');
777 $form = $crawler->filter('button[id=submit-filter]')->form();
778 $form['entry_filter[previewPicture]']->tick();
780 $crawler = $client->submit($form);
781 $this->assertCount(1, $crawler->filter('div[class=entry]'));
784 public function testFilterOnLanguage()
786 $this->logInAs('admin');
787 $client = $this->getClient();
789 $crawler = $client->request('GET', '/unread/list');
790 $form = $crawler->filter('button[id=submit-filter]')->form();
792 'entry_filter[language]' => 'fr',
795 $crawler = $client->submit($form, $data);
796 $this->assertCount(2, $crawler->filter('div[class=entry]'));
798 $form = $crawler->filter('button[id=submit-filter]')->form();
800 'entry_filter[language]' => 'en',
803 $crawler = $client->submit($form, $data);
804 $this->assertCount(2, $crawler->filter('div[class=entry]'));
807 public function testShareEntryPublicly()
809 $this->logInAs('admin');
810 $client = $this->getClient();
812 $content = $client->getContainer()
813 ->get('doctrine.orm.entity_manager')
814 ->getRepository('WallabagCoreBundle:Entry')
815 ->findOneByUser($this->getLoggedInUserId());
818 $client->request('GET', '/share/'.$content->getUid());
819 $this->assertEquals(404, $client->getResponse()->getStatusCode());
821 // generating the uid
822 $client->request('GET', '/share/'.$content->getId());
823 $this->assertEquals(302, $client->getResponse()->getStatusCode());
825 // follow link with uid
826 $crawler = $client->followRedirect();
827 $this->assertEquals(200, $client->getResponse()->getStatusCode());
828 $this->assertContains('max-age=25200', $client->getResponse()->headers
->get('cache-control'));
829 $this->assertContains('public', $client->getResponse()->headers
->get('cache-control'));
830 $this->assertContains('s-maxage=25200', $client->getResponse()->headers
->get('cache-control'));
831 $this->assertNotContains('no-cache', $client->getResponse()->headers
->get('cache-control'));
832 $this->assertContains('og:title', $client->getResponse()->getContent());
833 $this->assertContains('og:type', $client->getResponse()->getContent());
834 $this->assertContains('og:url', $client->getResponse()->getContent());
835 $this->assertContains('og:image', $client->getResponse()->getContent());
837 // sharing is now disabled
838 $client->getContainer()->get('craue_config')->set('share_public', 0);
839 $client->request('GET', '/share/'.$content->getUid());
840 $this->assertEquals(404, $client->getResponse()->getStatusCode());
842 $client->request('GET', '/view/'.$content->getId());
843 $this->assertContains('no-cache', $client->getResponse()->headers
->get('cache-control'));
845 // removing the share
846 $client->request('GET', '/share/delete/'.$content->getId());
847 $this->assertEquals(302, $client->getResponse()->getStatusCode());
849 // share is now disable
850 $client->request('GET', '/share/'.$content->getUid());
851 $this->assertEquals(404, $client->getResponse()->getStatusCode());
854 public function testNewEntryWithDownloadImagesEnabled()
856 $this->logInAs('admin');
857 $client = $this->getClient();
859 $url = 'http://www.20minutes.fr/montpellier/1952003-20161030-video-car-tombe-panne-rugbymen-perpignan-improvisent-melee-route';
860 $client->getContainer()->get('craue_config')->set('download_images_enabled', 1);
862 $crawler = $client->request('GET', '/new');
864 $this->assertEquals(200, $client->getResponse()->getStatusCode());
866 $form = $crawler->filter('form[name=entry]')->form();
869 'entry[url]' => $url,
872 $client->submit($form, $data);
874 $this->assertEquals(302, $client->getResponse()->getStatusCode());
876 $em = $client->getContainer()
877 ->get('doctrine.orm.entity_manager');
880 ->getRepository('WallabagCoreBundle:Entry')
881 ->findByUrlAndUserId($url, $this->getLoggedInUserId());
883 $this->assertInstanceOf('Wallabag\CoreBundle\Entity\Entry', $entry);
884 $this->assertEquals($url, $entry->getUrl());
885 $this->assertContains('Perpignan', $entry->getTitle());
886 $this->assertContains('/d9bc0fcd.jpeg', $entry->getContent());
888 $client->getContainer()->get('craue_config')->set('download_images_enabled', 0);
892 * @depends testNewEntryWithDownloadImagesEnabled
894 public function testRemoveEntryWithDownloadImagesEnabled()
896 $this->logInAs('admin');
897 $client = $this->getClient();
899 $url = 'http://www.20minutes.fr/montpellier/1952003-20161030-video-car-tombe-panne-rugbymen-perpignan-improvisent-melee-route';
900 $client->getContainer()->get('craue_config')->set('download_images_enabled', 1);
902 $content = $client->getContainer()
903 ->get('doctrine.orm.entity_manager')
904 ->getRepository('WallabagCoreBundle:Entry')
905 ->findByUrlAndUserId($url, $this->getLoggedInUserId());
907 $client->request('GET', '/delete/'.$content->getId());
909 $this->assertEquals(302, $client->getResponse()->getStatusCode());
911 $client->getContainer()->get('craue_config')->set('download_images_enabled', 0);
914 public function testRedirectToHomepage()
916 $this->logInAs('empty');
917 $client = $this->getClient();
919 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
921 ->getRepository('WallabagUserBundle:User')
922 ->find($this->getLoggedInUserId());
925 $this->markTestSkipped('No user found in db.');
928 // Redirect to homepage
929 $config = $user->getConfig();
930 $config->setActionMarkAsRead(Config
::REDIRECT_TO_HOMEPAGE
);
931 $em->persist($config);
934 $content = $client->getContainer()
935 ->get('doctrine.orm.entity_manager')
936 ->getRepository('WallabagCoreBundle:Entry')
937 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
939 $client->request('GET', '/view/'.$content->getId());
940 $client->request('GET', '/archive/'.$content->getId());
942 $this->assertEquals(302, $client->getResponse()->getStatusCode());
943 $this->assertEquals('/', $client->getResponse()->headers
->get('location'));
946 public function testRedirectToCurrentPage()
948 $this->logInAs('empty');
949 $client = $this->getClient();
951 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
953 ->getRepository('WallabagUserBundle:User')
954 ->find($this->getLoggedInUserId());
957 $this->markTestSkipped('No user found in db.');
960 // Redirect to current page
961 $config = $user->getConfig();
962 $config->setActionMarkAsRead(Config
::REDIRECT_TO_CURRENT_PAGE
);
963 $em->persist($config);
966 $content = $client->getContainer()
967 ->get('doctrine.orm.entity_manager')
968 ->getRepository('WallabagCoreBundle:Entry')
969 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
971 $client->request('GET', '/view/'.$content->getId());
972 $client->request('GET', '/archive/'.$content->getId());
974 $this->assertEquals(302, $client->getResponse()->getStatusCode());
975 $this->assertContains('/view/'.$content->getId(), $client->getResponse()->headers
->get('location'));
978 public function testFilterOnHttpStatus()
980 $this->logInAs('admin');
981 $client = $this->getClient();
983 $crawler = $client->request('GET', '/new');
984 $form = $crawler->filter('form[name=entry]')->form();
987 'entry[url]' => 'http://www.lemonde.fr/incorrect-url/',
990 $client->submit($form, $data);
992 $crawler = $client->request('GET', '/all/list');
993 $form = $crawler->filter('button[id=submit-filter]')->form();
996 'entry_filter[httpStatus]' => 404,
999 $crawler = $client->submit($form, $data);
1001 $this->assertCount(1, $crawler->filter('div[class=entry]'));
1003 $crawler = $client->request('GET', '/new');
1004 $form = $crawler->filter('form[name=entry]')->form();
1007 'entry[url]' => 'http://www.nextinpact.com/news/101235-wallabag-alternative-libre-a-pocket-creuse-petit-a-petit-son-nid.htm',
1010 $client->submit($form, $data);
1012 $crawler = $client->request('GET', '/all/list');
1013 $form = $crawler->filter('button[id=submit-filter]')->form();
1016 'entry_filter[httpStatus]' => 200,
1019 $crawler = $client->submit($form, $data);
1021 $this->assertCount(1, $crawler->filter('div[class=entry]'));
1023 $crawler = $client->request('GET', '/all/list');
1024 $form = $crawler->filter('button[id=submit-filter]')->form();
1027 'entry_filter[httpStatus]' => 1024,
1030 $crawler = $client->submit($form, $data);
1032 $this->assertCount(7, $crawler->filter('div[class=entry]'));
1035 public function testSearch()
1037 $this->logInAs('admin');
1038 $client = $this->getClient();
1040 // Search on unread list
1041 $crawler = $client->request('GET', '/unread/list');
1043 $form = $crawler->filter('form[name=search]')->form();
1045 'search_entry[term]' => 'title',
1048 $crawler = $client->submit($form, $data);
1050 $this->assertCount(5, $crawler->filter('div[class=entry]'));
1052 // Search on starred list
1053 $crawler = $client->request('GET', '/starred/list');
1055 $form = $crawler->filter('form[name=search]')->form();
1057 'search_entry[term]' => 'title',
1060 $crawler = $client->submit($form, $data);
1062 $this->assertCount(1, $crawler->filter('div[class=entry]'));
1064 // Added new article to test on archive list
1065 $crawler = $client->request('GET', '/new');
1066 $form = $crawler->filter('form[name=entry]')->form();
1068 'entry[url]' => $this->url
,
1070 $client->submit($form, $data);
1071 $content = $client->getContainer()
1072 ->get('doctrine.orm.entity_manager')
1073 ->getRepository('WallabagCoreBundle:Entry')
1074 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
1075 $client->request('GET', '/archive/'.$content->getId());
1077 $crawler = $client->request('GET', '/archive/list');
1079 $form = $crawler->filter('form[name=search]')->form();
1081 'search_entry[term]' => 'manège',
1084 $crawler = $client->submit($form, $data);
1086 $this->assertCount(1, $crawler->filter('div[class=entry]'));
1087 $client->request('GET', '/delete/'.$content->getId());
1089 // test on list of all articles
1090 $crawler = $client->request('GET', '/all/list');
1092 $form = $crawler->filter('form[name=search]')->form();
1094 'search_entry[term]' => 'wxcvbnqsdf', // a string not available in the database
1097 $crawler = $client->submit($form, $data);
1099 $this->assertCount(0, $crawler->filter('div[class=entry]'));
1101 // test url search on list of all articles
1102 $crawler = $client->request('GET', '/all/list');
1104 $form = $crawler->filter('form[name=search]')->form();
1106 'search_entry[term]' => 'domain', // the search will match an entry with 'domain' in its url
1109 $crawler = $client->submit($form, $data);
1111 $this->assertCount(1, $crawler->filter('div[class=entry]'));
1113 // same as previous test but for case-sensitivity
1114 $crawler = $client->request('GET', '/all/list');
1116 $form = $crawler->filter('form[name=search]')->form();
1118 'search_entry[term]' => 'doMain', // the search will match an entry with 'domain' in its url
1121 $crawler = $client->submit($form, $data);
1123 $this->assertCount(1, $crawler->filter('div[class=entry]'));