]> git.immae.eu Git - github/wallabag/wallabag.git/blame - tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php
Merge remote-tracking branch 'origin/master' into 2.2
[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;
2863bf2a 6use Wallabag\CoreBundle\Entity\Entry;
93fd4692 7
769e19dc 8class EntryControllerTest extends WallabagCoreTestCase
93fd4692 9{
02d17813
JB
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
3b815d2d
J
12 public function testLogin()
13 {
14 $client = $this->getClient();
15
eb3bd7ef 16 $client->request('GET', '/new');
3b815d2d
J
17
18 $this->assertEquals(302, $client->getResponse()->getStatusCode());
19 $this->assertContains('login', $client->getResponse()->headers->get('location'));
20 }
21
5c072d2b
NL
22 public function testQuickstart()
23 {
24 $this->logInAs('empty');
25 $client = $this->getClient();
26
27 $client->request('GET', '/unread/list');
4f9cf232 28 $crawler = $client->followRedirect();
5c072d2b
NL
29
30 $this->assertEquals(200, $client->getResponse()->getStatusCode());
4094ea47 31 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
24ad330b 32 $this->assertContains('quickstart.intro.title', $body[0]);
5c072d2b
NL
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
0d42217e 39 $form = $crawler->filter('form[name=entry]')->form();
5c072d2b 40
4094ea47 41 $data = [
78833672 42 'entry[url]' => $this->url,
4094ea47 43 ];
5c072d2b
NL
44
45 $client->submit($form, $data);
46 $this->assertEquals(302, $client->getResponse()->getStatusCode());
47 $client->followRedirect();
48
4f9cf232 49 $crawler = $client->request('GET', '/unread/list');
4094ea47 50 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
4f9cf232 51 $this->assertContains('entry.list.number_on_the_page', $body[0]);
5c072d2b
NL
52 }
53
9c0c8820 54 public function testGetNew()
93fd4692 55 {
eb3bd7ef 56 $this->logInAs('admin');
3b815d2d 57 $client = $this->getClient();
93fd4692 58
aa6e27cf 59 $crawler = $client->request('GET', '/new');
93fd4692
NL
60
61 $this->assertEquals(200, $client->getResponse()->getStatusCode());
9c0c8820
J
62
63 $this->assertCount(1, $crawler->filter('input[type=url]'));
0d42217e 64 $this->assertCount(1, $crawler->filter('form[name=entry]'));
9c0c8820
J
65 }
66
880a0e1c
NL
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
4094ea47 77 $client->request('GET', '/bookmarklet', ['url' => $this->url]);
880a0e1c 78 $this->assertEquals(302, $client->getResponse()->getStatusCode());
5c072d2b 79 $client->followRedirect();
880a0e1c
NL
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')
78833672 87 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
880a0e1c
NL
88 $em->remove($entry);
89 $em->flush();
90 }
91
9c0c8820
J
92 public function testPostNewEmpty()
93 {
eb3bd7ef 94 $this->logInAs('admin');
3b815d2d 95 $client = $this->getClient();
9c0c8820
J
96
97 $crawler = $client->request('GET', '/new');
98
99 $this->assertEquals(200, $client->getResponse()->getStatusCode());
100
0d42217e 101 $form = $crawler->filter('form[name=entry]')->form();
9c0c8820
J
102
103 $crawler = $client->submit($form);
104
105 $this->assertEquals(200, $client->getResponse()->getStatusCode());
4094ea47 106 $this->assertCount(1, $alert = $crawler->filter('form ul li')->extract(['_text']));
9c0c8820
J
107 $this->assertEquals('This value should not be blank.', $alert[0]);
108 }
109
8a493541 110 /**
75c48e3a 111 * This test will require an internet connection.
8a493541 112 */
9c0c8820
J
113 public function testPostNewOk()
114 {
eb3bd7ef 115 $this->logInAs('admin');
3b815d2d 116 $client = $this->getClient();
9c0c8820
J
117
118 $crawler = $client->request('GET', '/new');
119
120 $this->assertEquals(200, $client->getResponse()->getStatusCode());
121
0d42217e 122 $form = $crawler->filter('form[name=entry]')->form();
9c0c8820 123
4094ea47 124 $data = [
02d17813 125 'entry[url]' => $this->url,
4094ea47 126 ];
9c0c8820
J
127
128 $client->submit($form, $data);
129
130 $this->assertEquals(302, $client->getResponse()->getStatusCode());
131
a0d6ccc5
JB
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 }
9c0c8820 141
a0d6ccc5
JB
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
0d42217e 151 $form = $crawler->filter('form[name=entry]')->form();
a0d6ccc5 152
4094ea47 153 $data = [
a0d6ccc5 154 'entry[url]' => $this->url,
4094ea47 155 ];
a0d6ccc5
JB
156
157 $client->submit($form, $data);
158
159 $this->assertEquals(302, $client->getResponse()->getStatusCode());
160 $this->assertContains('/view/', $client->getResponse()->getTargetUrl());
9c0c8820
J
161 }
162
19ca0b2f
JB
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 ];
a0d6ccc5
JB
191
192 $client->submit($form, $data);
193
194 $this->assertEquals(302, $client->getResponse()->getStatusCode());
195 $this->assertContains('/view/', $client->getResponse()->getTargetUrl());
d6d3fb6e
JB
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();
9c0c8820
J
205 }
206
958671a7
KG
207 /**
208 * This test will require an internet connection.
209 */
3be04745 210 public function testPostNewThatWillBeTagged()
958671a7
KG
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
0d42217e 219 $form = $crawler->filter('form[name=entry]')->form();
958671a7 220
4094ea47 221 $data = [
958671a7 222 'entry[url]' => $url = 'https://github.com/wallabag/wallabag',
4094ea47 223 ];
958671a7
KG
224
225 $client->submit($form, $data);
226
227 $this->assertEquals(302, $client->getResponse()->getStatusCode());
3be04745 228 $this->assertContains('/', $client->getResponse()->getTargetUrl());
958671a7
KG
229
230 $em = $client->getContainer()
231 ->get('doctrine.orm.entity_manager');
232 $entry = $em
233 ->getRepository('WallabagCoreBundle:Entry')
234 ->findOneByUrl($url);
69edb774
KG
235 $tags = $entry->getTags();
236
237 $this->assertCount(1, $tags);
238 $this->assertEquals('wallabag', $tags[0]->getLabel());
958671a7
KG
239
240 $em->remove($entry);
241 $em->flush();
3be04745
JB
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();
958671a7
KG
271 }
272
9c0c8820
J
273 public function testArchive()
274 {
eb3bd7ef 275 $this->logInAs('admin');
3b815d2d 276 $client = $this->getClient();
9c0c8820 277
9fb6ac83 278 $client->request('GET', '/archive/list');
9c0c8820
J
279
280 $this->assertEquals(200, $client->getResponse()->getStatusCode());
281 }
282
d5d16121
NL
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
9c0c8820
J
293 public function testStarred()
294 {
eb3bd7ef 295 $this->logInAs('admin');
3b815d2d 296 $client = $this->getClient();
9c0c8820 297
9fb6ac83 298 $client->request('GET', '/starred/list');
9c0c8820
J
299
300 $this->assertEquals(200, $client->getResponse()->getStatusCode());
301 }
302
671a2b88
ML
303 public function testRangeException()
304 {
305 $this->logInAs('admin');
306 $client = $this->getClient();
307
308 $client->request('GET', '/all/list/900');
309
1880da74
NL
310 $this->assertEquals(302, $client->getResponse()->getStatusCode());
311 $this->assertEquals('/all/list', $client->getResponse()->getTargetUrl());
671a2b88
ML
312 }
313
8a493541
JB
314 /**
315 * @depends testPostNewOk
316 */
9c0c8820
J
317 public function testView()
318 {
eb3bd7ef 319 $this->logInAs('admin');
3b815d2d 320 $client = $this->getClient();
9c0c8820
J
321
322 $content = $client->getContainer()
323 ->get('doctrine.orm.entity_manager')
324 ->getRepository('WallabagCoreBundle:Entry')
78833672 325 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
9c0c8820 326
4f9cf232 327 $crawler = $client->request('GET', '/view/'.$content->getId());
9c0c8820
J
328
329 $this->assertEquals(200, $client->getResponse()->getStatusCode());
4094ea47 330 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
4f9cf232 331 $this->assertContains($content->getTitle(), $body[0]);
93fd4692 332 }
eb3bd7ef 333
831b02aa
JB
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
ac8cf632
JB
344 $em = $client->getContainer()
345 ->get('doctrine.orm.entity_manager');
346
347 $content = $em
831b02aa 348 ->getRepository('WallabagCoreBundle:Entry')
78833672 349 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
831b02aa
JB
350
351 // empty content
352 $content->setContent('');
ac8cf632
JB
353 $em->persist($content);
354 $em->flush();
831b02aa
JB
355
356 $client->request('GET', '/reload/'.$content->getId());
357
358 $this->assertEquals(302, $client->getResponse()->getStatusCode());
359
ac8cf632 360 $content = $em
831b02aa 361 ->getRepository('WallabagCoreBundle:Entry')
2297d60f 362 ->find($content->getId());
831b02aa
JB
363
364 $this->assertNotEmpty($content->getContent());
365 }
366
2297d60f
JB
367 /**
368 * @depends testPostNewOk
2297d60f
JB
369 */
370 public function testReloadWithFetchingFailed()
371 {
372 $this->logInAs('admin');
373 $client = $this->getClient();
374
375 $em = $client->getContainer()
376 ->get('doctrine.orm.entity_manager');
377
378 $content = $em
379 ->getRepository('WallabagCoreBundle:Entry')
380 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
381
382 // put a known failed url
383 $content->setUrl('http://0.0.0.0/failed.html');
384 $em->persist($content);
385 $em->flush();
386
387 $client->request('GET', '/reload/'.$content->getId());
388
389 $this->assertEquals(302, $client->getResponse()->getStatusCode());
390
391 // force EntityManager to clear previous entity
392 // otherwise, retrieve the same entity will retrieve change from the previous request :0
393 $em->clear();
394 $newContent = $em
395 ->getRepository('WallabagCoreBundle:Entry')
396 ->find($content->getId());
397
398 $newContent->setUrl($this->url);
399 $em->persist($newContent);
400 $em->flush();
401
402 $this->assertNotEquals($client->getContainer()->getParameter('wallabag_core.fetching_error_message'), $newContent->getContent());
403 }
404
82d6d9cb
JB
405 public function testEdit()
406 {
407 $this->logInAs('admin');
408 $client = $this->getClient();
409
410 $content = $client->getContainer()
411 ->get('doctrine.orm.entity_manager')
412 ->getRepository('WallabagCoreBundle:Entry')
78833672 413 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
82d6d9cb
JB
414
415 $crawler = $client->request('GET', '/edit/'.$content->getId());
416
417 $this->assertEquals(200, $client->getResponse()->getStatusCode());
418
419 $this->assertCount(1, $crawler->filter('input[id=entry_title]'));
420 $this->assertCount(1, $crawler->filter('button[id=entry_save]'));
421 }
422
423 public function testEditUpdate()
424 {
425 $this->logInAs('admin');
426 $client = $this->getClient();
427
428 $content = $client->getContainer()
429 ->get('doctrine.orm.entity_manager')
430 ->getRepository('WallabagCoreBundle:Entry')
78833672 431 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
82d6d9cb
JB
432
433 $crawler = $client->request('GET', '/edit/'.$content->getId());
434
435 $this->assertEquals(200, $client->getResponse()->getStatusCode());
436
437 $form = $crawler->filter('button[type=submit]')->form();
438
4094ea47 439 $data = [
82d6d9cb 440 'entry[title]' => 'My updated title hehe :)',
4094ea47 441 ];
82d6d9cb
JB
442
443 $client->submit($form, $data);
444
445 $this->assertEquals(302, $client->getResponse()->getStatusCode());
446
447 $crawler = $client->followRedirect();
448
4094ea47 449 $this->assertGreaterThan(1, $alert = $crawler->filter('div[id=article] h1')->extract(['_text']));
82d6d9cb
JB
450 $this->assertContains('My updated title hehe :)', $alert[0]);
451 }
452
eb3bd7ef
J
453 public function testToggleArchive()
454 {
455 $this->logInAs('admin');
456 $client = $this->getClient();
457
458 $content = $client->getContainer()
459 ->get('doctrine.orm.entity_manager')
460 ->getRepository('WallabagCoreBundle:Entry')
78833672 461 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
eb3bd7ef
J
462
463 $client->request('GET', '/archive/'.$content->getId());
464
465 $this->assertEquals(302, $client->getResponse()->getStatusCode());
466
467 $res = $client->getContainer()
468 ->get('doctrine.orm.entity_manager')
469 ->getRepository('WallabagCoreBundle:Entry')
159986c4 470 ->find($content->getId());
eb3bd7ef
J
471
472 $this->assertEquals($res->isArchived(), true);
473 }
474
475 public function testToggleStar()
476 {
477 $this->logInAs('admin');
478 $client = $this->getClient();
479
480 $content = $client->getContainer()
481 ->get('doctrine.orm.entity_manager')
482 ->getRepository('WallabagCoreBundle:Entry')
78833672 483 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
eb3bd7ef
J
484
485 $client->request('GET', '/star/'.$content->getId());
486
487 $this->assertEquals(302, $client->getResponse()->getStatusCode());
488
489 $res = $client->getContainer()
490 ->get('doctrine.orm.entity_manager')
491 ->getRepository('WallabagCoreBundle:Entry')
492 ->findOneById($content->getId());
493
494 $this->assertEquals($res->isStarred(), true);
495 }
496
497 public function testDelete()
498 {
499 $this->logInAs('admin');
500 $client = $this->getClient();
501
502 $content = $client->getContainer()
503 ->get('doctrine.orm.entity_manager')
504 ->getRepository('WallabagCoreBundle:Entry')
78833672 505 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
eb3bd7ef
J
506
507 $client->request('GET', '/delete/'.$content->getId());
508
509 $this->assertEquals(302, $client->getResponse()->getStatusCode());
510
1d147791 511 $client->request('GET', '/delete/'.$content->getId());
eb3bd7ef 512
1d147791 513 $this->assertEquals(404, $client->getResponse()->getStatusCode());
eb3bd7ef 514 }
3d2b2d62 515
2863bf2a
JB
516 /**
517 * It will create a new entry.
518 * Browse to it.
519 * Then remove it.
520 *
521 * And it'll check that user won't be redirected to the view page of the content when it had been removed
522 */
523 public function testViewAndDelete()
524 {
525 $this->logInAs('admin');
526 $client = $this->getClient();
527
ac8cf632
JB
528 $em = $client->getContainer()
529 ->get('doctrine.orm.entity_manager');
530
2863bf2a 531 // add a new content to be removed later
ac8cf632 532 $user = $em
2863bf2a
JB
533 ->getRepository('WallabagUserBundle:User')
534 ->findOneByUserName('admin');
535
536 $content = new Entry($user);
537 $content->setUrl('http://1.1.1.1/entry');
538 $content->setReadingTime(12);
539 $content->setDomainName('domain.io');
540 $content->setMimetype('text/html');
541 $content->setTitle('test title entry');
542 $content->setContent('This is my content /o/');
543 $content->setArchived(true);
544 $content->setLanguage('fr');
545
ac8cf632
JB
546 $em->persist($content);
547 $em->flush();
2863bf2a
JB
548
549 $client->request('GET', '/view/'.$content->getId());
550 $this->assertEquals(200, $client->getResponse()->getStatusCode());
551
552 $client->request('GET', '/delete/'.$content->getId());
553 $this->assertEquals(302, $client->getResponse()->getStatusCode());
554
555 $client->followRedirect();
556 $this->assertEquals(200, $client->getResponse()->getStatusCode());
557 }
558
3d2b2d62
J
559 public function testViewOtherUserEntry()
560 {
159986c4 561 $this->logInAs('admin');
3d2b2d62
J
562 $client = $this->getClient();
563
564 $content = $client->getContainer()
565 ->get('doctrine.orm.entity_manager')
566 ->getRepository('WallabagCoreBundle:Entry')
159986c4 567 ->findOneByUsernameAndNotArchived('bob');
3d2b2d62 568
159986c4 569 $client->request('GET', '/view/'.$content->getId());
3d2b2d62
J
570
571 $this->assertEquals(403, $client->getResponse()->getStatusCode());
572 }
26864574 573
3f357ee2 574 public function testFilterOnReadingTime()
26864574
NL
575 {
576 $this->logInAs('admin');
577 $client = $this->getClient();
578
579 $crawler = $client->request('GET', '/unread/list');
580
581 $form = $crawler->filter('button[id=submit-filter]')->form();
582
4094ea47 583 $data = [
d6a9e139
NL
584 'entry_filter[readingTime][right_number]' => 22,
585 'entry_filter[readingTime][left_number]' => 22,
4094ea47 586 ];
26864574
NL
587
588 $crawler = $client->submit($form, $data);
589
590 $this->assertCount(1, $crawler->filter('div[class=entry]'));
591 }
ab2c93c7 592
95859e54
JB
593 public function testFilterOnReadingTimeOnlyUpper()
594 {
595 $this->logInAs('admin');
596 $client = $this->getClient();
597
598 $crawler = $client->request('GET', '/unread/list');
599
600 $form = $crawler->filter('button[id=submit-filter]')->form();
601
602 $data = [
603 'entry_filter[readingTime][right_number]' => 22,
604 ];
605
606 $crawler = $client->submit($form, $data);
607
608 $this->assertCount(2, $crawler->filter('div[class=entry]'));
609 }
610
611 public function testFilterOnReadingTimeOnlyLower()
612 {
613 $this->logInAs('admin');
614 $client = $this->getClient();
615
616 $crawler = $client->request('GET', '/unread/list');
617
618 $form = $crawler->filter('button[id=submit-filter]')->form();
619
620 $data = [
621 'entry_filter[readingTime][left_number]' => 22,
622 ];
623
624 $crawler = $client->submit($form, $data);
625
626 $this->assertCount(4, $crawler->filter('div[class=entry]'));
627 }
628
30334567
DB
629 public function testFilterOnUnreadStatus()
630 {
631 $this->logInAs('admin');
632 $client = $this->getClient();
633
634 $crawler = $client->request('GET', '/all/list');
635
636 $form = $crawler->filter('button[id=submit-filter]')->form();
637
638 $data = [
639 'entry_filter[isUnread]' => true,
640 ];
641
642 $crawler = $client->submit($form, $data);
643
644 $this->assertCount(4, $crawler->filter('div[class=entry]'));
645 }
646
3f357ee2
NL
647 public function testFilterOnCreationDate()
648 {
649 $this->logInAs('admin');
650 $client = $this->getClient();
651
652 $crawler = $client->request('GET', '/unread/list');
653
654 $form = $crawler->filter('button[id=submit-filter]')->form();
655
4094ea47 656 $data = [
3f357ee2 657 'entry_filter[createdAt][left_date]' => date('d/m/Y'),
8ce32af6 658 'entry_filter[createdAt][right_date]' => date('d/m/Y', strtotime('+1 day')),
4094ea47 659 ];
3f357ee2
NL
660
661 $crawler = $client->submit($form, $data);
662
e1779760 663 $this->assertCount(5, $crawler->filter('div[class=entry]'));
3f357ee2 664
4094ea47 665 $data = [
f90af145
JB
666 'entry_filter[createdAt][left_date]' => date('d/m/Y'),
667 'entry_filter[createdAt][right_date]' => date('d/m/Y'),
4094ea47 668 ];
f90af145
JB
669
670 $crawler = $client->submit($form, $data);
671
672 $this->assertCount(5, $crawler->filter('div[class=entry]'));
673
4094ea47 674 $data = [
3f357ee2 675 'entry_filter[createdAt][left_date]' => '01/01/1970',
8ce32af6 676 'entry_filter[createdAt][right_date]' => '01/01/1970',
4094ea47 677 ];
3f357ee2
NL
678
679 $crawler = $client->submit($form, $data);
680
681 $this->assertCount(0, $crawler->filter('div[class=entry]'));
3f357ee2
NL
682 }
683
ab2c93c7
NL
684 public function testPaginationWithFilter()
685 {
686 $this->logInAs('admin');
687 $client = $this->getClient();
ab2c93c7
NL
688 $crawler = $client->request('GET', '/config');
689
690 $form = $crawler->filter('button[id=config_save]')->form();
691
4094ea47 692 $data = [
ab2c93c7 693 'config[items_per_page]' => '1',
4094ea47 694 ];
ab2c93c7
NL
695
696 $client->submit($form, $data);
697
76cd8dbb 698 $parameters = '?entry_filter%5BreadingTime%5D%5Bleft_number%5D=&entry_filter%5BreadingTime%5D%5Bright_number%5D=';
ab2c93c7 699
5c072d2b 700 $client->request('GET', 'unread/list'.$parameters);
ab2c93c7
NL
701
702 $this->assertContains($parameters, $client->getResponse()->getContent());
e1779760
NL
703
704 // reset pagination
705 $crawler = $client->request('GET', '/config');
706 $form = $crawler->filter('button[id=config_save]')->form();
4094ea47 707 $data = [
e1779760 708 'config[items_per_page]' => '12',
4094ea47 709 ];
e1779760 710 $client->submit($form, $data);
ab2c93c7 711 }
443cecd2
NL
712
713 public function testFilterOnDomainName()
714 {
715 $this->logInAs('admin');
716 $client = $this->getClient();
717
718 $crawler = $client->request('GET', '/unread/list');
719 $form = $crawler->filter('button[id=submit-filter]')->form();
4094ea47 720 $data = [
02d17813 721 'entry_filter[domainName]' => 'domain',
4094ea47 722 ];
443cecd2
NL
723
724 $crawler = $client->submit($form, $data);
02d17813 725 $this->assertCount(5, $crawler->filter('div[class=entry]'));
443cecd2
NL
726
727 $form = $crawler->filter('button[id=submit-filter]')->form();
4094ea47 728 $data = [
8ce32af6 729 'entry_filter[domainName]' => 'wallabag',
4094ea47 730 ];
443cecd2
NL
731
732 $crawler = $client->submit($form, $data);
733 $this->assertCount(0, $crawler->filter('div[class=entry]'));
734 }
e1779760
NL
735
736 public function testFilterOnStatus()
737 {
738 $this->logInAs('admin');
739 $client = $this->getClient();
740
741 $crawler = $client->request('GET', '/unread/list');
742 $form = $crawler->filter('button[id=submit-filter]')->form();
743 $form['entry_filter[isArchived]']->tick();
744 $form['entry_filter[isStarred]']->untick();
745
746 $crawler = $client->submit($form);
159986c4 747 $this->assertCount(1, $crawler->filter('div[class=entry]'));
e1779760
NL
748
749 $form = $crawler->filter('button[id=submit-filter]')->form();
750 $form['entry_filter[isArchived]']->untick();
751 $form['entry_filter[isStarred]']->tick();
752
753 $crawler = $client->submit($form);
02d17813 754 $this->assertCount(1, $crawler->filter('div[class=entry]'));
e1779760 755 }
497e0cad
NL
756
757 public function testPreviewPictureFilter()
758 {
759 $this->logInAs('admin');
760 $client = $this->getClient();
761
762 $crawler = $client->request('GET', '/unread/list');
763 $form = $crawler->filter('button[id=submit-filter]')->form();
764 $form['entry_filter[previewPicture]']->tick();
765
766 $crawler = $client->submit($form);
767 $this->assertCount(1, $crawler->filter('div[class=entry]'));
768 }
d4ebe5c5
JB
769
770 public function testFilterOnLanguage()
771 {
772 $this->logInAs('admin');
773 $client = $this->getClient();
774
775 $crawler = $client->request('GET', '/unread/list');
776 $form = $crawler->filter('button[id=submit-filter]')->form();
4094ea47 777 $data = [
159986c4 778 'entry_filter[language]' => 'fr',
4094ea47 779 ];
d4ebe5c5
JB
780
781 $crawler = $client->submit($form, $data);
02d17813 782 $this->assertCount(2, $crawler->filter('div[class=entry]'));
d4ebe5c5
JB
783
784 $form = $crawler->filter('button[id=submit-filter]')->form();
4094ea47 785 $data = [
d4ebe5c5 786 'entry_filter[language]' => 'en',
4094ea47 787 ];
d4ebe5c5
JB
788
789 $crawler = $client->submit($form, $data);
790 $this->assertCount(2, $crawler->filter('div[class=entry]'));
791 }
a7e2218e 792
21d82c3c 793 public function testShareEntryPublicly()
a7e2218e
NL
794 {
795 $this->logInAs('admin');
796 $client = $this->getClient();
797
798 $content = $client->getContainer()
799 ->get('doctrine.orm.entity_manager')
800 ->getRepository('WallabagCoreBundle:Entry')
801 ->findOneByUser($this->getLoggedInUserId());
802
eddda878 803 // no uuid
a7e2218e 804 $client->request('GET', '/share/'.$content->getUuid());
eddda878
JB
805 $this->assertEquals(404, $client->getResponse()->getStatusCode());
806
807 // generating the uuid
808 $client->request('GET', '/share/'.$content->getId());
809 $this->assertEquals(302, $client->getResponse()->getStatusCode());
810
811 // follow link with uuid
812 $crawler = $client->followRedirect();
813 $this->assertEquals(200, $client->getResponse()->getStatusCode());
814 $this->assertContains('max-age=25200', $client->getResponse()->headers->get('cache-control'));
815 $this->assertContains('public', $client->getResponse()->headers->get('cache-control'));
816 $this->assertContains('s-maxage=25200', $client->getResponse()->headers->get('cache-control'));
a7e2218e 817 $this->assertNotContains('no-cache', $client->getResponse()->headers->get('cache-control'));
21d82c3c
NL
818 $this->assertContains('og:title', $client->getResponse()->getContent());
819 $this->assertContains('og:type', $client->getResponse()->getContent());
820 $this->assertContains('og:url', $client->getResponse()->getContent());
d5c45d52 821 $this->assertContains('og:image', $client->getResponse()->getContent());
a7e2218e 822
eddda878
JB
823 // sharing is now disabled
824 $client->getContainer()->get('craue_config')->set('share_public', 0);
825 $client->request('GET', '/share/'.$content->getUuid());
826 $this->assertEquals(404, $client->getResponse()->getStatusCode());
827
a7e2218e
NL
828 $client->request('GET', '/view/'.$content->getId());
829 $this->assertContains('no-cache', $client->getResponse()->headers->get('cache-control'));
eddda878
JB
830
831 // removing the share
832 $client->request('GET', '/share/delete/'.$content->getId());
833 $this->assertEquals(302, $client->getResponse()->getStatusCode());
834
835 // share is now disable
836 $client->request('GET', '/share/'.$content->getUuid());
837 $this->assertEquals(404, $client->getResponse()->getStatusCode());
a7e2218e 838 }
93fd4692 839}