]> git.immae.eu Git - github/wallabag/wallabag.git/blame - src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php
Merge pull request #1693 from wallabag/v2-issue-template
[github/wallabag/wallabag.git] / src / Wallabag / CoreBundle / Tests / Controller / EntryControllerTest.php
CommitLineData
93fd4692
NL
1<?php
2
ad4d1caa 3namespace Wallabag\CoreBundle\Tests\Controller;
93fd4692 4
769e19dc 5use Wallabag\CoreBundle\Tests\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');
28 $client->followRedirect();
29
30 $this->assertEquals(200, $client->getResponse()->getStatusCode());
31 $this->assertContains('We\'ll accompany you to visit wallabag', $client->getResponse()->getContent());
32
33 // Test if quickstart is disabled when user has 1 entry
34 $crawler = $client->request('GET', '/new');
35
36 $this->assertEquals(200, $client->getResponse()->getStatusCode());
37
38 $form = $crawler->filter('button[type=submit]')->form();
39
40 $data = array(
78833672 41 'entry[url]' => $this->url,
5c072d2b
NL
42 );
43
44 $client->submit($form, $data);
45 $this->assertEquals(302, $client->getResponse()->getStatusCode());
46 $client->followRedirect();
47
48 $client->request('GET', '/unread/list');
49 $this->assertContains('There is one entry.', $client->getResponse()->getContent());
50 }
51
9c0c8820 52 public function testGetNew()
93fd4692 53 {
eb3bd7ef 54 $this->logInAs('admin');
3b815d2d 55 $client = $this->getClient();
93fd4692 56
aa6e27cf 57 $crawler = $client->request('GET', '/new');
93fd4692
NL
58
59 $this->assertEquals(200, $client->getResponse()->getStatusCode());
9c0c8820
J
60
61 $this->assertCount(1, $crawler->filter('input[type=url]'));
62 $this->assertCount(1, $crawler->filter('button[type=submit]'));
63 }
64
880a0e1c
NL
65 public function testPostNewViaBookmarklet()
66 {
67 $this->logInAs('admin');
68 $client = $this->getClient();
69
70 $crawler = $client->request('GET', '/');
71
72 $this->assertCount(4, $crawler->filter('div[class=entry]'));
73
74 // Good URL
5c072d2b 75 $client->request('GET', '/bookmarklet', array('url' => $this->url));
880a0e1c 76 $this->assertEquals(302, $client->getResponse()->getStatusCode());
5c072d2b 77 $client->followRedirect();
880a0e1c
NL
78 $crawler = $client->request('GET', '/');
79 $this->assertCount(5, $crawler->filter('div[class=entry]'));
80
81 $em = $client->getContainer()
82 ->get('doctrine.orm.entity_manager');
83 $entry = $em
84 ->getRepository('WallabagCoreBundle:Entry')
78833672 85 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
880a0e1c
NL
86 $em->remove($entry);
87 $em->flush();
88 }
89
9c0c8820
J
90 public function testPostNewEmpty()
91 {
eb3bd7ef 92 $this->logInAs('admin');
3b815d2d 93 $client = $this->getClient();
9c0c8820
J
94
95 $crawler = $client->request('GET', '/new');
96
97 $this->assertEquals(200, $client->getResponse()->getStatusCode());
98
99 $form = $crawler->filter('button[type=submit]')->form();
100
101 $crawler = $client->submit($form);
102
103 $this->assertEquals(200, $client->getResponse()->getStatusCode());
104 $this->assertCount(1, $alert = $crawler->filter('form ul li')->extract(array('_text')));
105 $this->assertEquals('This value should not be blank.', $alert[0]);
106 }
107
8a493541 108 /**
75c48e3a 109 * This test will require an internet connection.
8a493541 110 */
9c0c8820
J
111 public function testPostNewOk()
112 {
eb3bd7ef 113 $this->logInAs('admin');
3b815d2d 114 $client = $this->getClient();
9c0c8820
J
115
116 $crawler = $client->request('GET', '/new');
117
118 $this->assertEquals(200, $client->getResponse()->getStatusCode());
119
120 $form = $crawler->filter('button[type=submit]')->form();
121
122 $data = array(
02d17813 123 'entry[url]' => $this->url,
9c0c8820
J
124 );
125
126 $client->submit($form, $data);
127
128 $this->assertEquals(302, $client->getResponse()->getStatusCode());
129
a0d6ccc5
JB
130 $content = $client->getContainer()
131 ->get('doctrine.orm.entity_manager')
132 ->getRepository('WallabagCoreBundle:Entry')
133 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
134
135 $this->assertInstanceOf('Wallabag\CoreBundle\Entity\Entry', $content);
136 $this->assertEquals($this->url, $content->getUrl());
137 $this->assertContains('Google', $content->getTitle());
138 }
9c0c8820 139
a0d6ccc5
JB
140 public function testPostNewOkUrlExist()
141 {
142 $this->logInAs('admin');
143 $client = $this->getClient();
144
145 $crawler = $client->request('GET', '/new');
146
147 $this->assertEquals(200, $client->getResponse()->getStatusCode());
148
149 $form = $crawler->filter('button[type=submit]')->form();
150
151 $data = array(
152 'entry[url]' => $this->url,
153 );
154
155 $client->submit($form, $data);
156
157 $this->assertEquals(302, $client->getResponse()->getStatusCode());
158 $this->assertContains('/view/', $client->getResponse()->getTargetUrl());
9c0c8820
J
159 }
160
958671a7
KG
161 /**
162 * This test will require an internet connection.
163 */
164 public function testPostNewThatWillBeTaggued()
165 {
166 $this->logInAs('admin');
167 $client = $this->getClient();
168
169 $crawler = $client->request('GET', '/new');
170
171 $this->assertEquals(200, $client->getResponse()->getStatusCode());
172
173 $form = $crawler->filter('button[type=submit]')->form();
174
175 $data = array(
176 'entry[url]' => $url = 'https://github.com/wallabag/wallabag',
177 );
178
179 $client->submit($form, $data);
180
181 $this->assertEquals(302, $client->getResponse()->getStatusCode());
182
5c072d2b 183 $client->followRedirect();
958671a7
KG
184
185 $em = $client->getContainer()
186 ->get('doctrine.orm.entity_manager');
187 $entry = $em
188 ->getRepository('WallabagCoreBundle:Entry')
189 ->findOneByUrl($url);
69edb774
KG
190 $tags = $entry->getTags();
191
192 $this->assertCount(1, $tags);
193 $this->assertEquals('wallabag', $tags[0]->getLabel());
958671a7
KG
194
195 $em->remove($entry);
196 $em->flush();
197 }
198
9c0c8820
J
199 public function testArchive()
200 {
eb3bd7ef 201 $this->logInAs('admin');
3b815d2d 202 $client = $this->getClient();
9c0c8820 203
9fb6ac83 204 $client->request('GET', '/archive/list');
9c0c8820
J
205
206 $this->assertEquals(200, $client->getResponse()->getStatusCode());
207 }
208
209 public function testStarred()
210 {
eb3bd7ef 211 $this->logInAs('admin');
3b815d2d 212 $client = $this->getClient();
9c0c8820 213
9fb6ac83 214 $client->request('GET', '/starred/list');
9c0c8820
J
215
216 $this->assertEquals(200, $client->getResponse()->getStatusCode());
217 }
218
8a493541
JB
219 /**
220 * @depends testPostNewOk
221 */
9c0c8820
J
222 public function testView()
223 {
eb3bd7ef 224 $this->logInAs('admin');
3b815d2d 225 $client = $this->getClient();
9c0c8820
J
226
227 $content = $client->getContainer()
228 ->get('doctrine.orm.entity_manager')
229 ->getRepository('WallabagCoreBundle:Entry')
78833672 230 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
9c0c8820 231
eb3bd7ef 232 $client->request('GET', '/view/'.$content->getId());
9c0c8820
J
233
234 $this->assertEquals(200, $client->getResponse()->getStatusCode());
235 $this->assertContains($content->getTitle(), $client->getResponse()->getContent());
93fd4692 236 }
eb3bd7ef 237
831b02aa
JB
238 /**
239 * @depends testPostNewOk
240 *
241 * This test will require an internet connection.
242 */
243 public function testReload()
244 {
245 $this->logInAs('admin');
246 $client = $this->getClient();
247
248 $content = $client->getContainer()
249 ->get('doctrine.orm.entity_manager')
250 ->getRepository('WallabagCoreBundle:Entry')
78833672 251 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
831b02aa
JB
252
253 // empty content
254 $content->setContent('');
255 $client->getContainer()->get('doctrine.orm.entity_manager')->persist($content);
256 $client->getContainer()->get('doctrine.orm.entity_manager')->flush();
257
258 $client->request('GET', '/reload/'.$content->getId());
259
260 $this->assertEquals(302, $client->getResponse()->getStatusCode());
261
262 $content = $client->getContainer()
263 ->get('doctrine.orm.entity_manager')
264 ->getRepository('WallabagCoreBundle:Entry')
78833672 265 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
831b02aa
JB
266
267 $this->assertNotEmpty($content->getContent());
268 }
269
82d6d9cb
JB
270 public function testEdit()
271 {
272 $this->logInAs('admin');
273 $client = $this->getClient();
274
275 $content = $client->getContainer()
276 ->get('doctrine.orm.entity_manager')
277 ->getRepository('WallabagCoreBundle:Entry')
78833672 278 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
82d6d9cb
JB
279
280 $crawler = $client->request('GET', '/edit/'.$content->getId());
281
282 $this->assertEquals(200, $client->getResponse()->getStatusCode());
283
284 $this->assertCount(1, $crawler->filter('input[id=entry_title]'));
285 $this->assertCount(1, $crawler->filter('button[id=entry_save]'));
286 }
287
288 public function testEditUpdate()
289 {
290 $this->logInAs('admin');
291 $client = $this->getClient();
292
293 $content = $client->getContainer()
294 ->get('doctrine.orm.entity_manager')
295 ->getRepository('WallabagCoreBundle:Entry')
78833672 296 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
82d6d9cb
JB
297
298 $crawler = $client->request('GET', '/edit/'.$content->getId());
299
300 $this->assertEquals(200, $client->getResponse()->getStatusCode());
301
302 $form = $crawler->filter('button[type=submit]')->form();
303
304 $data = array(
305 'entry[title]' => 'My updated title hehe :)',
306 );
307
308 $client->submit($form, $data);
309
310 $this->assertEquals(302, $client->getResponse()->getStatusCode());
311
312 $crawler = $client->followRedirect();
313
314 $this->assertGreaterThan(1, $alert = $crawler->filter('div[id=article] h1')->extract(array('_text')));
315 $this->assertContains('My updated title hehe :)', $alert[0]);
316 }
317
eb3bd7ef
J
318 public function testToggleArchive()
319 {
320 $this->logInAs('admin');
321 $client = $this->getClient();
322
323 $content = $client->getContainer()
324 ->get('doctrine.orm.entity_manager')
325 ->getRepository('WallabagCoreBundle:Entry')
78833672 326 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
eb3bd7ef
J
327
328 $client->request('GET', '/archive/'.$content->getId());
329
330 $this->assertEquals(302, $client->getResponse()->getStatusCode());
331
332 $res = $client->getContainer()
333 ->get('doctrine.orm.entity_manager')
334 ->getRepository('WallabagCoreBundle:Entry')
159986c4 335 ->find($content->getId());
eb3bd7ef
J
336
337 $this->assertEquals($res->isArchived(), true);
338 }
339
340 public function testToggleStar()
341 {
342 $this->logInAs('admin');
343 $client = $this->getClient();
344
345 $content = $client->getContainer()
346 ->get('doctrine.orm.entity_manager')
347 ->getRepository('WallabagCoreBundle:Entry')
78833672 348 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
eb3bd7ef
J
349
350 $client->request('GET', '/star/'.$content->getId());
351
352 $this->assertEquals(302, $client->getResponse()->getStatusCode());
353
354 $res = $client->getContainer()
355 ->get('doctrine.orm.entity_manager')
356 ->getRepository('WallabagCoreBundle:Entry')
357 ->findOneById($content->getId());
358
359 $this->assertEquals($res->isStarred(), true);
360 }
361
362 public function testDelete()
363 {
364 $this->logInAs('admin');
365 $client = $this->getClient();
366
367 $content = $client->getContainer()
368 ->get('doctrine.orm.entity_manager')
369 ->getRepository('WallabagCoreBundle:Entry')
78833672 370 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
eb3bd7ef
J
371
372 $client->request('GET', '/delete/'.$content->getId());
373
374 $this->assertEquals(302, $client->getResponse()->getStatusCode());
375
1d147791 376 $client->request('GET', '/delete/'.$content->getId());
eb3bd7ef 377
1d147791 378 $this->assertEquals(404, $client->getResponse()->getStatusCode());
eb3bd7ef 379 }
3d2b2d62 380
2863bf2a
JB
381 /**
382 * It will create a new entry.
383 * Browse to it.
384 * Then remove it.
385 *
386 * And it'll check that user won't be redirected to the view page of the content when it had been removed
387 */
388 public function testViewAndDelete()
389 {
390 $this->logInAs('admin');
391 $client = $this->getClient();
392
393 // add a new content to be removed later
394 $user = $client->getContainer()
395 ->get('doctrine.orm.entity_manager')
396 ->getRepository('WallabagUserBundle:User')
397 ->findOneByUserName('admin');
398
399 $content = new Entry($user);
400 $content->setUrl('http://1.1.1.1/entry');
401 $content->setReadingTime(12);
402 $content->setDomainName('domain.io');
403 $content->setMimetype('text/html');
404 $content->setTitle('test title entry');
405 $content->setContent('This is my content /o/');
406 $content->setArchived(true);
407 $content->setLanguage('fr');
408
409 $client->getContainer()
410 ->get('doctrine.orm.entity_manager')
411 ->persist($content);
412 $client->getContainer()
413 ->get('doctrine.orm.entity_manager')
414 ->flush();
415
416 $client->request('GET', '/view/'.$content->getId());
417 $this->assertEquals(200, $client->getResponse()->getStatusCode());
418
419 $client->request('GET', '/delete/'.$content->getId());
420 $this->assertEquals(302, $client->getResponse()->getStatusCode());
421
422 $client->followRedirect();
423 $this->assertEquals(200, $client->getResponse()->getStatusCode());
424 }
425
3d2b2d62
J
426 public function testViewOtherUserEntry()
427 {
159986c4 428 $this->logInAs('admin');
3d2b2d62
J
429 $client = $this->getClient();
430
431 $content = $client->getContainer()
432 ->get('doctrine.orm.entity_manager')
433 ->getRepository('WallabagCoreBundle:Entry')
159986c4 434 ->findOneByUsernameAndNotArchived('bob');
3d2b2d62 435
159986c4 436 $client->request('GET', '/view/'.$content->getId());
3d2b2d62
J
437
438 $this->assertEquals(403, $client->getResponse()->getStatusCode());
439 }
26864574 440
3f357ee2 441 public function testFilterOnReadingTime()
26864574
NL
442 {
443 $this->logInAs('admin');
444 $client = $this->getClient();
445
446 $crawler = $client->request('GET', '/unread/list');
447
448 $form = $crawler->filter('button[id=submit-filter]')->form();
449
450 $data = array(
451 'entry_filter[readingTime][right_number]' => 11,
8ce32af6 452 'entry_filter[readingTime][left_number]' => 11,
26864574
NL
453 );
454
455 $crawler = $client->submit($form, $data);
456
457 $this->assertCount(1, $crawler->filter('div[class=entry]'));
458 }
ab2c93c7 459
3f357ee2
NL
460 public function testFilterOnCreationDate()
461 {
462 $this->logInAs('admin');
463 $client = $this->getClient();
464
465 $crawler = $client->request('GET', '/unread/list');
466
467 $form = $crawler->filter('button[id=submit-filter]')->form();
468
469 $data = array(
470 'entry_filter[createdAt][left_date]' => date('d/m/Y'),
8ce32af6 471 'entry_filter[createdAt][right_date]' => date('d/m/Y', strtotime('+1 day')),
3f357ee2
NL
472 );
473
474 $crawler = $client->submit($form, $data);
475
e1779760 476 $this->assertCount(5, $crawler->filter('div[class=entry]'));
3f357ee2 477
f90af145
JB
478 $data = array(
479 'entry_filter[createdAt][left_date]' => date('d/m/Y'),
480 'entry_filter[createdAt][right_date]' => date('d/m/Y'),
481 );
482
483 $crawler = $client->submit($form, $data);
484
485 $this->assertCount(5, $crawler->filter('div[class=entry]'));
486
3f357ee2
NL
487 $data = array(
488 'entry_filter[createdAt][left_date]' => '01/01/1970',
8ce32af6 489 'entry_filter[createdAt][right_date]' => '01/01/1970',
3f357ee2
NL
490 );
491
492 $crawler = $client->submit($form, $data);
493
494 $this->assertCount(0, $crawler->filter('div[class=entry]'));
3f357ee2
NL
495 }
496
ab2c93c7
NL
497 public function testPaginationWithFilter()
498 {
499 $this->logInAs('admin');
500 $client = $this->getClient();
ab2c93c7
NL
501 $crawler = $client->request('GET', '/config');
502
503 $form = $crawler->filter('button[id=config_save]')->form();
504
505 $data = array(
506 'config[items_per_page]' => '1',
507 );
508
509 $client->submit($form, $data);
510
511 $parameters = '?entry_filter%5BreadingTime%5D%5Bleft_number%5D=&amp;entry_filter%5BreadingTime%5D%5Bright_number%5D=';
512
5c072d2b 513 $client->request('GET', 'unread/list'.$parameters);
ab2c93c7
NL
514
515 $this->assertContains($parameters, $client->getResponse()->getContent());
e1779760
NL
516
517 // reset pagination
518 $crawler = $client->request('GET', '/config');
519 $form = $crawler->filter('button[id=config_save]')->form();
520 $data = array(
521 'config[items_per_page]' => '12',
522 );
523 $client->submit($form, $data);
ab2c93c7 524 }
443cecd2
NL
525
526 public function testFilterOnDomainName()
527 {
528 $this->logInAs('admin');
529 $client = $this->getClient();
530
531 $crawler = $client->request('GET', '/unread/list');
532 $form = $crawler->filter('button[id=submit-filter]')->form();
533 $data = array(
02d17813 534 'entry_filter[domainName]' => 'domain',
443cecd2
NL
535 );
536
537 $crawler = $client->submit($form, $data);
02d17813 538 $this->assertCount(5, $crawler->filter('div[class=entry]'));
443cecd2
NL
539
540 $form = $crawler->filter('button[id=submit-filter]')->form();
541 $data = array(
8ce32af6 542 'entry_filter[domainName]' => 'wallabag',
443cecd2
NL
543 );
544
545 $crawler = $client->submit($form, $data);
546 $this->assertCount(0, $crawler->filter('div[class=entry]'));
547 }
e1779760
NL
548
549 public function testFilterOnStatus()
550 {
551 $this->logInAs('admin');
552 $client = $this->getClient();
553
554 $crawler = $client->request('GET', '/unread/list');
555 $form = $crawler->filter('button[id=submit-filter]')->form();
556 $form['entry_filter[isArchived]']->tick();
557 $form['entry_filter[isStarred]']->untick();
558
559 $crawler = $client->submit($form);
159986c4 560 $this->assertCount(1, $crawler->filter('div[class=entry]'));
e1779760
NL
561
562 $form = $crawler->filter('button[id=submit-filter]')->form();
563 $form['entry_filter[isArchived]']->untick();
564 $form['entry_filter[isStarred]']->tick();
565
566 $crawler = $client->submit($form);
02d17813 567 $this->assertCount(1, $crawler->filter('div[class=entry]'));
e1779760 568 }
497e0cad
NL
569
570 public function testPreviewPictureFilter()
571 {
572 $this->logInAs('admin');
573 $client = $this->getClient();
574
575 $crawler = $client->request('GET', '/unread/list');
576 $form = $crawler->filter('button[id=submit-filter]')->form();
577 $form['entry_filter[previewPicture]']->tick();
578
579 $crawler = $client->submit($form);
580 $this->assertCount(1, $crawler->filter('div[class=entry]'));
581 }
d4ebe5c5
JB
582
583 public function testFilterOnLanguage()
584 {
585 $this->logInAs('admin');
586 $client = $this->getClient();
587
588 $crawler = $client->request('GET', '/unread/list');
589 $form = $crawler->filter('button[id=submit-filter]')->form();
590 $data = array(
159986c4 591 'entry_filter[language]' => 'fr',
d4ebe5c5
JB
592 );
593
594 $crawler = $client->submit($form, $data);
02d17813 595 $this->assertCount(2, $crawler->filter('div[class=entry]'));
d4ebe5c5
JB
596
597 $form = $crawler->filter('button[id=submit-filter]')->form();
598 $data = array(
599 'entry_filter[language]' => 'en',
600 );
601
602 $crawler = $client->submit($form, $data);
603 $this->assertCount(2, $crawler->filter('div[class=entry]'));
604 }
93fd4692 605}