]> git.immae.eu Git - github/wallabag/wallabag.git/blob - src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php
Fix #1551 - Redirect to the last page when current page is out of range
[github/wallabag/wallabag.git] / src / Wallabag / CoreBundle / Tests / Controller / EntryControllerTest.php
1 <?php
2
3 namespace Wallabag\CoreBundle\Tests\Controller;
4
5 use Wallabag\CoreBundle\Tests\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 $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(
41 'entry[url]' => $this->url,
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
52 public function testGetNew()
53 {
54 $this->logInAs('admin');
55 $client = $this->getClient();
56
57 $crawler = $client->request('GET', '/new');
58
59 $this->assertEquals(200, $client->getResponse()->getStatusCode());
60
61 $this->assertCount(1, $crawler->filter('input[type=url]'));
62 $this->assertCount(1, $crawler->filter('button[type=submit]'));
63 }
64
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
75 $client->request('GET', '/bookmarklet', array('url' => $this->url));
76 $this->assertEquals(302, $client->getResponse()->getStatusCode());
77 $client->followRedirect();
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')
85 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
86 $em->remove($entry);
87 $em->flush();
88 }
89
90 public function testPostNewEmpty()
91 {
92 $this->logInAs('admin');
93 $client = $this->getClient();
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
108 /**
109 * This test will require an internet connection.
110 */
111 public function testPostNewOk()
112 {
113 $this->logInAs('admin');
114 $client = $this->getClient();
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(
123 'entry[url]' => $this->url,
124 );
125
126 $client->submit($form, $data);
127
128 $this->assertEquals(302, $client->getResponse()->getStatusCode());
129
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 }
139
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());
159 }
160
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
183 $client->followRedirect();
184
185 $em = $client->getContainer()
186 ->get('doctrine.orm.entity_manager');
187 $entry = $em
188 ->getRepository('WallabagCoreBundle:Entry')
189 ->findOneByUrl($url);
190 $tags = $entry->getTags();
191
192 $this->assertCount(1, $tags);
193 $this->assertEquals('wallabag', $tags[0]->getLabel());
194
195 $em->remove($entry);
196 $em->flush();
197 }
198
199 public function testArchive()
200 {
201 $this->logInAs('admin');
202 $client = $this->getClient();
203
204 $client->request('GET', '/archive/list');
205
206 $this->assertEquals(200, $client->getResponse()->getStatusCode());
207 }
208
209 public function testStarred()
210 {
211 $this->logInAs('admin');
212 $client = $this->getClient();
213
214 $client->request('GET', '/starred/list');
215
216 $this->assertEquals(200, $client->getResponse()->getStatusCode());
217 }
218
219 public function testRangeException()
220 {
221 $this->logInAs('admin');
222 $client = $this->getClient();
223
224 $client->request('GET', '/all/list/900');
225
226 $this->assertEquals(302, $client->getResponse()->getStatusCode());
227 $this->assertEquals('/all/list', $client->getResponse()->getTargetUrl());
228 }
229
230 /**
231 * @depends testPostNewOk
232 */
233 public function testView()
234 {
235 $this->logInAs('admin');
236 $client = $this->getClient();
237
238 $content = $client->getContainer()
239 ->get('doctrine.orm.entity_manager')
240 ->getRepository('WallabagCoreBundle:Entry')
241 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
242
243 $client->request('GET', '/view/'.$content->getId());
244
245 $this->assertEquals(200, $client->getResponse()->getStatusCode());
246 $this->assertContains($content->getTitle(), $client->getResponse()->getContent());
247 }
248
249 /**
250 * @depends testPostNewOk
251 *
252 * This test will require an internet connection.
253 */
254 public function testReload()
255 {
256 $this->logInAs('admin');
257 $client = $this->getClient();
258
259 $content = $client->getContainer()
260 ->get('doctrine.orm.entity_manager')
261 ->getRepository('WallabagCoreBundle:Entry')
262 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
263
264 // empty content
265 $content->setContent('');
266 $client->getContainer()->get('doctrine.orm.entity_manager')->persist($content);
267 $client->getContainer()->get('doctrine.orm.entity_manager')->flush();
268
269 $client->request('GET', '/reload/'.$content->getId());
270
271 $this->assertEquals(302, $client->getResponse()->getStatusCode());
272
273 $content = $client->getContainer()
274 ->get('doctrine.orm.entity_manager')
275 ->getRepository('WallabagCoreBundle:Entry')
276 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
277
278 $this->assertNotEmpty($content->getContent());
279 }
280
281 public function testEdit()
282 {
283 $this->logInAs('admin');
284 $client = $this->getClient();
285
286 $content = $client->getContainer()
287 ->get('doctrine.orm.entity_manager')
288 ->getRepository('WallabagCoreBundle:Entry')
289 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
290
291 $crawler = $client->request('GET', '/edit/'.$content->getId());
292
293 $this->assertEquals(200, $client->getResponse()->getStatusCode());
294
295 $this->assertCount(1, $crawler->filter('input[id=entry_title]'));
296 $this->assertCount(1, $crawler->filter('button[id=entry_save]'));
297 }
298
299 public function testEditUpdate()
300 {
301 $this->logInAs('admin');
302 $client = $this->getClient();
303
304 $content = $client->getContainer()
305 ->get('doctrine.orm.entity_manager')
306 ->getRepository('WallabagCoreBundle:Entry')
307 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
308
309 $crawler = $client->request('GET', '/edit/'.$content->getId());
310
311 $this->assertEquals(200, $client->getResponse()->getStatusCode());
312
313 $form = $crawler->filter('button[type=submit]')->form();
314
315 $data = array(
316 'entry[title]' => 'My updated title hehe :)',
317 );
318
319 $client->submit($form, $data);
320
321 $this->assertEquals(302, $client->getResponse()->getStatusCode());
322
323 $crawler = $client->followRedirect();
324
325 $this->assertGreaterThan(1, $alert = $crawler->filter('div[id=article] h1')->extract(array('_text')));
326 $this->assertContains('My updated title hehe :)', $alert[0]);
327 }
328
329 public function testToggleArchive()
330 {
331 $this->logInAs('admin');
332 $client = $this->getClient();
333
334 $content = $client->getContainer()
335 ->get('doctrine.orm.entity_manager')
336 ->getRepository('WallabagCoreBundle:Entry')
337 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
338
339 $client->request('GET', '/archive/'.$content->getId());
340
341 $this->assertEquals(302, $client->getResponse()->getStatusCode());
342
343 $res = $client->getContainer()
344 ->get('doctrine.orm.entity_manager')
345 ->getRepository('WallabagCoreBundle:Entry')
346 ->find($content->getId());
347
348 $this->assertEquals($res->isArchived(), true);
349 }
350
351 public function testToggleStar()
352 {
353 $this->logInAs('admin');
354 $client = $this->getClient();
355
356 $content = $client->getContainer()
357 ->get('doctrine.orm.entity_manager')
358 ->getRepository('WallabagCoreBundle:Entry')
359 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
360
361 $client->request('GET', '/star/'.$content->getId());
362
363 $this->assertEquals(302, $client->getResponse()->getStatusCode());
364
365 $res = $client->getContainer()
366 ->get('doctrine.orm.entity_manager')
367 ->getRepository('WallabagCoreBundle:Entry')
368 ->findOneById($content->getId());
369
370 $this->assertEquals($res->isStarred(), true);
371 }
372
373 public function testDelete()
374 {
375 $this->logInAs('admin');
376 $client = $this->getClient();
377
378 $content = $client->getContainer()
379 ->get('doctrine.orm.entity_manager')
380 ->getRepository('WallabagCoreBundle:Entry')
381 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
382
383 $client->request('GET', '/delete/'.$content->getId());
384
385 $this->assertEquals(302, $client->getResponse()->getStatusCode());
386
387 $client->request('GET', '/delete/'.$content->getId());
388
389 $this->assertEquals(404, $client->getResponse()->getStatusCode());
390 }
391
392 /**
393 * It will create a new entry.
394 * Browse to it.
395 * Then remove it.
396 *
397 * And it'll check that user won't be redirected to the view page of the content when it had been removed
398 */
399 public function testViewAndDelete()
400 {
401 $this->logInAs('admin');
402 $client = $this->getClient();
403
404 // add a new content to be removed later
405 $user = $client->getContainer()
406 ->get('doctrine.orm.entity_manager')
407 ->getRepository('WallabagUserBundle:User')
408 ->findOneByUserName('admin');
409
410 $content = new Entry($user);
411 $content->setUrl('http://1.1.1.1/entry');
412 $content->setReadingTime(12);
413 $content->setDomainName('domain.io');
414 $content->setMimetype('text/html');
415 $content->setTitle('test title entry');
416 $content->setContent('This is my content /o/');
417 $content->setArchived(true);
418 $content->setLanguage('fr');
419
420 $client->getContainer()
421 ->get('doctrine.orm.entity_manager')
422 ->persist($content);
423 $client->getContainer()
424 ->get('doctrine.orm.entity_manager')
425 ->flush();
426
427 $client->request('GET', '/view/'.$content->getId());
428 $this->assertEquals(200, $client->getResponse()->getStatusCode());
429
430 $client->request('GET', '/delete/'.$content->getId());
431 $this->assertEquals(302, $client->getResponse()->getStatusCode());
432
433 $client->followRedirect();
434 $this->assertEquals(200, $client->getResponse()->getStatusCode());
435 }
436
437 public function testViewOtherUserEntry()
438 {
439 $this->logInAs('admin');
440 $client = $this->getClient();
441
442 $content = $client->getContainer()
443 ->get('doctrine.orm.entity_manager')
444 ->getRepository('WallabagCoreBundle:Entry')
445 ->findOneByUsernameAndNotArchived('bob');
446
447 $client->request('GET', '/view/'.$content->getId());
448
449 $this->assertEquals(403, $client->getResponse()->getStatusCode());
450 }
451
452 public function testFilterOnReadingTime()
453 {
454 $this->logInAs('admin');
455 $client = $this->getClient();
456
457 $crawler = $client->request('GET', '/unread/list');
458
459 $form = $crawler->filter('button[id=submit-filter]')->form();
460
461 $data = array(
462 'entry_filter[readingTime][right_number]' => 11,
463 'entry_filter[readingTime][left_number]' => 11,
464 );
465
466 $crawler = $client->submit($form, $data);
467
468 $this->assertCount(1, $crawler->filter('div[class=entry]'));
469 }
470
471 public function testFilterOnCreationDate()
472 {
473 $this->logInAs('admin');
474 $client = $this->getClient();
475
476 $crawler = $client->request('GET', '/unread/list');
477
478 $form = $crawler->filter('button[id=submit-filter]')->form();
479
480 $data = array(
481 'entry_filter[createdAt][left_date]' => date('d/m/Y'),
482 'entry_filter[createdAt][right_date]' => date('d/m/Y', strtotime('+1 day')),
483 );
484
485 $crawler = $client->submit($form, $data);
486
487 $this->assertCount(5, $crawler->filter('div[class=entry]'));
488
489 $data = array(
490 'entry_filter[createdAt][left_date]' => date('d/m/Y'),
491 'entry_filter[createdAt][right_date]' => date('d/m/Y'),
492 );
493
494 $crawler = $client->submit($form, $data);
495
496 $this->assertCount(5, $crawler->filter('div[class=entry]'));
497
498 $data = array(
499 'entry_filter[createdAt][left_date]' => '01/01/1970',
500 'entry_filter[createdAt][right_date]' => '01/01/1970',
501 );
502
503 $crawler = $client->submit($form, $data);
504
505 $this->assertCount(0, $crawler->filter('div[class=entry]'));
506 }
507
508 public function testPaginationWithFilter()
509 {
510 $this->logInAs('admin');
511 $client = $this->getClient();
512 $crawler = $client->request('GET', '/config');
513
514 $form = $crawler->filter('button[id=config_save]')->form();
515
516 $data = array(
517 'config[items_per_page]' => '1',
518 );
519
520 $client->submit($form, $data);
521
522 $parameters = '?entry_filter%5BreadingTime%5D%5Bleft_number%5D=&amp;entry_filter%5BreadingTime%5D%5Bright_number%5D=';
523
524 $client->request('GET', 'unread/list'.$parameters);
525
526 $this->assertContains($parameters, $client->getResponse()->getContent());
527
528 // reset pagination
529 $crawler = $client->request('GET', '/config');
530 $form = $crawler->filter('button[id=config_save]')->form();
531 $data = array(
532 'config[items_per_page]' => '12',
533 );
534 $client->submit($form, $data);
535 }
536
537 public function testFilterOnDomainName()
538 {
539 $this->logInAs('admin');
540 $client = $this->getClient();
541
542 $crawler = $client->request('GET', '/unread/list');
543 $form = $crawler->filter('button[id=submit-filter]')->form();
544 $data = array(
545 'entry_filter[domainName]' => 'domain',
546 );
547
548 $crawler = $client->submit($form, $data);
549 $this->assertCount(5, $crawler->filter('div[class=entry]'));
550
551 $form = $crawler->filter('button[id=submit-filter]')->form();
552 $data = array(
553 'entry_filter[domainName]' => 'wallabag',
554 );
555
556 $crawler = $client->submit($form, $data);
557 $this->assertCount(0, $crawler->filter('div[class=entry]'));
558 }
559
560 public function testFilterOnStatus()
561 {
562 $this->logInAs('admin');
563 $client = $this->getClient();
564
565 $crawler = $client->request('GET', '/unread/list');
566 $form = $crawler->filter('button[id=submit-filter]')->form();
567 $form['entry_filter[isArchived]']->tick();
568 $form['entry_filter[isStarred]']->untick();
569
570 $crawler = $client->submit($form);
571 $this->assertCount(1, $crawler->filter('div[class=entry]'));
572
573 $form = $crawler->filter('button[id=submit-filter]')->form();
574 $form['entry_filter[isArchived]']->untick();
575 $form['entry_filter[isStarred]']->tick();
576
577 $crawler = $client->submit($form);
578 $this->assertCount(1, $crawler->filter('div[class=entry]'));
579 }
580
581 public function testPreviewPictureFilter()
582 {
583 $this->logInAs('admin');
584 $client = $this->getClient();
585
586 $crawler = $client->request('GET', '/unread/list');
587 $form = $crawler->filter('button[id=submit-filter]')->form();
588 $form['entry_filter[previewPicture]']->tick();
589
590 $crawler = $client->submit($form);
591 $this->assertCount(1, $crawler->filter('div[class=entry]'));
592 }
593
594 public function testFilterOnLanguage()
595 {
596 $this->logInAs('admin');
597 $client = $this->getClient();
598
599 $crawler = $client->request('GET', '/unread/list');
600 $form = $crawler->filter('button[id=submit-filter]')->form();
601 $data = array(
602 'entry_filter[language]' => 'fr',
603 );
604
605 $crawler = $client->submit($form, $data);
606 $this->assertCount(2, $crawler->filter('div[class=entry]'));
607
608 $form = $crawler->filter('button[id=submit-filter]')->form();
609 $data = array(
610 'entry_filter[language]' => 'en',
611 );
612
613 $crawler = $client->submit($form, $data);
614 $this->assertCount(2, $crawler->filter('div[class=entry]'));
615 }
616 }