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 $client->followRedirect();
30 $this->assertEquals(200, $client->getResponse()->getStatusCode());
31 $this->assertContains('We\'ll accompany you to visit wallabag', $client->getResponse()->getContent());
33 // Test if quickstart is disabled when user has 1 entry
34 $crawler = $client->request('GET', '/new');
36 $this->assertEquals(200, $client->getResponse()->getStatusCode());
38 $form = $crawler->filter('button[type=submit]')->form();
41 'entry[url]' => $this->url
,
44 $client->submit($form, $data);
45 $this->assertEquals(302, $client->getResponse()->getStatusCode());
46 $client->followRedirect();
48 $client->request('GET', '/unread/list');
49 $this->assertContains('There is one entry.', $client->getResponse()->getContent());
52 public function testGetNew()
54 $this->logInAs('admin');
55 $client = $this->getClient();
57 $crawler = $client->request('GET', '/new');
59 $this->assertEquals(200, $client->getResponse()->getStatusCode());
61 $this->assertCount(1, $crawler->filter('input[type=url]'));
62 $this->assertCount(1, $crawler->filter('button[type=submit]'));
65 public function testPostNewViaBookmarklet()
67 $this->logInAs('admin');
68 $client = $this->getClient();
70 $crawler = $client->request('GET', '/');
72 $this->assertCount(4, $crawler->filter('div[class=entry]'));
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]'));
81 $em = $client->getContainer()
82 ->get('doctrine.orm.entity_manager');
84 ->getRepository('WallabagCoreBundle:Entry')
85 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
90 public function testPostNewEmpty()
92 $this->logInAs('admin');
93 $client = $this->getClient();
95 $crawler = $client->request('GET', '/new');
97 $this->assertEquals(200, $client->getResponse()->getStatusCode());
99 $form = $crawler->filter('button[type=submit]')->form();
101 $crawler = $client->submit($form);
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]);
109 * This test will require an internet connection.
111 public function testPostNewOk()
113 $this->logInAs('admin');
114 $client = $this->getClient();
116 $crawler = $client->request('GET', '/new');
118 $this->assertEquals(200, $client->getResponse()->getStatusCode());
120 $form = $crawler->filter('button[type=submit]')->form();
123 'entry[url]' => $this->url
,
126 $client->submit($form, $data);
128 $this->assertEquals(302, $client->getResponse()->getStatusCode());
130 $content = $client->getContainer()
131 ->get('doctrine.orm.entity_manager')
132 ->getRepository('WallabagCoreBundle:Entry')
133 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
135 $this->assertInstanceOf('Wallabag\CoreBundle\Entity\Entry', $content);
136 $this->assertEquals($this->url
, $content->getUrl());
137 $this->assertContains('Google', $content->getTitle());
140 public function testPostNewOkUrlExist()
142 $this->logInAs('admin');
143 $client = $this->getClient();
145 $crawler = $client->request('GET', '/new');
147 $this->assertEquals(200, $client->getResponse()->getStatusCode());
149 $form = $crawler->filter('button[type=submit]')->form();
152 'entry[url]' => $this->url
,
155 $client->submit($form, $data);
157 $this->assertEquals(302, $client->getResponse()->getStatusCode());
158 $this->assertContains('/view/', $client->getResponse()->getTargetUrl());
162 * This test will require an internet connection.
164 public function testPostNewThatWillBeTaggued()
166 $this->logInAs('admin');
167 $client = $this->getClient();
169 $crawler = $client->request('GET', '/new');
171 $this->assertEquals(200, $client->getResponse()->getStatusCode());
173 $form = $crawler->filter('button[type=submit]')->form();
176 'entry[url]' => $url = 'https://github.com/wallabag/wallabag',
179 $client->submit($form, $data);
181 $this->assertEquals(302, $client->getResponse()->getStatusCode());
183 $client->followRedirect();
185 $em = $client->getContainer()
186 ->get('doctrine.orm.entity_manager');
188 ->getRepository('WallabagCoreBundle:Entry')
189 ->findOneByUrl($url);
190 $tags = $entry->getTags();
192 $this->assertCount(1, $tags);
193 $this->assertEquals('wallabag', $tags[0]->getLabel());
199 public function testArchive()
201 $this->logInAs('admin');
202 $client = $this->getClient();
204 $client->request('GET', '/archive/list');
206 $this->assertEquals(200, $client->getResponse()->getStatusCode());
209 public function testStarred()
211 $this->logInAs('admin');
212 $client = $this->getClient();
214 $client->request('GET', '/starred/list');
216 $this->assertEquals(200, $client->getResponse()->getStatusCode());
219 public function testRangeException()
221 $this->logInAs('admin');
222 $client = $this->getClient();
224 $client->request('GET', '/all/list/900');
226 $this->assertEquals(302, $client->getResponse()->getStatusCode());
227 $this->assertEquals('/all/list', $client->getResponse()->getTargetUrl());
231 * @depends testPostNewOk
233 public function testView()
235 $this->logInAs('admin');
236 $client = $this->getClient();
238 $content = $client->getContainer()
239 ->get('doctrine.orm.entity_manager')
240 ->getRepository('WallabagCoreBundle:Entry')
241 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
243 $client->request('GET', '/view/'.$content->getId());
245 $this->assertEquals(200, $client->getResponse()->getStatusCode());
246 $this->assertContains($content->getTitle(), $client->getResponse()->getContent());
250 * @depends testPostNewOk
252 * This test will require an internet connection.
254 public function testReload()
256 $this->logInAs('admin');
257 $client = $this->getClient();
259 $content = $client->getContainer()
260 ->get('doctrine.orm.entity_manager')
261 ->getRepository('WallabagCoreBundle:Entry')
262 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
265 $content->setContent('');
266 $client->getContainer()->get('doctrine.orm.entity_manager')->persist($content);
267 $client->getContainer()->get('doctrine.orm.entity_manager')->flush();
269 $client->request('GET', '/reload/'.$content->getId());
271 $this->assertEquals(302, $client->getResponse()->getStatusCode());
273 $content = $client->getContainer()
274 ->get('doctrine.orm.entity_manager')
275 ->getRepository('WallabagCoreBundle:Entry')
276 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
278 $this->assertNotEmpty($content->getContent());
281 public function testEdit()
283 $this->logInAs('admin');
284 $client = $this->getClient();
286 $content = $client->getContainer()
287 ->get('doctrine.orm.entity_manager')
288 ->getRepository('WallabagCoreBundle:Entry')
289 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
291 $crawler = $client->request('GET', '/edit/'.$content->getId());
293 $this->assertEquals(200, $client->getResponse()->getStatusCode());
295 $this->assertCount(1, $crawler->filter('input[id=entry_title]'));
296 $this->assertCount(1, $crawler->filter('button[id=entry_save]'));
299 public function testEditUpdate()
301 $this->logInAs('admin');
302 $client = $this->getClient();
304 $content = $client->getContainer()
305 ->get('doctrine.orm.entity_manager')
306 ->getRepository('WallabagCoreBundle:Entry')
307 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
309 $crawler = $client->request('GET', '/edit/'.$content->getId());
311 $this->assertEquals(200, $client->getResponse()->getStatusCode());
313 $form = $crawler->filter('button[type=submit]')->form();
316 'entry[title]' => 'My updated title hehe :)',
319 $client->submit($form, $data);
321 $this->assertEquals(302, $client->getResponse()->getStatusCode());
323 $crawler = $client->followRedirect();
325 $this->assertGreaterThan(1, $alert = $crawler->filter('div[id=article] h1')->extract(array('_text')));
326 $this->assertContains('My updated title hehe :)', $alert[0]);
329 public function testToggleArchive()
331 $this->logInAs('admin');
332 $client = $this->getClient();
334 $content = $client->getContainer()
335 ->get('doctrine.orm.entity_manager')
336 ->getRepository('WallabagCoreBundle:Entry')
337 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
339 $client->request('GET', '/archive/'.$content->getId());
341 $this->assertEquals(302, $client->getResponse()->getStatusCode());
343 $res = $client->getContainer()
344 ->get('doctrine.orm.entity_manager')
345 ->getRepository('WallabagCoreBundle:Entry')
346 ->find($content->getId());
348 $this->assertEquals($res->isArchived(), true);
351 public function testToggleStar()
353 $this->logInAs('admin');
354 $client = $this->getClient();
356 $content = $client->getContainer()
357 ->get('doctrine.orm.entity_manager')
358 ->getRepository('WallabagCoreBundle:Entry')
359 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
361 $client->request('GET', '/star/'.$content->getId());
363 $this->assertEquals(302, $client->getResponse()->getStatusCode());
365 $res = $client->getContainer()
366 ->get('doctrine.orm.entity_manager')
367 ->getRepository('WallabagCoreBundle:Entry')
368 ->findOneById($content->getId());
370 $this->assertEquals($res->isStarred(), true);
373 public function testDelete()
375 $this->logInAs('admin');
376 $client = $this->getClient();
378 $content = $client->getContainer()
379 ->get('doctrine.orm.entity_manager')
380 ->getRepository('WallabagCoreBundle:Entry')
381 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
383 $client->request('GET', '/delete/'.$content->getId());
385 $this->assertEquals(302, $client->getResponse()->getStatusCode());
387 $client->request('GET', '/delete/'.$content->getId());
389 $this->assertEquals(404, $client->getResponse()->getStatusCode());
393 * It will create a new entry.
397 * And it'll check that user won't be redirected to the view page of the content when it had been removed
399 public function testViewAndDelete()
401 $this->logInAs('admin');
402 $client = $this->getClient();
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');
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');
420 $client->getContainer()
421 ->get('doctrine.orm.entity_manager')
423 $client->getContainer()
424 ->get('doctrine.orm.entity_manager')
427 $client->request('GET', '/view/'.$content->getId());
428 $this->assertEquals(200, $client->getResponse()->getStatusCode());
430 $client->request('GET', '/delete/'.$content->getId());
431 $this->assertEquals(302, $client->getResponse()->getStatusCode());
433 $client->followRedirect();
434 $this->assertEquals(200, $client->getResponse()->getStatusCode());
437 public function testViewOtherUserEntry()
439 $this->logInAs('admin');
440 $client = $this->getClient();
442 $content = $client->getContainer()
443 ->get('doctrine.orm.entity_manager')
444 ->getRepository('WallabagCoreBundle:Entry')
445 ->findOneByUsernameAndNotArchived('bob');
447 $client->request('GET', '/view/'.$content->getId());
449 $this->assertEquals(403, $client->getResponse()->getStatusCode());
452 public function testFilterOnReadingTime()
454 $this->logInAs('admin');
455 $client = $this->getClient();
457 $crawler = $client->request('GET', '/unread/list');
459 $form = $crawler->filter('button[id=submit-filter]')->form();
462 'entry_filter[readingTime][right_number]' => 11,
463 'entry_filter[readingTime][left_number]' => 11,
466 $crawler = $client->submit($form, $data);
468 $this->assertCount(1, $crawler->filter('div[class=entry]'));
471 public function testFilterOnCreationDate()
473 $this->logInAs('admin');
474 $client = $this->getClient();
476 $crawler = $client->request('GET', '/unread/list');
478 $form = $crawler->filter('button[id=submit-filter]')->form();
481 'entry_filter[createdAt][left_date]' => date('d/m/Y'),
482 'entry_filter[createdAt][right_date]' => date('d/m/Y', strtotime('+1 day')),
485 $crawler = $client->submit($form, $data);
487 $this->assertCount(5, $crawler->filter('div[class=entry]'));
490 'entry_filter[createdAt][left_date]' => date('d/m/Y'),
491 'entry_filter[createdAt][right_date]' => date('d/m/Y'),
494 $crawler = $client->submit($form, $data);
496 $this->assertCount(5, $crawler->filter('div[class=entry]'));
499 'entry_filter[createdAt][left_date]' => '01/01/1970',
500 'entry_filter[createdAt][right_date]' => '01/01/1970',
503 $crawler = $client->submit($form, $data);
505 $this->assertCount(0, $crawler->filter('div[class=entry]'));
508 public function testPaginationWithFilter()
510 $this->logInAs('admin');
511 $client = $this->getClient();
512 $crawler = $client->request('GET', '/config');
514 $form = $crawler->filter('button[id=config_save]')->form();
517 'config[items_per_page]' => '1',
520 $client->submit($form, $data);
522 $parameters = '?entry_filter%5BreadingTime%5D%5Bleft_number%5D=&entry_filter%5BreadingTime%5D%5Bright_number%5D=';
524 $client->request('GET', 'unread/list'.$parameters);
526 $this->assertContains($parameters, $client->getResponse()->getContent());
529 $crawler = $client->request('GET', '/config');
530 $form = $crawler->filter('button[id=config_save]')->form();
532 'config[items_per_page]' => '12',
534 $client->submit($form, $data);
537 public function testFilterOnDomainName()
539 $this->logInAs('admin');
540 $client = $this->getClient();
542 $crawler = $client->request('GET', '/unread/list');
543 $form = $crawler->filter('button[id=submit-filter]')->form();
545 'entry_filter[domainName]' => 'domain',
548 $crawler = $client->submit($form, $data);
549 $this->assertCount(5, $crawler->filter('div[class=entry]'));
551 $form = $crawler->filter('button[id=submit-filter]')->form();
553 'entry_filter[domainName]' => 'wallabag',
556 $crawler = $client->submit($form, $data);
557 $this->assertCount(0, $crawler->filter('div[class=entry]'));
560 public function testFilterOnStatus()
562 $this->logInAs('admin');
563 $client = $this->getClient();
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();
570 $crawler = $client->submit($form);
571 $this->assertCount(1, $crawler->filter('div[class=entry]'));
573 $form = $crawler->filter('button[id=submit-filter]')->form();
574 $form['entry_filter[isArchived]']->untick();
575 $form['entry_filter[isStarred]']->tick();
577 $crawler = $client->submit($form);
578 $this->assertCount(1, $crawler->filter('div[class=entry]'));
581 public function testPreviewPictureFilter()
583 $this->logInAs('admin');
584 $client = $this->getClient();
586 $crawler = $client->request('GET', '/unread/list');
587 $form = $crawler->filter('button[id=submit-filter]')->form();
588 $form['entry_filter[previewPicture]']->tick();
590 $crawler = $client->submit($form);
591 $this->assertCount(1, $crawler->filter('div[class=entry]'));
594 public function testFilterOnLanguage()
596 $this->logInAs('admin');
597 $client = $this->getClient();
599 $crawler = $client->request('GET', '/unread/list');
600 $form = $crawler->filter('button[id=submit-filter]')->form();
602 'entry_filter[language]' => 'fr',
605 $crawler = $client->submit($form, $data);
606 $this->assertCount(2, $crawler->filter('div[class=entry]'));
608 $form = $crawler->filter('button[id=submit-filter]')->form();
610 'entry_filter[language]' => 'en',
613 $crawler = $client->submit($form, $data);
614 $this->assertCount(2, $crawler->filter('div[class=entry]'));