3 namespace Wallabag\CoreBundle\Tests\Controller
;
5 use Wallabag\CoreBundle\Tests\WallabagCoreTestCase
;
6 use Wallabag\CoreBundle\Entity\Entry
;
8 class EntryControllerTest
extends WallabagCoreTestCase
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';
12 public function testLogin()
14 $client = $this->getClient();
16 $client->request('GET', '/new');
18 $this->assertEquals(302, $client->getResponse()->getStatusCode());
19 $this->assertContains('login', $client->getResponse()->headers
->get('location'));
22 public function testQuickstart()
24 $this->logInAs('empty');
25 $client = $this->getClient();
27 $client->request('GET', '/unread/list');
28 $crawler = $client->followRedirect();
30 $this->assertEquals(200, $client->getResponse()->getStatusCode());
31 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text')));
32 $this->assertContains('quickstart.intro.paragraph_1', $body[0]);
34 // Test if quickstart is disabled when user has 1 entry
35 $crawler = $client->request('GET', '/new');
37 $this->assertEquals(200, $client->getResponse()->getStatusCode());
39 $form = $crawler->filter('form[name=entry]')->form();
42 'entry[url]' => $this->url
,
45 $client->submit($form, $data);
46 $this->assertEquals(302, $client->getResponse()->getStatusCode());
47 $client->followRedirect();
49 $crawler = $client->request('GET', '/unread/list');
50 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text')));
51 $this->assertContains('entry.list.number_on_the_page', $body[0]);
54 public function testGetNew()
56 $this->logInAs('admin');
57 $client = $this->getClient();
59 $crawler = $client->request('GET', '/new');
61 $this->assertEquals(200, $client->getResponse()->getStatusCode());
63 $this->assertCount(1, $crawler->filter('input[type=url]'));
64 $this->assertCount(1, $crawler->filter('form[name=entry]'));
67 public function testPostNewViaBookmarklet()
69 $this->logInAs('admin');
70 $client = $this->getClient();
72 $crawler = $client->request('GET', '/');
74 $this->assertCount(4, $crawler->filter('div[class=entry]'));
77 $client->request('GET', '/bookmarklet', array('url' => $this->url
));
78 $this->assertEquals(302, $client->getResponse()->getStatusCode());
79 $client->followRedirect();
80 $crawler = $client->request('GET', '/');
81 $this->assertCount(5, $crawler->filter('div[class=entry]'));
83 $em = $client->getContainer()
84 ->get('doctrine.orm.entity_manager');
86 ->getRepository('WallabagCoreBundle:Entry')
87 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
92 public function testPostNewEmpty()
94 $this->logInAs('admin');
95 $client = $this->getClient();
97 $crawler = $client->request('GET', '/new');
99 $this->assertEquals(200, $client->getResponse()->getStatusCode());
101 $form = $crawler->filter('form[name=entry]')->form();
103 $crawler = $client->submit($form);
105 $this->assertEquals(200, $client->getResponse()->getStatusCode());
106 $this->assertCount(1, $alert = $crawler->filter('form ul li')->extract(array('_text')));
107 $this->assertEquals('This value should not be blank.', $alert[0]);
111 * This test will require an internet connection.
113 public function testPostNewOk()
115 $this->logInAs('admin');
116 $client = $this->getClient();
118 $crawler = $client->request('GET', '/new');
120 $this->assertEquals(200, $client->getResponse()->getStatusCode());
122 $form = $crawler->filter('form[name=entry]')->form();
125 'entry[url]' => $this->url
,
128 $client->submit($form, $data);
130 $this->assertEquals(302, $client->getResponse()->getStatusCode());
132 $content = $client->getContainer()
133 ->get('doctrine.orm.entity_manager')
134 ->getRepository('WallabagCoreBundle:Entry')
135 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
137 $this->assertInstanceOf('Wallabag\CoreBundle\Entity\Entry', $content);
138 $this->assertEquals($this->url
, $content->getUrl());
139 $this->assertContains('Google', $content->getTitle());
142 public function testPostNewOkUrlExist()
144 $this->logInAs('admin');
145 $client = $this->getClient();
147 $crawler = $client->request('GET', '/new');
149 $this->assertEquals(200, $client->getResponse()->getStatusCode());
151 $form = $crawler->filter('form[name=entry]')->form();
154 'entry[url]' => $this->url
,
157 $client->submit($form, $data);
159 $this->assertEquals(302, $client->getResponse()->getStatusCode());
160 $this->assertContains('/view/', $client->getResponse()->getTargetUrl());
164 * This test will require an internet connection.
166 public function testPostNewThatWillBeTaggued()
168 $this->logInAs('admin');
169 $client = $this->getClient();
171 $crawler = $client->request('GET', '/new');
173 $this->assertEquals(200, $client->getResponse()->getStatusCode());
175 $form = $crawler->filter('form[name=entry]')->form();
178 'entry[url]' => $url = 'https://github.com/wallabag/wallabag',
181 $client->submit($form, $data);
183 $this->assertEquals(302, $client->getResponse()->getStatusCode());
185 $client->followRedirect();
187 $em = $client->getContainer()
188 ->get('doctrine.orm.entity_manager');
190 ->getRepository('WallabagCoreBundle:Entry')
191 ->findOneByUrl($url);
192 $tags = $entry->getTags();
194 $this->assertCount(1, $tags);
195 $this->assertEquals('wallabag', $tags[0]->getLabel());
201 public function testArchive()
203 $this->logInAs('admin');
204 $client = $this->getClient();
206 $client->request('GET', '/archive/list');
208 $this->assertEquals(200, $client->getResponse()->getStatusCode());
211 public function testStarred()
213 $this->logInAs('admin');
214 $client = $this->getClient();
216 $client->request('GET', '/starred/list');
218 $this->assertEquals(200, $client->getResponse()->getStatusCode());
221 public function testRangeException()
223 $this->logInAs('admin');
224 $client = $this->getClient();
226 $client->request('GET', '/all/list/900');
228 $this->assertEquals(302, $client->getResponse()->getStatusCode());
229 $this->assertEquals('/all/list', $client->getResponse()->getTargetUrl());
233 * @depends testPostNewOk
235 public function testView()
237 $this->logInAs('admin');
238 $client = $this->getClient();
240 $content = $client->getContainer()
241 ->get('doctrine.orm.entity_manager')
242 ->getRepository('WallabagCoreBundle:Entry')
243 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
245 $crawler = $client->request('GET', '/view/'.$content->getId());
247 $this->assertEquals(200, $client->getResponse()->getStatusCode());
248 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text')));
249 $this->assertContains($content->getTitle(), $body[0]);
253 * @depends testPostNewOk
255 * This test will require an internet connection.
257 public function testReload()
259 $this->logInAs('admin');
260 $client = $this->getClient();
262 $content = $client->getContainer()
263 ->get('doctrine.orm.entity_manager')
264 ->getRepository('WallabagCoreBundle:Entry')
265 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
268 $content->setContent('');
269 $client->getContainer()->get('doctrine.orm.entity_manager')->persist($content);
270 $client->getContainer()->get('doctrine.orm.entity_manager')->flush();
272 $client->request('GET', '/reload/'.$content->getId());
274 $this->assertEquals(302, $client->getResponse()->getStatusCode());
276 $content = $client->getContainer()
277 ->get('doctrine.orm.entity_manager')
278 ->getRepository('WallabagCoreBundle:Entry')
279 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
281 $this->assertNotEmpty($content->getContent());
284 public function testEdit()
286 $this->logInAs('admin');
287 $client = $this->getClient();
289 $content = $client->getContainer()
290 ->get('doctrine.orm.entity_manager')
291 ->getRepository('WallabagCoreBundle:Entry')
292 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
294 $crawler = $client->request('GET', '/edit/'.$content->getId());
296 $this->assertEquals(200, $client->getResponse()->getStatusCode());
298 $this->assertCount(1, $crawler->filter('input[id=entry_title]'));
299 $this->assertCount(1, $crawler->filter('button[id=entry_save]'));
302 public function testEditUpdate()
304 $this->logInAs('admin');
305 $client = $this->getClient();
307 $content = $client->getContainer()
308 ->get('doctrine.orm.entity_manager')
309 ->getRepository('WallabagCoreBundle:Entry')
310 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
312 $crawler = $client->request('GET', '/edit/'.$content->getId());
314 $this->assertEquals(200, $client->getResponse()->getStatusCode());
316 $form = $crawler->filter('button[type=submit]')->form();
319 'entry[title]' => 'My updated title hehe :)',
322 $client->submit($form, $data);
324 $this->assertEquals(302, $client->getResponse()->getStatusCode());
326 $crawler = $client->followRedirect();
328 $this->assertGreaterThan(1, $alert = $crawler->filter('div[id=article] h1')->extract(array('_text')));
329 $this->assertContains('My updated title hehe :)', $alert[0]);
332 public function testToggleArchive()
334 $this->logInAs('admin');
335 $client = $this->getClient();
337 $content = $client->getContainer()
338 ->get('doctrine.orm.entity_manager')
339 ->getRepository('WallabagCoreBundle:Entry')
340 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
342 $client->request('GET', '/archive/'.$content->getId());
344 $this->assertEquals(302, $client->getResponse()->getStatusCode());
346 $res = $client->getContainer()
347 ->get('doctrine.orm.entity_manager')
348 ->getRepository('WallabagCoreBundle:Entry')
349 ->find($content->getId());
351 $this->assertEquals($res->isArchived(), true);
354 public function testToggleStar()
356 $this->logInAs('admin');
357 $client = $this->getClient();
359 $content = $client->getContainer()
360 ->get('doctrine.orm.entity_manager')
361 ->getRepository('WallabagCoreBundle:Entry')
362 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
364 $client->request('GET', '/star/'.$content->getId());
366 $this->assertEquals(302, $client->getResponse()->getStatusCode());
368 $res = $client->getContainer()
369 ->get('doctrine.orm.entity_manager')
370 ->getRepository('WallabagCoreBundle:Entry')
371 ->findOneById($content->getId());
373 $this->assertEquals($res->isStarred(), true);
376 public function testDelete()
378 $this->logInAs('admin');
379 $client = $this->getClient();
381 $content = $client->getContainer()
382 ->get('doctrine.orm.entity_manager')
383 ->getRepository('WallabagCoreBundle:Entry')
384 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
386 $client->request('GET', '/delete/'.$content->getId());
388 $this->assertEquals(302, $client->getResponse()->getStatusCode());
390 $client->request('GET', '/delete/'.$content->getId());
392 $this->assertEquals(404, $client->getResponse()->getStatusCode());
396 * It will create a new entry.
400 * And it'll check that user won't be redirected to the view page of the content when it had been removed
402 public function testViewAndDelete()
404 $this->logInAs('admin');
405 $client = $this->getClient();
407 // add a new content to be removed later
408 $user = $client->getContainer()
409 ->get('doctrine.orm.entity_manager')
410 ->getRepository('WallabagUserBundle:User')
411 ->findOneByUserName('admin');
413 $content = new Entry($user);
414 $content->setUrl('http://1.1.1.1/entry');
415 $content->setReadingTime(12);
416 $content->setDomainName('domain.io');
417 $content->setMimetype('text/html');
418 $content->setTitle('test title entry');
419 $content->setContent('This is my content /o/');
420 $content->setArchived(true);
421 $content->setLanguage('fr');
423 $client->getContainer()
424 ->get('doctrine.orm.entity_manager')
426 $client->getContainer()
427 ->get('doctrine.orm.entity_manager')
430 $client->request('GET', '/view/'.$content->getId());
431 $this->assertEquals(200, $client->getResponse()->getStatusCode());
433 $client->request('GET', '/delete/'.$content->getId());
434 $this->assertEquals(302, $client->getResponse()->getStatusCode());
436 $client->followRedirect();
437 $this->assertEquals(200, $client->getResponse()->getStatusCode());
440 public function testViewOtherUserEntry()
442 $this->logInAs('admin');
443 $client = $this->getClient();
445 $content = $client->getContainer()
446 ->get('doctrine.orm.entity_manager')
447 ->getRepository('WallabagCoreBundle:Entry')
448 ->findOneByUsernameAndNotArchived('bob');
450 $client->request('GET', '/view/'.$content->getId());
452 $this->assertEquals(403, $client->getResponse()->getStatusCode());
455 public function testFilterOnReadingTime()
457 $this->logInAs('admin');
458 $client = $this->getClient();
460 $crawler = $client->request('GET', '/unread/list');
462 $form = $crawler->filter('button[id=submit-filter]')->form();
465 'entry_filter[readingTime][right_number]' => 11,
466 'entry_filter[readingTime][left_number]' => 11,
469 $crawler = $client->submit($form, $data);
471 $this->assertCount(1, $crawler->filter('div[class=entry]'));
474 public function testFilterOnCreationDate()
476 $this->logInAs('admin');
477 $client = $this->getClient();
479 $crawler = $client->request('GET', '/unread/list');
481 $form = $crawler->filter('button[id=submit-filter]')->form();
484 'entry_filter[createdAt][left_date]' => date('d/m/Y'),
485 'entry_filter[createdAt][right_date]' => date('d/m/Y', strtotime('+1 day')),
488 $crawler = $client->submit($form, $data);
490 $this->assertCount(5, $crawler->filter('div[class=entry]'));
493 'entry_filter[createdAt][left_date]' => date('d/m/Y'),
494 'entry_filter[createdAt][right_date]' => date('d/m/Y'),
497 $crawler = $client->submit($form, $data);
499 $this->assertCount(5, $crawler->filter('div[class=entry]'));
502 'entry_filter[createdAt][left_date]' => '01/01/1970',
503 'entry_filter[createdAt][right_date]' => '01/01/1970',
506 $crawler = $client->submit($form, $data);
508 $this->assertCount(0, $crawler->filter('div[class=entry]'));
511 public function testPaginationWithFilter()
513 $this->logInAs('admin');
514 $client = $this->getClient();
515 $crawler = $client->request('GET', '/config');
517 $form = $crawler->filter('button[id=config_save]')->form();
520 'config[items_per_page]' => '1',
523 $client->submit($form, $data);
525 $parameters = '?entry_filter%5BreadingTime%5D%5Bleft_number%5D=&entry_filter%5BreadingTime%5D%5Bright_number%5D=';
527 $client->request('GET', 'unread/list'.$parameters);
529 $this->assertContains($parameters, $client->getResponse()->getContent());
532 $crawler = $client->request('GET', '/config');
533 $form = $crawler->filter('button[id=config_save]')->form();
535 'config[items_per_page]' => '12',
537 $client->submit($form, $data);
540 public function testFilterOnDomainName()
542 $this->logInAs('admin');
543 $client = $this->getClient();
545 $crawler = $client->request('GET', '/unread/list');
546 $form = $crawler->filter('button[id=submit-filter]')->form();
548 'entry_filter[domainName]' => 'domain',
551 $crawler = $client->submit($form, $data);
552 $this->assertCount(5, $crawler->filter('div[class=entry]'));
554 $form = $crawler->filter('button[id=submit-filter]')->form();
556 'entry_filter[domainName]' => 'wallabag',
559 $crawler = $client->submit($form, $data);
560 $this->assertCount(0, $crawler->filter('div[class=entry]'));
563 public function testFilterOnStatus()
565 $this->logInAs('admin');
566 $client = $this->getClient();
568 $crawler = $client->request('GET', '/unread/list');
569 $form = $crawler->filter('button[id=submit-filter]')->form();
570 $form['entry_filter[isArchived]']->tick();
571 $form['entry_filter[isStarred]']->untick();
573 $crawler = $client->submit($form);
574 $this->assertCount(1, $crawler->filter('div[class=entry]'));
576 $form = $crawler->filter('button[id=submit-filter]')->form();
577 $form['entry_filter[isArchived]']->untick();
578 $form['entry_filter[isStarred]']->tick();
580 $crawler = $client->submit($form);
581 $this->assertCount(1, $crawler->filter('div[class=entry]'));
584 public function testPreviewPictureFilter()
586 $this->logInAs('admin');
587 $client = $this->getClient();
589 $crawler = $client->request('GET', '/unread/list');
590 $form = $crawler->filter('button[id=submit-filter]')->form();
591 $form['entry_filter[previewPicture]']->tick();
593 $crawler = $client->submit($form);
594 $this->assertCount(1, $crawler->filter('div[class=entry]'));
597 public function testFilterOnLanguage()
599 $this->logInAs('admin');
600 $client = $this->getClient();
602 $crawler = $client->request('GET', '/unread/list');
603 $form = $crawler->filter('button[id=submit-filter]')->form();
605 'entry_filter[language]' => 'fr',
608 $crawler = $client->submit($form, $data);
609 $this->assertCount(2, $crawler->filter('div[class=entry]'));
611 $form = $crawler->filter('button[id=submit-filter]')->form();
613 'entry_filter[language]' => 'en',
616 $crawler = $client->submit($form, $data);
617 $this->assertCount(2, $crawler->filter('div[class=entry]'));