]> git.immae.eu Git - github/wallabag/wallabag.git/blob - tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php
If reload content failed, don’t update it
[github/wallabag/wallabag.git] / tests / Wallabag / CoreBundle / Controller / EntryControllerTest.php
1 <?php
2
3 namespace Tests\Wallabag\CoreBundle\Controller;
4
5 use Tests\Wallabag\CoreBundle\WallabagCoreTestCase;
6 use Wallabag\CoreBundle\Entity\Entry;
7
8 class EntryControllerTest extends WallabagCoreTestCase
9 {
10 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';
11
12 public function testLogin()
13 {
14 $client = $this->getClient();
15
16 $client->request('GET', '/new');
17
18 $this->assertEquals(302, $client->getResponse()->getStatusCode());
19 $this->assertContains('login', $client->getResponse()->headers->get('location'));
20 }
21
22 public function testQuickstart()
23 {
24 $this->logInAs('empty');
25 $client = $this->getClient();
26
27 $client->request('GET', '/unread/list');
28 $crawler = $client->followRedirect();
29
30 $this->assertEquals(200, $client->getResponse()->getStatusCode());
31 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
32 $this->assertContains('quickstart.intro.title', $body[0]);
33
34 // Test if quickstart is disabled when user has 1 entry
35 $crawler = $client->request('GET', '/new');
36
37 $this->assertEquals(200, $client->getResponse()->getStatusCode());
38
39 $form = $crawler->filter('form[name=entry]')->form();
40
41 $data = [
42 'entry[url]' => $this->url,
43 ];
44
45 $client->submit($form, $data);
46 $this->assertEquals(302, $client->getResponse()->getStatusCode());
47 $client->followRedirect();
48
49 $crawler = $client->request('GET', '/unread/list');
50 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
51 $this->assertContains('entry.list.number_on_the_page', $body[0]);
52 }
53
54 public function testGetNew()
55 {
56 $this->logInAs('admin');
57 $client = $this->getClient();
58
59 $crawler = $client->request('GET', '/new');
60
61 $this->assertEquals(200, $client->getResponse()->getStatusCode());
62
63 $this->assertCount(1, $crawler->filter('input[type=url]'));
64 $this->assertCount(1, $crawler->filter('form[name=entry]'));
65 }
66
67 public function testPostNewViaBookmarklet()
68 {
69 $this->logInAs('admin');
70 $client = $this->getClient();
71
72 $crawler = $client->request('GET', '/');
73
74 $this->assertCount(4, $crawler->filter('div[class=entry]'));
75
76 // Good URL
77 $client->request('GET', '/bookmarklet', ['url' => $this->url]);
78 $this->assertEquals(302, $client->getResponse()->getStatusCode());
79 $client->followRedirect();
80 $crawler = $client->request('GET', '/');
81 $this->assertCount(5, $crawler->filter('div[class=entry]'));
82
83 $em = $client->getContainer()
84 ->get('doctrine.orm.entity_manager');
85 $entry = $em
86 ->getRepository('WallabagCoreBundle:Entry')
87 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
88 $em->remove($entry);
89 $em->flush();
90 }
91
92 public function testPostNewEmpty()
93 {
94 $this->logInAs('admin');
95 $client = $this->getClient();
96
97 $crawler = $client->request('GET', '/new');
98
99 $this->assertEquals(200, $client->getResponse()->getStatusCode());
100
101 $form = $crawler->filter('form[name=entry]')->form();
102
103 $crawler = $client->submit($form);
104
105 $this->assertEquals(200, $client->getResponse()->getStatusCode());
106 $this->assertCount(1, $alert = $crawler->filter('form ul li')->extract(['_text']));
107 $this->assertEquals('This value should not be blank.', $alert[0]);
108 }
109
110 /**
111 * This test will require an internet connection.
112 */
113 public function testPostNewOk()
114 {
115 $this->logInAs('admin');
116 $client = $this->getClient();
117
118 $crawler = $client->request('GET', '/new');
119
120 $this->assertEquals(200, $client->getResponse()->getStatusCode());
121
122 $form = $crawler->filter('form[name=entry]')->form();
123
124 $data = [
125 'entry[url]' => $this->url,
126 ];
127
128 $client->submit($form, $data);
129
130 $this->assertEquals(302, $client->getResponse()->getStatusCode());
131
132 $content = $client->getContainer()
133 ->get('doctrine.orm.entity_manager')
134 ->getRepository('WallabagCoreBundle:Entry')
135 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
136
137 $this->assertInstanceOf('Wallabag\CoreBundle\Entity\Entry', $content);
138 $this->assertEquals($this->url, $content->getUrl());
139 $this->assertContains('Google', $content->getTitle());
140 }
141
142 public function testPostNewOkUrlExist()
143 {
144 $this->logInAs('admin');
145 $client = $this->getClient();
146
147 $crawler = $client->request('GET', '/new');
148
149 $this->assertEquals(200, $client->getResponse()->getStatusCode());
150
151 $form = $crawler->filter('form[name=entry]')->form();
152
153 $data = [
154 'entry[url]' => $this->url,
155 ];
156
157 $client->submit($form, $data);
158
159 $this->assertEquals(302, $client->getResponse()->getStatusCode());
160 $this->assertContains('/view/', $client->getResponse()->getTargetUrl());
161 }
162
163 public function testPostNewOkUrlExistWithAccent()
164 {
165 $this->logInAs('admin');
166 $client = $this->getClient();
167
168 $url = 'http://www.aritylabs.com/post/106091708292/des-contr%C3%B4leurs-optionnels-gr%C3%A2ce-%C3%A0-constmissing';
169
170 $crawler = $client->request('GET', '/new');
171
172 $this->assertEquals(200, $client->getResponse()->getStatusCode());
173
174 $form = $crawler->filter('form[name=entry]')->form();
175
176 $data = [
177 'entry[url]' => $url,
178 ];
179
180 $client->submit($form, $data);
181
182 $crawler = $client->request('GET', '/new');
183
184 $this->assertEquals(200, $client->getResponse()->getStatusCode());
185
186 $form = $crawler->filter('form[name=entry]')->form();
187
188 $data = [
189 'entry[url]' => $url,
190 ];
191
192 $client->submit($form, $data);
193
194 $this->assertEquals(302, $client->getResponse()->getStatusCode());
195 $this->assertContains('/view/', $client->getResponse()->getTargetUrl());
196
197 $em = $client->getContainer()
198 ->get('doctrine.orm.entity_manager');
199 $entry = $em
200 ->getRepository('WallabagCoreBundle:Entry')
201 ->findOneByUrl(urldecode($url));
202
203 $em->remove($entry);
204 $em->flush();
205 }
206
207 /**
208 * This test will require an internet connection.
209 */
210 public function testPostNewThatWillBeTagged()
211 {
212 $this->logInAs('admin');
213 $client = $this->getClient();
214
215 $crawler = $client->request('GET', '/new');
216
217 $this->assertEquals(200, $client->getResponse()->getStatusCode());
218
219 $form = $crawler->filter('form[name=entry]')->form();
220
221 $data = [
222 'entry[url]' => $url = 'https://github.com/wallabag/wallabag',
223 ];
224
225 $client->submit($form, $data);
226
227 $this->assertEquals(302, $client->getResponse()->getStatusCode());
228 $this->assertContains('/', $client->getResponse()->getTargetUrl());
229
230 $em = $client->getContainer()
231 ->get('doctrine.orm.entity_manager');
232 $entry = $em
233 ->getRepository('WallabagCoreBundle:Entry')
234 ->findOneByUrl($url);
235 $tags = $entry->getTags();
236
237 $this->assertCount(1, $tags);
238 $this->assertEquals('wallabag', $tags[0]->getLabel());
239
240 $em->remove($entry);
241 $em->flush();
242
243 // and now re-submit it to test the cascade persistence for tags after entry removal
244 // related https://github.com/wallabag/wallabag/issues/2121
245 $crawler = $client->request('GET', '/new');
246
247 $this->assertEquals(200, $client->getResponse()->getStatusCode());
248
249 $form = $crawler->filter('form[name=entry]')->form();
250
251 $data = [
252 'entry[url]' => $url = 'https://github.com/wallabag/wallabag/tree/master',
253 ];
254
255 $client->submit($form, $data);
256
257 $this->assertEquals(302, $client->getResponse()->getStatusCode());
258 $this->assertContains('/', $client->getResponse()->getTargetUrl());
259
260 $entry = $em
261 ->getRepository('WallabagCoreBundle:Entry')
262 ->findOneByUrl($url);
263
264 $tags = $entry->getTags();
265
266 $this->assertCount(1, $tags);
267 $this->assertEquals('wallabag', $tags[0]->getLabel());
268
269 $em->remove($entry);
270 $em->flush();
271 }
272
273 public function testArchive()
274 {
275 $this->logInAs('admin');
276 $client = $this->getClient();
277
278 $client->request('GET', '/archive/list');
279
280 $this->assertEquals(200, $client->getResponse()->getStatusCode());
281 }
282
283 public function testUntagged()
284 {
285 $this->logInAs('admin');
286 $client = $this->getClient();
287
288 $client->request('GET', '/untagged/list');
289
290 $this->assertEquals(200, $client->getResponse()->getStatusCode());
291 }
292
293 public function testStarred()
294 {
295 $this->logInAs('admin');
296 $client = $this->getClient();
297
298 $client->request('GET', '/starred/list');
299
300 $this->assertEquals(200, $client->getResponse()->getStatusCode());
301 }
302
303 public function testRangeException()
304 {
305 $this->logInAs('admin');
306 $client = $this->getClient();
307
308 $client->request('GET', '/all/list/900');
309
310 $this->assertEquals(302, $client->getResponse()->getStatusCode());
311 $this->assertEquals('/all/list', $client->getResponse()->getTargetUrl());
312 }
313
314 /**
315 * @depends testPostNewOk
316 */
317 public function testView()
318 {
319 $this->logInAs('admin');
320 $client = $this->getClient();
321
322 $content = $client->getContainer()
323 ->get('doctrine.orm.entity_manager')
324 ->getRepository('WallabagCoreBundle:Entry')
325 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
326
327 $crawler = $client->request('GET', '/view/'.$content->getId());
328
329 $this->assertEquals(200, $client->getResponse()->getStatusCode());
330 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
331 $this->assertContains($content->getTitle(), $body[0]);
332 }
333
334 /**
335 * @depends testPostNewOk
336 *
337 * This test will require an internet connection.
338 */
339 public function testReload()
340 {
341 $this->logInAs('admin');
342 $client = $this->getClient();
343
344 $em = $client->getContainer()
345 ->get('doctrine.orm.entity_manager');
346
347 $content = $em
348 ->getRepository('WallabagCoreBundle:Entry')
349 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
350
351 // empty content
352 $content->setContent('');
353 $em->persist($content);
354 $em->flush();
355
356 $client->request('GET', '/reload/'.$content->getId());
357
358 $this->assertEquals(302, $client->getResponse()->getStatusCode());
359
360 $content = $em
361 ->getRepository('WallabagCoreBundle:Entry')
362 ->find($content->getId());
363
364 $this->assertNotEmpty($content->getContent());
365 }
366
367 /**
368 * @depends testPostNewOk
369 *
370 * This test will require an internet connection.
371 */
372 public function testReloadWithFetchingFailed()
373 {
374 $this->logInAs('admin');
375 $client = $this->getClient();
376
377 $em = $client->getContainer()
378 ->get('doctrine.orm.entity_manager');
379
380 $content = $em
381 ->getRepository('WallabagCoreBundle:Entry')
382 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
383
384 // put a known failed url
385 $content->setUrl('http://0.0.0.0/failed.html');
386 $em->persist($content);
387 $em->flush();
388
389 $client->request('GET', '/reload/'.$content->getId());
390
391 $this->assertEquals(302, $client->getResponse()->getStatusCode());
392
393 // force EntityManager to clear previous entity
394 // otherwise, retrieve the same entity will retrieve change from the previous request :0
395 $em->clear();
396 $newContent = $em
397 ->getRepository('WallabagCoreBundle:Entry')
398 ->find($content->getId());
399
400 $newContent->setUrl($this->url);
401 $em->persist($newContent);
402 $em->flush();
403
404 $this->assertNotEquals($client->getContainer()->getParameter('wallabag_core.fetching_error_message'), $newContent->getContent());
405 }
406
407 public function testEdit()
408 {
409 $this->logInAs('admin');
410 $client = $this->getClient();
411
412 $content = $client->getContainer()
413 ->get('doctrine.orm.entity_manager')
414 ->getRepository('WallabagCoreBundle:Entry')
415 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
416
417 $crawler = $client->request('GET', '/edit/'.$content->getId());
418
419 $this->assertEquals(200, $client->getResponse()->getStatusCode());
420
421 $this->assertCount(1, $crawler->filter('input[id=entry_title]'));
422 $this->assertCount(1, $crawler->filter('button[id=entry_save]'));
423 }
424
425 public function testEditUpdate()
426 {
427 $this->logInAs('admin');
428 $client = $this->getClient();
429
430 $content = $client->getContainer()
431 ->get('doctrine.orm.entity_manager')
432 ->getRepository('WallabagCoreBundle:Entry')
433 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
434
435 $crawler = $client->request('GET', '/edit/'.$content->getId());
436
437 $this->assertEquals(200, $client->getResponse()->getStatusCode());
438
439 $form = $crawler->filter('button[type=submit]')->form();
440
441 $data = [
442 'entry[title]' => 'My updated title hehe :)',
443 ];
444
445 $client->submit($form, $data);
446
447 $this->assertEquals(302, $client->getResponse()->getStatusCode());
448
449 $crawler = $client->followRedirect();
450
451 $this->assertGreaterThan(1, $alert = $crawler->filter('div[id=article] h1')->extract(['_text']));
452 $this->assertContains('My updated title hehe :)', $alert[0]);
453 }
454
455 public function testToggleArchive()
456 {
457 $this->logInAs('admin');
458 $client = $this->getClient();
459
460 $content = $client->getContainer()
461 ->get('doctrine.orm.entity_manager')
462 ->getRepository('WallabagCoreBundle:Entry')
463 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
464
465 $client->request('GET', '/archive/'.$content->getId());
466
467 $this->assertEquals(302, $client->getResponse()->getStatusCode());
468
469 $res = $client->getContainer()
470 ->get('doctrine.orm.entity_manager')
471 ->getRepository('WallabagCoreBundle:Entry')
472 ->find($content->getId());
473
474 $this->assertEquals($res->isArchived(), true);
475 }
476
477 public function testToggleStar()
478 {
479 $this->logInAs('admin');
480 $client = $this->getClient();
481
482 $content = $client->getContainer()
483 ->get('doctrine.orm.entity_manager')
484 ->getRepository('WallabagCoreBundle:Entry')
485 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
486
487 $client->request('GET', '/star/'.$content->getId());
488
489 $this->assertEquals(302, $client->getResponse()->getStatusCode());
490
491 $res = $client->getContainer()
492 ->get('doctrine.orm.entity_manager')
493 ->getRepository('WallabagCoreBundle:Entry')
494 ->findOneById($content->getId());
495
496 $this->assertEquals($res->isStarred(), true);
497 }
498
499 public function testDelete()
500 {
501 $this->logInAs('admin');
502 $client = $this->getClient();
503
504 $content = $client->getContainer()
505 ->get('doctrine.orm.entity_manager')
506 ->getRepository('WallabagCoreBundle:Entry')
507 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
508
509 $client->request('GET', '/delete/'.$content->getId());
510
511 $this->assertEquals(302, $client->getResponse()->getStatusCode());
512
513 $client->request('GET', '/delete/'.$content->getId());
514
515 $this->assertEquals(404, $client->getResponse()->getStatusCode());
516 }
517
518 /**
519 * It will create a new entry.
520 * Browse to it.
521 * Then remove it.
522 *
523 * And it'll check that user won't be redirected to the view page of the content when it had been removed
524 */
525 public function testViewAndDelete()
526 {
527 $this->logInAs('admin');
528 $client = $this->getClient();
529
530 $em = $client->getContainer()
531 ->get('doctrine.orm.entity_manager');
532
533 // add a new content to be removed later
534 $user = $em
535 ->getRepository('WallabagUserBundle:User')
536 ->findOneByUserName('admin');
537
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');
547
548 $em->persist($content);
549 $em->flush();
550
551 $client->request('GET', '/view/'.$content->getId());
552 $this->assertEquals(200, $client->getResponse()->getStatusCode());
553
554 $client->request('GET', '/delete/'.$content->getId());
555 $this->assertEquals(302, $client->getResponse()->getStatusCode());
556
557 $client->followRedirect();
558 $this->assertEquals(200, $client->getResponse()->getStatusCode());
559 }
560
561 public function testViewOtherUserEntry()
562 {
563 $this->logInAs('admin');
564 $client = $this->getClient();
565
566 $content = $client->getContainer()
567 ->get('doctrine.orm.entity_manager')
568 ->getRepository('WallabagCoreBundle:Entry')
569 ->findOneByUsernameAndNotArchived('bob');
570
571 $client->request('GET', '/view/'.$content->getId());
572
573 $this->assertEquals(403, $client->getResponse()->getStatusCode());
574 }
575
576 public function testFilterOnReadingTime()
577 {
578 $this->logInAs('admin');
579 $client = $this->getClient();
580
581 $crawler = $client->request('GET', '/unread/list');
582
583 $form = $crawler->filter('button[id=submit-filter]')->form();
584
585 $data = [
586 'entry_filter[readingTime][right_number]' => 22,
587 'entry_filter[readingTime][left_number]' => 22,
588 ];
589
590 $crawler = $client->submit($form, $data);
591
592 $this->assertCount(1, $crawler->filter('div[class=entry]'));
593 }
594
595 public function testFilterOnReadingTimeOnlyUpper()
596 {
597 $this->logInAs('admin');
598 $client = $this->getClient();
599
600 $crawler = $client->request('GET', '/unread/list');
601
602 $form = $crawler->filter('button[id=submit-filter]')->form();
603
604 $data = [
605 'entry_filter[readingTime][right_number]' => 22,
606 ];
607
608 $crawler = $client->submit($form, $data);
609
610 $this->assertCount(2, $crawler->filter('div[class=entry]'));
611 }
612
613 public function testFilterOnReadingTimeOnlyLower()
614 {
615 $this->logInAs('admin');
616 $client = $this->getClient();
617
618 $crawler = $client->request('GET', '/unread/list');
619
620 $form = $crawler->filter('button[id=submit-filter]')->form();
621
622 $data = [
623 'entry_filter[readingTime][left_number]' => 22,
624 ];
625
626 $crawler = $client->submit($form, $data);
627
628 $this->assertCount(4, $crawler->filter('div[class=entry]'));
629 }
630
631 public function testFilterOnUnreadStatus()
632 {
633 $this->logInAs('admin');
634 $client = $this->getClient();
635
636 $crawler = $client->request('GET', '/all/list');
637
638 $form = $crawler->filter('button[id=submit-filter]')->form();
639
640 $data = [
641 'entry_filter[isUnread]' => true,
642 ];
643
644 $crawler = $client->submit($form, $data);
645
646 $this->assertCount(4, $crawler->filter('div[class=entry]'));
647 }
648
649 public function testFilterOnCreationDate()
650 {
651 $this->logInAs('admin');
652 $client = $this->getClient();
653
654 $crawler = $client->request('GET', '/unread/list');
655
656 $form = $crawler->filter('button[id=submit-filter]')->form();
657
658 $data = [
659 'entry_filter[createdAt][left_date]' => date('d/m/Y'),
660 'entry_filter[createdAt][right_date]' => date('d/m/Y', strtotime('+1 day')),
661 ];
662
663 $crawler = $client->submit($form, $data);
664
665 $this->assertCount(5, $crawler->filter('div[class=entry]'));
666
667 $data = [
668 'entry_filter[createdAt][left_date]' => date('d/m/Y'),
669 'entry_filter[createdAt][right_date]' => date('d/m/Y'),
670 ];
671
672 $crawler = $client->submit($form, $data);
673
674 $this->assertCount(5, $crawler->filter('div[class=entry]'));
675
676 $data = [
677 'entry_filter[createdAt][left_date]' => '01/01/1970',
678 'entry_filter[createdAt][right_date]' => '01/01/1970',
679 ];
680
681 $crawler = $client->submit($form, $data);
682
683 $this->assertCount(0, $crawler->filter('div[class=entry]'));
684 }
685
686 public function testPaginationWithFilter()
687 {
688 $this->logInAs('admin');
689 $client = $this->getClient();
690 $crawler = $client->request('GET', '/config');
691
692 $form = $crawler->filter('button[id=config_save]')->form();
693
694 $data = [
695 'config[items_per_page]' => '1',
696 ];
697
698 $client->submit($form, $data);
699
700 $parameters = '?entry_filter%5BreadingTime%5D%5Bleft_number%5D=&entry_filter%5BreadingTime%5D%5Bright_number%5D=';
701
702 $client->request('GET', 'unread/list'.$parameters);
703
704 $this->assertContains($parameters, $client->getResponse()->getContent());
705
706 // reset pagination
707 $crawler = $client->request('GET', '/config');
708 $form = $crawler->filter('button[id=config_save]')->form();
709 $data = [
710 'config[items_per_page]' => '12',
711 ];
712 $client->submit($form, $data);
713 }
714
715 public function testFilterOnDomainName()
716 {
717 $this->logInAs('admin');
718 $client = $this->getClient();
719
720 $crawler = $client->request('GET', '/unread/list');
721 $form = $crawler->filter('button[id=submit-filter]')->form();
722 $data = [
723 'entry_filter[domainName]' => 'domain',
724 ];
725
726 $crawler = $client->submit($form, $data);
727 $this->assertCount(5, $crawler->filter('div[class=entry]'));
728
729 $form = $crawler->filter('button[id=submit-filter]')->form();
730 $data = [
731 'entry_filter[domainName]' => 'wallabag',
732 ];
733
734 $crawler = $client->submit($form, $data);
735 $this->assertCount(0, $crawler->filter('div[class=entry]'));
736 }
737
738 public function testFilterOnStatus()
739 {
740 $this->logInAs('admin');
741 $client = $this->getClient();
742
743 $crawler = $client->request('GET', '/unread/list');
744 $form = $crawler->filter('button[id=submit-filter]')->form();
745 $form['entry_filter[isArchived]']->tick();
746 $form['entry_filter[isStarred]']->untick();
747
748 $crawler = $client->submit($form);
749 $this->assertCount(1, $crawler->filter('div[class=entry]'));
750
751 $form = $crawler->filter('button[id=submit-filter]')->form();
752 $form['entry_filter[isArchived]']->untick();
753 $form['entry_filter[isStarred]']->tick();
754
755 $crawler = $client->submit($form);
756 $this->assertCount(1, $crawler->filter('div[class=entry]'));
757 }
758
759 public function testPreviewPictureFilter()
760 {
761 $this->logInAs('admin');
762 $client = $this->getClient();
763
764 $crawler = $client->request('GET', '/unread/list');
765 $form = $crawler->filter('button[id=submit-filter]')->form();
766 $form['entry_filter[previewPicture]']->tick();
767
768 $crawler = $client->submit($form);
769 $this->assertCount(1, $crawler->filter('div[class=entry]'));
770 }
771
772 public function testFilterOnLanguage()
773 {
774 $this->logInAs('admin');
775 $client = $this->getClient();
776
777 $crawler = $client->request('GET', '/unread/list');
778 $form = $crawler->filter('button[id=submit-filter]')->form();
779 $data = [
780 'entry_filter[language]' => 'fr',
781 ];
782
783 $crawler = $client->submit($form, $data);
784 $this->assertCount(2, $crawler->filter('div[class=entry]'));
785
786 $form = $crawler->filter('button[id=submit-filter]')->form();
787 $data = [
788 'entry_filter[language]' => 'en',
789 ];
790
791 $crawler = $client->submit($form, $data);
792 $this->assertCount(2, $crawler->filter('div[class=entry]'));
793 }
794
795 public function testShareEntryPublicly()
796 {
797 $this->logInAs('admin');
798 $client = $this->getClient();
799
800 $content = $client->getContainer()
801 ->get('doctrine.orm.entity_manager')
802 ->getRepository('WallabagCoreBundle:Entry')
803 ->findOneByUser($this->getLoggedInUserId());
804
805 // no uuid
806 $client->request('GET', '/share/'.$content->getUuid());
807 $this->assertEquals(404, $client->getResponse()->getStatusCode());
808
809 // generating the uuid
810 $client->request('GET', '/share/'.$content->getId());
811 $this->assertEquals(302, $client->getResponse()->getStatusCode());
812
813 // follow link with uuid
814 $crawler = $client->followRedirect();
815 $this->assertEquals(200, $client->getResponse()->getStatusCode());
816 $this->assertContains('max-age=25200', $client->getResponse()->headers->get('cache-control'));
817 $this->assertContains('public', $client->getResponse()->headers->get('cache-control'));
818 $this->assertContains('s-maxage=25200', $client->getResponse()->headers->get('cache-control'));
819 $this->assertNotContains('no-cache', $client->getResponse()->headers->get('cache-control'));
820 $this->assertContains('og:title', $client->getResponse()->getContent());
821 $this->assertContains('og:type', $client->getResponse()->getContent());
822 $this->assertContains('og:url', $client->getResponse()->getContent());
823 $this->assertContains('og:image', $client->getResponse()->getContent());
824
825 // sharing is now disabled
826 $client->getContainer()->get('craue_config')->set('share_public', 0);
827 $client->request('GET', '/share/'.$content->getUuid());
828 $this->assertEquals(404, $client->getResponse()->getStatusCode());
829
830 $client->request('GET', '/view/'.$content->getId());
831 $this->assertContains('no-cache', $client->getResponse()->headers->get('cache-control'));
832
833 // removing the share
834 $client->request('GET', '/share/delete/'.$content->getId());
835 $this->assertEquals(302, $client->getResponse()->getStatusCode());
836
837 // share is now disable
838 $client->request('GET', '/share/'.$content->getUuid());
839 $this->assertEquals(404, $client->getResponse()->getStatusCode());
840 }
841 }