]> git.immae.eu Git - github/wallabag/wallabag.git/blame - tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php
Changed uuid type in database
[github/wallabag/wallabag.git] / tests / Wallabag / CoreBundle / Controller / EntryControllerTest.php
CommitLineData
93fd4692
NL
1<?php
2
23634d5d 3namespace Tests\Wallabag\CoreBundle\Controller;
93fd4692 4
23634d5d 5use Tests\Wallabag\CoreBundle\WallabagCoreTestCase;
65cd8a4a 6use Wallabag\CoreBundle\Entity\Config;
2863bf2a 7use Wallabag\CoreBundle\Entity\Entry;
93fd4692 8
769e19dc 9class EntryControllerTest extends WallabagCoreTestCase
93fd4692 10{
02d17813
JB
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';
12
3b815d2d
J
13 public function testLogin()
14 {
15 $client = $this->getClient();
16
eb3bd7ef 17 $client->request('GET', '/new');
3b815d2d
J
18
19 $this->assertEquals(302, $client->getResponse()->getStatusCode());
20 $this->assertContains('login', $client->getResponse()->headers->get('location'));
21 }
22
5c072d2b
NL
23 public function testQuickstart()
24 {
25 $this->logInAs('empty');
26 $client = $this->getClient();
27
28 $client->request('GET', '/unread/list');
4f9cf232 29 $crawler = $client->followRedirect();
5c072d2b
NL
30
31 $this->assertEquals(200, $client->getResponse()->getStatusCode());
4094ea47 32 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
24ad330b 33 $this->assertContains('quickstart.intro.title', $body[0]);
5c072d2b
NL
34
35 // Test if quickstart is disabled when user has 1 entry
36 $crawler = $client->request('GET', '/new');
37
38 $this->assertEquals(200, $client->getResponse()->getStatusCode());
39
0d42217e 40 $form = $crawler->filter('form[name=entry]')->form();
5c072d2b 41
4094ea47 42 $data = [
78833672 43 'entry[url]' => $this->url,
4094ea47 44 ];
5c072d2b
NL
45
46 $client->submit($form, $data);
47 $this->assertEquals(302, $client->getResponse()->getStatusCode());
48 $client->followRedirect();
49
4f9cf232 50 $crawler = $client->request('GET', '/unread/list');
4094ea47 51 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
4f9cf232 52 $this->assertContains('entry.list.number_on_the_page', $body[0]);
5c072d2b
NL
53 }
54
9c0c8820 55 public function testGetNew()
93fd4692 56 {
eb3bd7ef 57 $this->logInAs('admin');
3b815d2d 58 $client = $this->getClient();
93fd4692 59
aa6e27cf 60 $crawler = $client->request('GET', '/new');
93fd4692
NL
61
62 $this->assertEquals(200, $client->getResponse()->getStatusCode());
9c0c8820
J
63
64 $this->assertCount(1, $crawler->filter('input[type=url]'));
0d42217e 65 $this->assertCount(1, $crawler->filter('form[name=entry]'));
9c0c8820
J
66 }
67
880a0e1c
NL
68 public function testPostNewViaBookmarklet()
69 {
70 $this->logInAs('admin');
71 $client = $this->getClient();
72
73 $crawler = $client->request('GET', '/');
74
75 $this->assertCount(4, $crawler->filter('div[class=entry]'));
76
77 // Good URL
4094ea47 78 $client->request('GET', '/bookmarklet', ['url' => $this->url]);
880a0e1c 79 $this->assertEquals(302, $client->getResponse()->getStatusCode());
5c072d2b 80 $client->followRedirect();
880a0e1c
NL
81 $crawler = $client->request('GET', '/');
82 $this->assertCount(5, $crawler->filter('div[class=entry]'));
83
84 $em = $client->getContainer()
85 ->get('doctrine.orm.entity_manager');
86 $entry = $em
87 ->getRepository('WallabagCoreBundle:Entry')
78833672 88 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
880a0e1c
NL
89 $em->remove($entry);
90 $em->flush();
91 }
92
9c0c8820
J
93 public function testPostNewEmpty()
94 {
eb3bd7ef 95 $this->logInAs('admin');
3b815d2d 96 $client = $this->getClient();
9c0c8820
J
97
98 $crawler = $client->request('GET', '/new');
99
100 $this->assertEquals(200, $client->getResponse()->getStatusCode());
101
0d42217e 102 $form = $crawler->filter('form[name=entry]')->form();
9c0c8820
J
103
104 $crawler = $client->submit($form);
105
106 $this->assertEquals(200, $client->getResponse()->getStatusCode());
4094ea47 107 $this->assertCount(1, $alert = $crawler->filter('form ul li')->extract(['_text']));
9c0c8820
J
108 $this->assertEquals('This value should not be blank.', $alert[0]);
109 }
110
8a493541 111 /**
75c48e3a 112 * This test will require an internet connection.
8a493541 113 */
9c0c8820
J
114 public function testPostNewOk()
115 {
eb3bd7ef 116 $this->logInAs('admin');
3b815d2d 117 $client = $this->getClient();
9c0c8820
J
118
119 $crawler = $client->request('GET', '/new');
120
121 $this->assertEquals(200, $client->getResponse()->getStatusCode());
122
0d42217e 123 $form = $crawler->filter('form[name=entry]')->form();
9c0c8820 124
4094ea47 125 $data = [
02d17813 126 'entry[url]' => $this->url,
4094ea47 127 ];
9c0c8820
J
128
129 $client->submit($form, $data);
130
131 $this->assertEquals(302, $client->getResponse()->getStatusCode());
132
a0d6ccc5
JB
133 $content = $client->getContainer()
134 ->get('doctrine.orm.entity_manager')
135 ->getRepository('WallabagCoreBundle:Entry')
136 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
137
138 $this->assertInstanceOf('Wallabag\CoreBundle\Entity\Entry', $content);
139 $this->assertEquals($this->url, $content->getUrl());
140 $this->assertContains('Google', $content->getTitle());
141 }
9c0c8820 142
a0d6ccc5
JB
143 public function testPostNewOkUrlExist()
144 {
145 $this->logInAs('admin');
146 $client = $this->getClient();
147
148 $crawler = $client->request('GET', '/new');
149
150 $this->assertEquals(200, $client->getResponse()->getStatusCode());
151
0d42217e 152 $form = $crawler->filter('form[name=entry]')->form();
a0d6ccc5 153
4094ea47 154 $data = [
a0d6ccc5 155 'entry[url]' => $this->url,
4094ea47 156 ];
a0d6ccc5
JB
157
158 $client->submit($form, $data);
159
160 $this->assertEquals(302, $client->getResponse()->getStatusCode());
161 $this->assertContains('/view/', $client->getResponse()->getTargetUrl());
9c0c8820
J
162 }
163
19ca0b2f
JB
164 public function testPostNewOkUrlExistWithAccent()
165 {
166 $this->logInAs('admin');
167 $client = $this->getClient();
168
169 $url = 'http://www.aritylabs.com/post/106091708292/des-contr%C3%B4leurs-optionnels-gr%C3%A2ce-%C3%A0-constmissing';
170
171 $crawler = $client->request('GET', '/new');
172
173 $this->assertEquals(200, $client->getResponse()->getStatusCode());
174
175 $form = $crawler->filter('form[name=entry]')->form();
176
177 $data = [
178 'entry[url]' => $url,
179 ];
180
181 $client->submit($form, $data);
182
183 $crawler = $client->request('GET', '/new');
184
185 $this->assertEquals(200, $client->getResponse()->getStatusCode());
186
187 $form = $crawler->filter('form[name=entry]')->form();
188
189 $data = [
190 'entry[url]' => $url,
191 ];
a0d6ccc5
JB
192
193 $client->submit($form, $data);
194
195 $this->assertEquals(302, $client->getResponse()->getStatusCode());
196 $this->assertContains('/view/', $client->getResponse()->getTargetUrl());
d6d3fb6e
JB
197
198 $em = $client->getContainer()
199 ->get('doctrine.orm.entity_manager');
200 $entry = $em
201 ->getRepository('WallabagCoreBundle:Entry')
202 ->findOneByUrl(urldecode($url));
203
204 $em->remove($entry);
205 $em->flush();
9c0c8820
J
206 }
207
958671a7
KG
208 /**
209 * This test will require an internet connection.
210 */
3be04745 211 public function testPostNewThatWillBeTagged()
958671a7
KG
212 {
213 $this->logInAs('admin');
214 $client = $this->getClient();
215
216 $crawler = $client->request('GET', '/new');
217
218 $this->assertEquals(200, $client->getResponse()->getStatusCode());
219
0d42217e 220 $form = $crawler->filter('form[name=entry]')->form();
958671a7 221
4094ea47 222 $data = [
958671a7 223 'entry[url]' => $url = 'https://github.com/wallabag/wallabag',
4094ea47 224 ];
958671a7
KG
225
226 $client->submit($form, $data);
227
228 $this->assertEquals(302, $client->getResponse()->getStatusCode());
3be04745 229 $this->assertContains('/', $client->getResponse()->getTargetUrl());
958671a7
KG
230
231 $em = $client->getContainer()
232 ->get('doctrine.orm.entity_manager');
233 $entry = $em
234 ->getRepository('WallabagCoreBundle:Entry')
235 ->findOneByUrl($url);
69edb774
KG
236 $tags = $entry->getTags();
237
238 $this->assertCount(1, $tags);
239 $this->assertEquals('wallabag', $tags[0]->getLabel());
958671a7
KG
240
241 $em->remove($entry);
242 $em->flush();
3be04745
JB
243
244 // and now re-submit it to test the cascade persistence for tags after entry removal
245 // related https://github.com/wallabag/wallabag/issues/2121
246 $crawler = $client->request('GET', '/new');
247
248 $this->assertEquals(200, $client->getResponse()->getStatusCode());
249
250 $form = $crawler->filter('form[name=entry]')->form();
251
252 $data = [
253 'entry[url]' => $url = 'https://github.com/wallabag/wallabag/tree/master',
254 ];
255
256 $client->submit($form, $data);
257
258 $this->assertEquals(302, $client->getResponse()->getStatusCode());
259 $this->assertContains('/', $client->getResponse()->getTargetUrl());
260
261 $entry = $em
262 ->getRepository('WallabagCoreBundle:Entry')
263 ->findOneByUrl($url);
264
265 $tags = $entry->getTags();
266
267 $this->assertCount(1, $tags);
268 $this->assertEquals('wallabag', $tags[0]->getLabel());
269
270 $em->remove($entry);
271 $em->flush();
958671a7
KG
272 }
273
9c0c8820
J
274 public function testArchive()
275 {
eb3bd7ef 276 $this->logInAs('admin');
3b815d2d 277 $client = $this->getClient();
9c0c8820 278
9fb6ac83 279 $client->request('GET', '/archive/list');
9c0c8820
J
280
281 $this->assertEquals(200, $client->getResponse()->getStatusCode());
282 }
283
d5d16121
NL
284 public function testUntagged()
285 {
286 $this->logInAs('admin');
287 $client = $this->getClient();
288
289 $client->request('GET', '/untagged/list');
290
291 $this->assertEquals(200, $client->getResponse()->getStatusCode());
292 }
293
9c0c8820
J
294 public function testStarred()
295 {
eb3bd7ef 296 $this->logInAs('admin');
3b815d2d 297 $client = $this->getClient();
9c0c8820 298
9fb6ac83 299 $client->request('GET', '/starred/list');
9c0c8820
J
300
301 $this->assertEquals(200, $client->getResponse()->getStatusCode());
302 }
303
671a2b88
ML
304 public function testRangeException()
305 {
306 $this->logInAs('admin');
307 $client = $this->getClient();
308
309 $client->request('GET', '/all/list/900');
310
1880da74
NL
311 $this->assertEquals(302, $client->getResponse()->getStatusCode());
312 $this->assertEquals('/all/list', $client->getResponse()->getTargetUrl());
671a2b88
ML
313 }
314
8a493541
JB
315 /**
316 * @depends testPostNewOk
317 */
9c0c8820
J
318 public function testView()
319 {
eb3bd7ef 320 $this->logInAs('admin');
3b815d2d 321 $client = $this->getClient();
9c0c8820
J
322
323 $content = $client->getContainer()
324 ->get('doctrine.orm.entity_manager')
325 ->getRepository('WallabagCoreBundle:Entry')
78833672 326 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
9c0c8820 327
4f9cf232 328 $crawler = $client->request('GET', '/view/'.$content->getId());
9c0c8820
J
329
330 $this->assertEquals(200, $client->getResponse()->getStatusCode());
4094ea47 331 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
4f9cf232 332 $this->assertContains($content->getTitle(), $body[0]);
93fd4692 333 }
eb3bd7ef 334
831b02aa
JB
335 /**
336 * @depends testPostNewOk
337 *
338 * This test will require an internet connection.
339 */
340 public function testReload()
341 {
342 $this->logInAs('admin');
343 $client = $this->getClient();
344
ac8cf632
JB
345 $em = $client->getContainer()
346 ->get('doctrine.orm.entity_manager');
347
348 $content = $em
831b02aa 349 ->getRepository('WallabagCoreBundle:Entry')
78833672 350 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
831b02aa
JB
351
352 // empty content
353 $content->setContent('');
ac8cf632
JB
354 $em->persist($content);
355 $em->flush();
831b02aa
JB
356
357 $client->request('GET', '/reload/'.$content->getId());
358
359 $this->assertEquals(302, $client->getResponse()->getStatusCode());
360
ac8cf632 361 $content = $em
831b02aa 362 ->getRepository('WallabagCoreBundle:Entry')
2297d60f 363 ->find($content->getId());
831b02aa
JB
364
365 $this->assertNotEmpty($content->getContent());
366 }
367
2297d60f
JB
368 /**
369 * @depends testPostNewOk
2297d60f
JB
370 */
371 public function testReloadWithFetchingFailed()
372 {
373 $this->logInAs('admin');
374 $client = $this->getClient();
375
376 $em = $client->getContainer()
377 ->get('doctrine.orm.entity_manager');
378
379 $content = $em
380 ->getRepository('WallabagCoreBundle:Entry')
381 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
382
383 // put a known failed url
384 $content->setUrl('http://0.0.0.0/failed.html');
385 $em->persist($content);
386 $em->flush();
387
388 $client->request('GET', '/reload/'.$content->getId());
389
390 $this->assertEquals(302, $client->getResponse()->getStatusCode());
391
392 // force EntityManager to clear previous entity
393 // otherwise, retrieve the same entity will retrieve change from the previous request :0
394 $em->clear();
395 $newContent = $em
396 ->getRepository('WallabagCoreBundle:Entry')
397 ->find($content->getId());
398
399 $newContent->setUrl($this->url);
400 $em->persist($newContent);
401 $em->flush();
402
403 $this->assertNotEquals($client->getContainer()->getParameter('wallabag_core.fetching_error_message'), $newContent->getContent());
404 }
405
82d6d9cb
JB
406 public function testEdit()
407 {
408 $this->logInAs('admin');
409 $client = $this->getClient();
410
411 $content = $client->getContainer()
412 ->get('doctrine.orm.entity_manager')
413 ->getRepository('WallabagCoreBundle:Entry')
78833672 414 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
82d6d9cb
JB
415
416 $crawler = $client->request('GET', '/edit/'.$content->getId());
417
418 $this->assertEquals(200, $client->getResponse()->getStatusCode());
419
420 $this->assertCount(1, $crawler->filter('input[id=entry_title]'));
421 $this->assertCount(1, $crawler->filter('button[id=entry_save]'));
422 }
423
424 public function testEditUpdate()
425 {
426 $this->logInAs('admin');
427 $client = $this->getClient();
428
429 $content = $client->getContainer()
430 ->get('doctrine.orm.entity_manager')
431 ->getRepository('WallabagCoreBundle:Entry')
78833672 432 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
82d6d9cb
JB
433
434 $crawler = $client->request('GET', '/edit/'.$content->getId());
435
436 $this->assertEquals(200, $client->getResponse()->getStatusCode());
437
438 $form = $crawler->filter('button[type=submit]')->form();
439
4094ea47 440 $data = [
82d6d9cb 441 'entry[title]' => 'My updated title hehe :)',
4094ea47 442 ];
82d6d9cb
JB
443
444 $client->submit($form, $data);
445
446 $this->assertEquals(302, $client->getResponse()->getStatusCode());
447
448 $crawler = $client->followRedirect();
449
4094ea47 450 $this->assertGreaterThan(1, $alert = $crawler->filter('div[id=article] h1')->extract(['_text']));
82d6d9cb
JB
451 $this->assertContains('My updated title hehe :)', $alert[0]);
452 }
453
eb3bd7ef
J
454 public function testToggleArchive()
455 {
456 $this->logInAs('admin');
457 $client = $this->getClient();
458
459 $content = $client->getContainer()
460 ->get('doctrine.orm.entity_manager')
461 ->getRepository('WallabagCoreBundle:Entry')
78833672 462 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
eb3bd7ef
J
463
464 $client->request('GET', '/archive/'.$content->getId());
465
466 $this->assertEquals(302, $client->getResponse()->getStatusCode());
467
468 $res = $client->getContainer()
469 ->get('doctrine.orm.entity_manager')
470 ->getRepository('WallabagCoreBundle:Entry')
159986c4 471 ->find($content->getId());
eb3bd7ef
J
472
473 $this->assertEquals($res->isArchived(), true);
474 }
475
476 public function testToggleStar()
477 {
478 $this->logInAs('admin');
479 $client = $this->getClient();
480
481 $content = $client->getContainer()
482 ->get('doctrine.orm.entity_manager')
483 ->getRepository('WallabagCoreBundle:Entry')
78833672 484 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
eb3bd7ef
J
485
486 $client->request('GET', '/star/'.$content->getId());
487
488 $this->assertEquals(302, $client->getResponse()->getStatusCode());
489
490 $res = $client->getContainer()
491 ->get('doctrine.orm.entity_manager')
492 ->getRepository('WallabagCoreBundle:Entry')
493 ->findOneById($content->getId());
494
495 $this->assertEquals($res->isStarred(), true);
496 }
497
498 public function testDelete()
499 {
500 $this->logInAs('admin');
501 $client = $this->getClient();
502
503 $content = $client->getContainer()
504 ->get('doctrine.orm.entity_manager')
505 ->getRepository('WallabagCoreBundle:Entry')
78833672 506 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
eb3bd7ef
J
507
508 $client->request('GET', '/delete/'.$content->getId());
509
510 $this->assertEquals(302, $client->getResponse()->getStatusCode());
511
1d147791 512 $client->request('GET', '/delete/'.$content->getId());
eb3bd7ef 513
1d147791 514 $this->assertEquals(404, $client->getResponse()->getStatusCode());
eb3bd7ef 515 }
3d2b2d62 516
2863bf2a
JB
517 /**
518 * It will create a new entry.
519 * Browse to it.
520 * Then remove it.
521 *
522 * And it'll check that user won't be redirected to the view page of the content when it had been removed
523 */
524 public function testViewAndDelete()
525 {
526 $this->logInAs('admin');
527 $client = $this->getClient();
528
ac8cf632
JB
529 $em = $client->getContainer()
530 ->get('doctrine.orm.entity_manager');
531
2863bf2a 532 // add a new content to be removed later
ac8cf632 533 $user = $em
2863bf2a
JB
534 ->getRepository('WallabagUserBundle:User')
535 ->findOneByUserName('admin');
536
537 $content = new Entry($user);
538 $content->setUrl('http://1.1.1.1/entry');
539 $content->setReadingTime(12);
540 $content->setDomainName('domain.io');
541 $content->setMimetype('text/html');
542 $content->setTitle('test title entry');
543 $content->setContent('This is my content /o/');
544 $content->setArchived(true);
545 $content->setLanguage('fr');
546
ac8cf632
JB
547 $em->persist($content);
548 $em->flush();
2863bf2a
JB
549
550 $client->request('GET', '/view/'.$content->getId());
551 $this->assertEquals(200, $client->getResponse()->getStatusCode());
552
553 $client->request('GET', '/delete/'.$content->getId());
554 $this->assertEquals(302, $client->getResponse()->getStatusCode());
555
556 $client->followRedirect();
557 $this->assertEquals(200, $client->getResponse()->getStatusCode());
558 }
559
3d2b2d62
J
560 public function testViewOtherUserEntry()
561 {
159986c4 562 $this->logInAs('admin');
3d2b2d62
J
563 $client = $this->getClient();
564
565 $content = $client->getContainer()
566 ->get('doctrine.orm.entity_manager')
567 ->getRepository('WallabagCoreBundle:Entry')
159986c4 568 ->findOneByUsernameAndNotArchived('bob');
3d2b2d62 569
159986c4 570 $client->request('GET', '/view/'.$content->getId());
3d2b2d62
J
571
572 $this->assertEquals(403, $client->getResponse()->getStatusCode());
573 }
26864574 574
3f357ee2 575 public function testFilterOnReadingTime()
26864574
NL
576 {
577 $this->logInAs('admin');
578 $client = $this->getClient();
579
580 $crawler = $client->request('GET', '/unread/list');
581
582 $form = $crawler->filter('button[id=submit-filter]')->form();
583
4094ea47 584 $data = [
d6a9e139
NL
585 'entry_filter[readingTime][right_number]' => 22,
586 'entry_filter[readingTime][left_number]' => 22,
4094ea47 587 ];
26864574
NL
588
589 $crawler = $client->submit($form, $data);
590
591 $this->assertCount(1, $crawler->filter('div[class=entry]'));
592 }
ab2c93c7 593
95859e54
JB
594 public function testFilterOnReadingTimeOnlyUpper()
595 {
596 $this->logInAs('admin');
597 $client = $this->getClient();
598
599 $crawler = $client->request('GET', '/unread/list');
600
601 $form = $crawler->filter('button[id=submit-filter]')->form();
602
603 $data = [
604 'entry_filter[readingTime][right_number]' => 22,
605 ];
606
607 $crawler = $client->submit($form, $data);
608
609 $this->assertCount(2, $crawler->filter('div[class=entry]'));
610 }
611
612 public function testFilterOnReadingTimeOnlyLower()
613 {
614 $this->logInAs('admin');
615 $client = $this->getClient();
616
617 $crawler = $client->request('GET', '/unread/list');
618
619 $form = $crawler->filter('button[id=submit-filter]')->form();
620
621 $data = [
622 'entry_filter[readingTime][left_number]' => 22,
623 ];
624
625 $crawler = $client->submit($form, $data);
626
627 $this->assertCount(4, $crawler->filter('div[class=entry]'));
628 }
629
30334567
DB
630 public function testFilterOnUnreadStatus()
631 {
632 $this->logInAs('admin');
633 $client = $this->getClient();
634
635 $crawler = $client->request('GET', '/all/list');
636
637 $form = $crawler->filter('button[id=submit-filter]')->form();
638
639 $data = [
640 'entry_filter[isUnread]' => true,
641 ];
642
643 $crawler = $client->submit($form, $data);
644
645 $this->assertCount(4, $crawler->filter('div[class=entry]'));
646 }
647
3f357ee2
NL
648 public function testFilterOnCreationDate()
649 {
650 $this->logInAs('admin');
651 $client = $this->getClient();
652
653 $crawler = $client->request('GET', '/unread/list');
654
655 $form = $crawler->filter('button[id=submit-filter]')->form();
656
4094ea47 657 $data = [
3f357ee2 658 'entry_filter[createdAt][left_date]' => date('d/m/Y'),
8ce32af6 659 'entry_filter[createdAt][right_date]' => date('d/m/Y', strtotime('+1 day')),
4094ea47 660 ];
3f357ee2
NL
661
662 $crawler = $client->submit($form, $data);
663
e1779760 664 $this->assertCount(5, $crawler->filter('div[class=entry]'));
3f357ee2 665
4094ea47 666 $data = [
f90af145
JB
667 'entry_filter[createdAt][left_date]' => date('d/m/Y'),
668 'entry_filter[createdAt][right_date]' => date('d/m/Y'),
4094ea47 669 ];
f90af145
JB
670
671 $crawler = $client->submit($form, $data);
672
673 $this->assertCount(5, $crawler->filter('div[class=entry]'));
674
4094ea47 675 $data = [
3f357ee2 676 'entry_filter[createdAt][left_date]' => '01/01/1970',
8ce32af6 677 'entry_filter[createdAt][right_date]' => '01/01/1970',
4094ea47 678 ];
3f357ee2
NL
679
680 $crawler = $client->submit($form, $data);
681
682 $this->assertCount(0, $crawler->filter('div[class=entry]'));
3f357ee2
NL
683 }
684
ab2c93c7
NL
685 public function testPaginationWithFilter()
686 {
687 $this->logInAs('admin');
688 $client = $this->getClient();
ab2c93c7
NL
689 $crawler = $client->request('GET', '/config');
690
691 $form = $crawler->filter('button[id=config_save]')->form();
692
4094ea47 693 $data = [
ab2c93c7 694 'config[items_per_page]' => '1',
4094ea47 695 ];
ab2c93c7
NL
696
697 $client->submit($form, $data);
698
76cd8dbb 699 $parameters = '?entry_filter%5BreadingTime%5D%5Bleft_number%5D=&entry_filter%5BreadingTime%5D%5Bright_number%5D=';
ab2c93c7 700
5c072d2b 701 $client->request('GET', 'unread/list'.$parameters);
ab2c93c7
NL
702
703 $this->assertContains($parameters, $client->getResponse()->getContent());
e1779760
NL
704
705 // reset pagination
706 $crawler = $client->request('GET', '/config');
707 $form = $crawler->filter('button[id=config_save]')->form();
4094ea47 708 $data = [
e1779760 709 'config[items_per_page]' => '12',
4094ea47 710 ];
e1779760 711 $client->submit($form, $data);
ab2c93c7 712 }
443cecd2
NL
713
714 public function testFilterOnDomainName()
715 {
716 $this->logInAs('admin');
717 $client = $this->getClient();
718
719 $crawler = $client->request('GET', '/unread/list');
720 $form = $crawler->filter('button[id=submit-filter]')->form();
4094ea47 721 $data = [
02d17813 722 'entry_filter[domainName]' => 'domain',
4094ea47 723 ];
443cecd2
NL
724
725 $crawler = $client->submit($form, $data);
02d17813 726 $this->assertCount(5, $crawler->filter('div[class=entry]'));
443cecd2 727
00fc2b44
KD
728 $crawler = $client->request('GET', '/unread/list');
729 $form = $crawler->filter('button[id=submit-filter]')->form();
730 $data = [
731 'entry_filter[domainName]' => 'dOmain',
732 ];
733
734 $crawler = $client->submit($form, $data);
735 $this->assertCount(5, $crawler->filter('div[class=entry]'));
736
443cecd2 737 $form = $crawler->filter('button[id=submit-filter]')->form();
4094ea47 738 $data = [
8ce32af6 739 'entry_filter[domainName]' => 'wallabag',
4094ea47 740 ];
443cecd2
NL
741
742 $crawler = $client->submit($form, $data);
743 $this->assertCount(0, $crawler->filter('div[class=entry]'));
744 }
e1779760
NL
745
746 public function testFilterOnStatus()
747 {
748 $this->logInAs('admin');
749 $client = $this->getClient();
750
751 $crawler = $client->request('GET', '/unread/list');
752 $form = $crawler->filter('button[id=submit-filter]')->form();
753 $form['entry_filter[isArchived]']->tick();
754 $form['entry_filter[isStarred]']->untick();
755
756 $crawler = $client->submit($form);
159986c4 757 $this->assertCount(1, $crawler->filter('div[class=entry]'));
e1779760
NL
758
759 $form = $crawler->filter('button[id=submit-filter]')->form();
760 $form['entry_filter[isArchived]']->untick();
761 $form['entry_filter[isStarred]']->tick();
762
763 $crawler = $client->submit($form);
02d17813 764 $this->assertCount(1, $crawler->filter('div[class=entry]'));
e1779760 765 }
497e0cad
NL
766
767 public function testPreviewPictureFilter()
768 {
769 $this->logInAs('admin');
770 $client = $this->getClient();
771
772 $crawler = $client->request('GET', '/unread/list');
773 $form = $crawler->filter('button[id=submit-filter]')->form();
774 $form['entry_filter[previewPicture]']->tick();
775
776 $crawler = $client->submit($form);
777 $this->assertCount(1, $crawler->filter('div[class=entry]'));
778 }
d4ebe5c5
JB
779
780 public function testFilterOnLanguage()
781 {
782 $this->logInAs('admin');
783 $client = $this->getClient();
784
785 $crawler = $client->request('GET', '/unread/list');
786 $form = $crawler->filter('button[id=submit-filter]')->form();
4094ea47 787 $data = [
159986c4 788 'entry_filter[language]' => 'fr',
4094ea47 789 ];
d4ebe5c5
JB
790
791 $crawler = $client->submit($form, $data);
02d17813 792 $this->assertCount(2, $crawler->filter('div[class=entry]'));
d4ebe5c5
JB
793
794 $form = $crawler->filter('button[id=submit-filter]')->form();
4094ea47 795 $data = [
d4ebe5c5 796 'entry_filter[language]' => 'en',
4094ea47 797 ];
d4ebe5c5
JB
798
799 $crawler = $client->submit($form, $data);
800 $this->assertCount(2, $crawler->filter('div[class=entry]'));
801 }
a7e2218e 802
21d82c3c 803 public function testShareEntryPublicly()
a7e2218e
NL
804 {
805 $this->logInAs('admin');
806 $client = $this->getClient();
807
808 $content = $client->getContainer()
809 ->get('doctrine.orm.entity_manager')
810 ->getRepository('WallabagCoreBundle:Entry')
811 ->findOneByUser($this->getLoggedInUserId());
812
eddda878 813 // no uuid
a7e2218e 814 $client->request('GET', '/share/'.$content->getUuid());
eddda878
JB
815 $this->assertEquals(404, $client->getResponse()->getStatusCode());
816
817 // generating the uuid
818 $client->request('GET', '/share/'.$content->getId());
819 $this->assertEquals(302, $client->getResponse()->getStatusCode());
820
821 // follow link with uuid
822 $crawler = $client->followRedirect();
823 $this->assertEquals(200, $client->getResponse()->getStatusCode());
824 $this->assertContains('max-age=25200', $client->getResponse()->headers->get('cache-control'));
825 $this->assertContains('public', $client->getResponse()->headers->get('cache-control'));
826 $this->assertContains('s-maxage=25200', $client->getResponse()->headers->get('cache-control'));
a7e2218e 827 $this->assertNotContains('no-cache', $client->getResponse()->headers->get('cache-control'));
21d82c3c
NL
828 $this->assertContains('og:title', $client->getResponse()->getContent());
829 $this->assertContains('og:type', $client->getResponse()->getContent());
830 $this->assertContains('og:url', $client->getResponse()->getContent());
d5c45d52 831 $this->assertContains('og:image', $client->getResponse()->getContent());
a7e2218e 832
eddda878
JB
833 // sharing is now disabled
834 $client->getContainer()->get('craue_config')->set('share_public', 0);
835 $client->request('GET', '/share/'.$content->getUuid());
836 $this->assertEquals(404, $client->getResponse()->getStatusCode());
837
a7e2218e
NL
838 $client->request('GET', '/view/'.$content->getId());
839 $this->assertContains('no-cache', $client->getResponse()->headers->get('cache-control'));
eddda878
JB
840
841 // removing the share
842 $client->request('GET', '/share/delete/'.$content->getId());
843 $this->assertEquals(302, $client->getResponse()->getStatusCode());
844
845 // share is now disable
846 $client->request('GET', '/share/'.$content->getUuid());
847 $this->assertEquals(404, $client->getResponse()->getStatusCode());
a7e2218e 848 }
d1495dd0
JB
849
850 public function testNewEntryWithDownloadImagesEnabled()
851 {
852 $this->logInAs('admin');
853 $client = $this->getClient();
854
855 $url = 'http://www.20minutes.fr/montpellier/1952003-20161030-video-car-tombe-panne-rugbymen-perpignan-improvisent-melee-route';
856 $client->getContainer()->get('craue_config')->set('download_images_enabled', 1);
857
858 $crawler = $client->request('GET', '/new');
859
860 $this->assertEquals(200, $client->getResponse()->getStatusCode());
861
862 $form = $crawler->filter('form[name=entry]')->form();
863
864 $data = [
865 'entry[url]' => $url,
866 ];
867
868 $client->submit($form, $data);
869
870 $this->assertEquals(302, $client->getResponse()->getStatusCode());
871
872 $em = $client->getContainer()
873 ->get('doctrine.orm.entity_manager');
874
875 $entry = $em
876 ->getRepository('WallabagCoreBundle:Entry')
877 ->findByUrlAndUserId($url, $this->getLoggedInUserId());
878
879 $this->assertInstanceOf('Wallabag\CoreBundle\Entity\Entry', $entry);
880 $this->assertEquals($url, $entry->getUrl());
881 $this->assertContains('Perpignan', $entry->getTitle());
e0597476 882 $this->assertContains('/d9bc0fcd.jpeg', $entry->getContent());
d1495dd0 883
e0597476
JB
884 $client->getContainer()->get('craue_config')->set('download_images_enabled', 0);
885 }
886
887 /**
888 * @depends testNewEntryWithDownloadImagesEnabled
889 */
890 public function testRemoveEntryWithDownloadImagesEnabled()
891 {
892 $this->logInAs('admin');
893 $client = $this->getClient();
894
895 $url = 'http://www.20minutes.fr/montpellier/1952003-20161030-video-car-tombe-panne-rugbymen-perpignan-improvisent-melee-route';
896 $client->getContainer()->get('craue_config')->set('download_images_enabled', 1);
897
898 $content = $client->getContainer()
899 ->get('doctrine.orm.entity_manager')
900 ->getRepository('WallabagCoreBundle:Entry')
901 ->findByUrlAndUserId($url, $this->getLoggedInUserId());
902
903 $client->request('GET', '/delete/'.$content->getId());
904
905 $this->assertEquals(302, $client->getResponse()->getStatusCode());
d1495dd0
JB
906
907 $client->getContainer()->get('craue_config')->set('download_images_enabled', 0);
908 }
65cd8a4a
NL
909
910 public function testRedirectToHomepage()
911 {
912 $this->logInAs('empty');
913 $client = $this->getClient();
914
915 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
916 $user = $em
917 ->getRepository('WallabagUserBundle:User')
918 ->find($this->getLoggedInUserId());
919
920 if (!$user) {
921 $this->markTestSkipped('No user found in db.');
922 }
923
924 // Redirect to homepage
925 $config = $user->getConfig();
926 $config->setActionMarkAsRead(Config::REDIRECT_TO_HOMEPAGE);
927 $em->persist($config);
928 $em->flush();
929
930 $content = $client->getContainer()
931 ->get('doctrine.orm.entity_manager')
932 ->getRepository('WallabagCoreBundle:Entry')
933 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
934
935 $client->request('GET', '/view/'.$content->getId());
936 $client->request('GET', '/archive/'.$content->getId());
937
938 $this->assertEquals(302, $client->getResponse()->getStatusCode());
939 $this->assertEquals('/', $client->getResponse()->headers->get('location'));
940 }
941
942 public function testRedirectToCurrentPage()
943 {
944 $this->logInAs('empty');
945 $client = $this->getClient();
946
947 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
948 $user = $em
949 ->getRepository('WallabagUserBundle:User')
950 ->find($this->getLoggedInUserId());
951
952 if (!$user) {
953 $this->markTestSkipped('No user found in db.');
954 }
955
956 // Redirect to current page
957 $config = $user->getConfig();
958 $config->setActionMarkAsRead(Config::REDIRECT_TO_CURRENT_PAGE);
959 $em->persist($config);
960 $em->flush();
961
962 $content = $client->getContainer()
963 ->get('doctrine.orm.entity_manager')
964 ->getRepository('WallabagCoreBundle:Entry')
965 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
966
967 $client->request('GET', '/view/'.$content->getId());
968 $client->request('GET', '/archive/'.$content->getId());
969
970 $this->assertEquals(302, $client->getResponse()->getStatusCode());
971 $this->assertContains('/view/'.$content->getId(), $client->getResponse()->headers->get('location'));
972 }
10b35097
NL
973
974 public function testFilterOnHttpStatus()
975 {
976 $this->logInAs('admin');
977 $client = $this->getClient();
978
979 $crawler = $client->request('GET', '/new');
980 $form = $crawler->filter('form[name=entry]')->form();
981
982 $data = [
983 'entry[url]' => 'http://www.lemonde.fr/incorrect-url/',
984 ];
985
986 $client->submit($form, $data);
987
988 $crawler = $client->request('GET', '/all/list');
989 $form = $crawler->filter('button[id=submit-filter]')->form();
990
991 $data = [
992 'entry_filter[httpStatus]' => 404,
993 ];
994
995 $crawler = $client->submit($form, $data);
996
997 $this->assertCount(1, $crawler->filter('div[class=entry]'));
998
999 $crawler = $client->request('GET', '/new');
1000 $form = $crawler->filter('form[name=entry]')->form();
1001
1002 $data = [
1003 'entry[url]' => 'http://www.nextinpact.com/news/101235-wallabag-alternative-libre-a-pocket-creuse-petit-a-petit-son-nid.htm',
1004 ];
1005
1006 $client->submit($form, $data);
1007
1008 $crawler = $client->request('GET', '/all/list');
1009 $form = $crawler->filter('button[id=submit-filter]')->form();
1010
1011 $data = [
1012 'entry_filter[httpStatus]' => 200,
1013 ];
1014
1015 $crawler = $client->submit($form, $data);
1016
1017 $this->assertCount(1, $crawler->filter('div[class=entry]'));
d215273c
NL
1018
1019 $crawler = $client->request('GET', '/all/list');
1020 $form = $crawler->filter('button[id=submit-filter]')->form();
1021
1022 $data = [
1023 'entry_filter[httpStatus]' => 1024,
1024 ];
1025
1026 $crawler = $client->submit($form, $data);
1027
1028 $this->assertCount(7, $crawler->filter('div[class=entry]'));
10b35097 1029 }
32f455c1
NL
1030
1031 public function testSearch()
1032 {
1033 $this->logInAs('admin');
1034 $client = $this->getClient();
1035
1036 // Search on unread list
1037 $crawler = $client->request('GET', '/unread/list');
1038
1039 $form = $crawler->filter('form[name=search]')->form();
1040 $data = [
1041 'search_entry[term]' => 'title',
1042 ];
1043
1044 $crawler = $client->submit($form, $data);
1045
995c2044 1046 $this->assertCount(5, $crawler->filter('div[class=entry]'));
32f455c1
NL
1047
1048 // Search on starred list
1049 $crawler = $client->request('GET', '/starred/list');
1050
1051 $form = $crawler->filter('form[name=search]')->form();
1052 $data = [
1053 'search_entry[term]' => 'title',
1054 ];
1055
1056 $crawler = $client->submit($form, $data);
1057
1058 $this->assertCount(1, $crawler->filter('div[class=entry]'));
1059
1060 // Added new article to test on archive list
1061 $crawler = $client->request('GET', '/new');
1062 $form = $crawler->filter('form[name=entry]')->form();
1063 $data = [
1064 'entry[url]' => $this->url,
1065 ];
1066 $client->submit($form, $data);
1067 $content = $client->getContainer()
1068 ->get('doctrine.orm.entity_manager')
1069 ->getRepository('WallabagCoreBundle:Entry')
1070 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
1071 $client->request('GET', '/archive/'.$content->getId());
1072
1073 $crawler = $client->request('GET', '/archive/list');
1074
1075 $form = $crawler->filter('form[name=search]')->form();
1076 $data = [
1077 'search_entry[term]' => 'manège',
1078 ];
1079
1080 $crawler = $client->submit($form, $data);
1081
1082 $this->assertCount(1, $crawler->filter('div[class=entry]'));
1083 $client->request('GET', '/delete/'.$content->getId());
1084
1085 // test on list of all articles
1086 $crawler = $client->request('GET', '/all/list');
1087
1088 $form = $crawler->filter('form[name=search]')->form();
1089 $data = [
995c2044 1090 'search_entry[term]' => 'wxcvbnqsdf', // a string not available in the database
32f455c1
NL
1091 ];
1092
1093 $crawler = $client->submit($form, $data);
1094
1095 $this->assertCount(0, $crawler->filter('div[class=entry]'));
1096 }
93fd4692 1097}