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());
220 * @depends testPostNewOk
222 public function testView()
224 $this->logInAs('admin');
225 $client = $this->getClient();
227 $content = $client->getContainer()
228 ->get('doctrine.orm.entity_manager')
229 ->getRepository('WallabagCoreBundle:Entry')
230 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
232 $client->request('GET', '/view/'.$content->getId());
234 $this->assertEquals(200, $client->getResponse()->getStatusCode());
235 $this->assertContains($content->getTitle(), $client->getResponse()->getContent());
239 * @depends testPostNewOk
241 * This test will require an internet connection.
243 public function testReload()
245 $this->logInAs('admin');
246 $client = $this->getClient();
248 $content = $client->getContainer()
249 ->get('doctrine.orm.entity_manager')
250 ->getRepository('WallabagCoreBundle:Entry')
251 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
254 $content->setContent('');
255 $client->getContainer()->get('doctrine.orm.entity_manager')->persist($content);
256 $client->getContainer()->get('doctrine.orm.entity_manager')->flush();
258 $client->request('GET', '/reload/'.$content->getId());
260 $this->assertEquals(302, $client->getResponse()->getStatusCode());
262 $content = $client->getContainer()
263 ->get('doctrine.orm.entity_manager')
264 ->getRepository('WallabagCoreBundle:Entry')
265 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
267 $this->assertNotEmpty($content->getContent());
270 public function testEdit()
272 $this->logInAs('admin');
273 $client = $this->getClient();
275 $content = $client->getContainer()
276 ->get('doctrine.orm.entity_manager')
277 ->getRepository('WallabagCoreBundle:Entry')
278 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
280 $crawler = $client->request('GET', '/edit/'.$content->getId());
282 $this->assertEquals(200, $client->getResponse()->getStatusCode());
284 $this->assertCount(1, $crawler->filter('input[id=entry_title]'));
285 $this->assertCount(1, $crawler->filter('button[id=entry_save]'));
288 public function testEditUpdate()
290 $this->logInAs('admin');
291 $client = $this->getClient();
293 $content = $client->getContainer()
294 ->get('doctrine.orm.entity_manager')
295 ->getRepository('WallabagCoreBundle:Entry')
296 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
298 $crawler = $client->request('GET', '/edit/'.$content->getId());
300 $this->assertEquals(200, $client->getResponse()->getStatusCode());
302 $form = $crawler->filter('button[type=submit]')->form();
305 'entry[title]' => 'My updated title hehe :)',
308 $client->submit($form, $data);
310 $this->assertEquals(302, $client->getResponse()->getStatusCode());
312 $crawler = $client->followRedirect();
314 $this->assertGreaterThan(1, $alert = $crawler->filter('div[id=article] h1')->extract(array('_text')));
315 $this->assertContains('My updated title hehe :)', $alert[0]);
318 public function testToggleArchive()
320 $this->logInAs('admin');
321 $client = $this->getClient();
323 $content = $client->getContainer()
324 ->get('doctrine.orm.entity_manager')
325 ->getRepository('WallabagCoreBundle:Entry')
326 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
328 $client->request('GET', '/archive/'.$content->getId());
330 $this->assertEquals(302, $client->getResponse()->getStatusCode());
332 $res = $client->getContainer()
333 ->get('doctrine.orm.entity_manager')
334 ->getRepository('WallabagCoreBundle:Entry')
335 ->find($content->getId());
337 $this->assertEquals($res->isArchived(), true);
340 public function testToggleStar()
342 $this->logInAs('admin');
343 $client = $this->getClient();
345 $content = $client->getContainer()
346 ->get('doctrine.orm.entity_manager')
347 ->getRepository('WallabagCoreBundle:Entry')
348 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
350 $client->request('GET', '/star/'.$content->getId());
352 $this->assertEquals(302, $client->getResponse()->getStatusCode());
354 $res = $client->getContainer()
355 ->get('doctrine.orm.entity_manager')
356 ->getRepository('WallabagCoreBundle:Entry')
357 ->findOneById($content->getId());
359 $this->assertEquals($res->isStarred(), true);
362 public function testDelete()
364 $this->logInAs('admin');
365 $client = $this->getClient();
367 $content = $client->getContainer()
368 ->get('doctrine.orm.entity_manager')
369 ->getRepository('WallabagCoreBundle:Entry')
370 ->findByUrlAndUserId($this->url
, $this->getLoggedInUserId());
372 $client->request('GET', '/delete/'.$content->getId());
374 $this->assertEquals(302, $client->getResponse()->getStatusCode());
376 $client->request('GET', '/delete/'.$content->getId());
378 $this->assertEquals(404, $client->getResponse()->getStatusCode());
382 * It will create a new entry.
386 * And it'll check that user won't be redirected to the view page of the content when it had been removed
388 public function testViewAndDelete()
390 $this->logInAs('admin');
391 $client = $this->getClient();
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');
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');
409 $client->getContainer()
410 ->get('doctrine.orm.entity_manager')
412 $client->getContainer()
413 ->get('doctrine.orm.entity_manager')
416 $client->request('GET', '/view/'.$content->getId());
417 $this->assertEquals(200, $client->getResponse()->getStatusCode());
419 $client->request('GET', '/delete/'.$content->getId());
420 $this->assertEquals(302, $client->getResponse()->getStatusCode());
422 $client->followRedirect();
423 $this->assertEquals(200, $client->getResponse()->getStatusCode());
426 public function testViewOtherUserEntry()
428 $this->logInAs('admin');
429 $client = $this->getClient();
431 $content = $client->getContainer()
432 ->get('doctrine.orm.entity_manager')
433 ->getRepository('WallabagCoreBundle:Entry')
434 ->findOneByUsernameAndNotArchived('bob');
436 $client->request('GET', '/view/'.$content->getId());
438 $this->assertEquals(403, $client->getResponse()->getStatusCode());
441 public function testFilterOnReadingTime()
443 $this->logInAs('admin');
444 $client = $this->getClient();
446 $crawler = $client->request('GET', '/unread/list');
448 $form = $crawler->filter('button[id=submit-filter]')->form();
451 'entry_filter[readingTime][right_number]' => 11,
452 'entry_filter[readingTime][left_number]' => 11,
455 $crawler = $client->submit($form, $data);
457 $this->assertCount(1, $crawler->filter('div[class=entry]'));
460 public function testFilterOnCreationDate()
462 $this->logInAs('admin');
463 $client = $this->getClient();
465 $crawler = $client->request('GET', '/unread/list');
467 $form = $crawler->filter('button[id=submit-filter]')->form();
470 'entry_filter[createdAt][left_date]' => date('d/m/Y'),
471 'entry_filter[createdAt][right_date]' => date('d/m/Y', strtotime('+1 day')),
474 $crawler = $client->submit($form, $data);
476 $this->assertCount(5, $crawler->filter('div[class=entry]'));
479 'entry_filter[createdAt][left_date]' => date('d/m/Y'),
480 'entry_filter[createdAt][right_date]' => date('d/m/Y'),
483 $crawler = $client->submit($form, $data);
485 $this->assertCount(5, $crawler->filter('div[class=entry]'));
488 'entry_filter[createdAt][left_date]' => '01/01/1970',
489 'entry_filter[createdAt][right_date]' => '01/01/1970',
492 $crawler = $client->submit($form, $data);
494 $this->assertCount(0, $crawler->filter('div[class=entry]'));
497 public function testPaginationWithFilter()
499 $this->logInAs('admin');
500 $client = $this->getClient();
501 $crawler = $client->request('GET', '/config');
503 $form = $crawler->filter('button[id=config_save]')->form();
506 'config[items_per_page]' => '1',
509 $client->submit($form, $data);
511 $parameters = '?entry_filter%5BreadingTime%5D%5Bleft_number%5D=&entry_filter%5BreadingTime%5D%5Bright_number%5D=';
513 $client->request('GET', 'unread/list'.$parameters);
515 $this->assertContains($parameters, $client->getResponse()->getContent());
518 $crawler = $client->request('GET', '/config');
519 $form = $crawler->filter('button[id=config_save]')->form();
521 'config[items_per_page]' => '12',
523 $client->submit($form, $data);
526 public function testFilterOnDomainName()
528 $this->logInAs('admin');
529 $client = $this->getClient();
531 $crawler = $client->request('GET', '/unread/list');
532 $form = $crawler->filter('button[id=submit-filter]')->form();
534 'entry_filter[domainName]' => 'domain',
537 $crawler = $client->submit($form, $data);
538 $this->assertCount(5, $crawler->filter('div[class=entry]'));
540 $form = $crawler->filter('button[id=submit-filter]')->form();
542 'entry_filter[domainName]' => 'wallabag',
545 $crawler = $client->submit($form, $data);
546 $this->assertCount(0, $crawler->filter('div[class=entry]'));
549 public function testFilterOnStatus()
551 $this->logInAs('admin');
552 $client = $this->getClient();
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();
559 $crawler = $client->submit($form);
560 $this->assertCount(1, $crawler->filter('div[class=entry]'));
562 $form = $crawler->filter('button[id=submit-filter]')->form();
563 $form['entry_filter[isArchived]']->untick();
564 $form['entry_filter[isStarred]']->tick();
566 $crawler = $client->submit($form);
567 $this->assertCount(1, $crawler->filter('div[class=entry]'));
570 public function testPreviewPictureFilter()
572 $this->logInAs('admin');
573 $client = $this->getClient();
575 $crawler = $client->request('GET', '/unread/list');
576 $form = $crawler->filter('button[id=submit-filter]')->form();
577 $form['entry_filter[previewPicture]']->tick();
579 $crawler = $client->submit($form);
580 $this->assertCount(1, $crawler->filter('div[class=entry]'));
583 public function testFilterOnLanguage()
585 $this->logInAs('admin');
586 $client = $this->getClient();
588 $crawler = $client->request('GET', '/unread/list');
589 $form = $crawler->filter('button[id=submit-filter]')->form();
591 'entry_filter[language]' => 'fr',
594 $crawler = $client->submit($form, $data);
595 $this->assertCount(2, $crawler->filter('div[class=entry]'));
597 $form = $crawler->filter('button[id=submit-filter]')->form();
599 'entry_filter[language]' => 'en',
602 $crawler = $client->submit($form, $data);
603 $this->assertCount(2, $crawler->filter('div[class=entry]'));