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 testGetNew()
24 $this->logInAs('admin');
25 $client = $this->getClient();
27 $crawler = $client->request('GET', '/new');
29 $this->assertEquals(200, $client->getResponse()->getStatusCode());
31 $this->assertCount(1, $crawler->filter('input[type=url]'));
32 $this->assertCount(1, $crawler->filter('button[type=submit]'));
35 public function testPostNewViaBookmarklet()
37 $this->logInAs('admin');
38 $client = $this->getClient();
40 $crawler = $client->request('GET', '/');
42 $this->assertCount(4, $crawler->filter('div[class=entry]'));
45 $crawler = $client->request('GET', '/bookmarklet', array('url' => $this->url
));
46 $this->assertEquals(302, $client->getResponse()->getStatusCode());
47 $crawler = $client->followRedirect();
48 $crawler = $client->request('GET', '/');
49 $this->assertCount(5, $crawler->filter('div[class=entry]'));
51 $em = $client->getContainer()
52 ->get('doctrine.orm.entity_manager');
54 ->getRepository('WallabagCoreBundle:Entry')
55 ->findOneByUrl($this->url
);
60 public function testPostNewEmpty()
62 $this->logInAs('admin');
63 $client = $this->getClient();
65 $crawler = $client->request('GET', '/new');
67 $this->assertEquals(200, $client->getResponse()->getStatusCode());
69 $form = $crawler->filter('button[type=submit]')->form();
71 $crawler = $client->submit($form);
73 $this->assertEquals(200, $client->getResponse()->getStatusCode());
74 $this->assertCount(1, $alert = $crawler->filter('form ul li')->extract(array('_text')));
75 $this->assertEquals('This value should not be blank.', $alert[0]);
79 * This test will require an internet connection.
81 public function testPostNewOk()
83 $this->logInAs('admin');
84 $client = $this->getClient();
86 $crawler = $client->request('GET', '/new');
88 $this->assertEquals(200, $client->getResponse()->getStatusCode());
90 $form = $crawler->filter('button[type=submit]')->form();
93 'entry[url]' => $this->url
,
96 $client->submit($form, $data);
98 $this->assertEquals(302, $client->getResponse()->getStatusCode());
100 $crawler = $client->followRedirect();
102 $this->assertGreaterThan(1, $alert = $crawler->filter('h2 a')->extract(array('_text')));
103 $this->assertContains('Google', $alert[0]);
107 * This test will require an internet connection.
109 public function testPostNewThatWillBeTaggued()
111 $this->logInAs('admin');
112 $client = $this->getClient();
114 $crawler = $client->request('GET', '/new');
116 $this->assertEquals(200, $client->getResponse()->getStatusCode());
118 $form = $crawler->filter('button[type=submit]')->form();
121 'entry[url]' => $url = 'https://github.com/wallabag/wallabag',
124 $client->submit($form, $data);
126 $this->assertEquals(302, $client->getResponse()->getStatusCode());
128 $crawler = $client->followRedirect();
130 $em = $client->getContainer()
131 ->get('doctrine.orm.entity_manager');
133 ->getRepository('WallabagCoreBundle:Entry')
134 ->findOneByUrl($url);
135 $tags = $entry->getTags();
137 $this->assertCount(1, $tags);
138 $this->assertEquals('wallabag', $tags[0]->getLabel());
144 public function testArchive()
146 $this->logInAs('admin');
147 $client = $this->getClient();
149 $client->request('GET', '/archive/list');
151 $this->assertEquals(200, $client->getResponse()->getStatusCode());
154 public function testStarred()
156 $this->logInAs('admin');
157 $client = $this->getClient();
159 $client->request('GET', '/starred/list');
161 $this->assertEquals(200, $client->getResponse()->getStatusCode());
165 * @depends testPostNewOk
167 public function testView()
169 $this->logInAs('admin');
170 $client = $this->getClient();
172 $content = $client->getContainer()
173 ->get('doctrine.orm.entity_manager')
174 ->getRepository('WallabagCoreBundle:Entry')
175 ->findOneByUrl($this->url
);
177 $client->request('GET', '/view/'.$content->getId());
179 $this->assertEquals(200, $client->getResponse()->getStatusCode());
180 $this->assertContains($content->getTitle(), $client->getResponse()->getContent());
184 * @depends testPostNewOk
186 * This test will require an internet connection.
188 public function testReload()
190 $this->logInAs('admin');
191 $client = $this->getClient();
193 $content = $client->getContainer()
194 ->get('doctrine.orm.entity_manager')
195 ->getRepository('WallabagCoreBundle:Entry')
196 ->findOneByUrl($this->url
);
199 $content->setContent('');
200 $client->getContainer()->get('doctrine.orm.entity_manager')->persist($content);
201 $client->getContainer()->get('doctrine.orm.entity_manager')->flush();
203 $client->request('GET', '/reload/'.$content->getId());
205 $this->assertEquals(302, $client->getResponse()->getStatusCode());
207 $content = $client->getContainer()
208 ->get('doctrine.orm.entity_manager')
209 ->getRepository('WallabagCoreBundle:Entry')
210 ->findOneByUrl($this->url
);
212 $this->assertNotEmpty($content->getContent());
215 public function testEdit()
217 $this->logInAs('admin');
218 $client = $this->getClient();
220 $content = $client->getContainer()
221 ->get('doctrine.orm.entity_manager')
222 ->getRepository('WallabagCoreBundle:Entry')
223 ->findOneByUrl($this->url
);
225 $crawler = $client->request('GET', '/edit/'.$content->getId());
227 $this->assertEquals(200, $client->getResponse()->getStatusCode());
229 $this->assertCount(1, $crawler->filter('input[id=entry_title]'));
230 $this->assertCount(1, $crawler->filter('button[id=entry_save]'));
233 public function testEditUpdate()
235 $this->logInAs('admin');
236 $client = $this->getClient();
238 $content = $client->getContainer()
239 ->get('doctrine.orm.entity_manager')
240 ->getRepository('WallabagCoreBundle:Entry')
241 ->findOneByUrl($this->url
);
243 $crawler = $client->request('GET', '/edit/'.$content->getId());
245 $this->assertEquals(200, $client->getResponse()->getStatusCode());
247 $form = $crawler->filter('button[type=submit]')->form();
250 'entry[title]' => 'My updated title hehe :)',
253 $client->submit($form, $data);
255 $this->assertEquals(302, $client->getResponse()->getStatusCode());
257 $crawler = $client->followRedirect();
259 $this->assertGreaterThan(1, $alert = $crawler->filter('div[id=article] h1')->extract(array('_text')));
260 $this->assertContains('My updated title hehe :)', $alert[0]);
263 public function testToggleArchive()
265 $this->logInAs('admin');
266 $client = $this->getClient();
268 $content = $client->getContainer()
269 ->get('doctrine.orm.entity_manager')
270 ->getRepository('WallabagCoreBundle:Entry')
271 ->findOneByUrl($this->url
);
273 $client->request('GET', '/archive/'.$content->getId());
275 $this->assertEquals(302, $client->getResponse()->getStatusCode());
277 $res = $client->getContainer()
278 ->get('doctrine.orm.entity_manager')
279 ->getRepository('WallabagCoreBundle:Entry')
280 ->find($content->getId());
282 $this->assertEquals($res->isArchived(), true);
285 public function testToggleStar()
287 $this->logInAs('admin');
288 $client = $this->getClient();
290 $content = $client->getContainer()
291 ->get('doctrine.orm.entity_manager')
292 ->getRepository('WallabagCoreBundle:Entry')
293 ->findOneByUrl($this->url
);
295 $client->request('GET', '/star/'.$content->getId());
297 $this->assertEquals(302, $client->getResponse()->getStatusCode());
299 $res = $client->getContainer()
300 ->get('doctrine.orm.entity_manager')
301 ->getRepository('WallabagCoreBundle:Entry')
302 ->findOneById($content->getId());
304 $this->assertEquals($res->isStarred(), true);
307 public function testDelete()
309 $this->logInAs('admin');
310 $client = $this->getClient();
312 $content = $client->getContainer()
313 ->get('doctrine.orm.entity_manager')
314 ->getRepository('WallabagCoreBundle:Entry')
315 ->findOneByUrl($this->url
);
317 $client->request('GET', '/delete/'.$content->getId());
319 $this->assertEquals(302, $client->getResponse()->getStatusCode());
321 $client->request('GET', '/delete/'.$content->getId());
323 $this->assertEquals(404, $client->getResponse()->getStatusCode());
327 * It will create a new entry.
331 * And it'll check that user won't be redirected to the view page of the content when it had been removed
333 public function testViewAndDelete()
335 $this->logInAs('admin');
336 $client = $this->getClient();
338 // add a new content to be removed later
339 $user = $client->getContainer()
340 ->get('doctrine.orm.entity_manager')
341 ->getRepository('WallabagUserBundle:User')
342 ->findOneByUserName('admin');
344 $content = new Entry($user);
345 $content->setUrl('http://1.1.1.1/entry');
346 $content->setReadingTime(12);
347 $content->setDomainName('domain.io');
348 $content->setMimetype('text/html');
349 $content->setTitle('test title entry');
350 $content->setContent('This is my content /o/');
351 $content->setArchived(true);
352 $content->setLanguage('fr');
354 $client->getContainer()
355 ->get('doctrine.orm.entity_manager')
357 $client->getContainer()
358 ->get('doctrine.orm.entity_manager')
361 $client->request('GET', '/view/'.$content->getId());
362 $this->assertEquals(200, $client->getResponse()->getStatusCode());
364 $client->request('GET', '/delete/'.$content->getId());
365 $this->assertEquals(302, $client->getResponse()->getStatusCode());
367 $client->followRedirect();
368 $this->assertEquals(200, $client->getResponse()->getStatusCode());
371 public function testViewOtherUserEntry()
373 $this->logInAs('admin');
374 $client = $this->getClient();
376 $content = $client->getContainer()
377 ->get('doctrine.orm.entity_manager')
378 ->getRepository('WallabagCoreBundle:Entry')
379 ->findOneByUsernameAndNotArchived('bob');
381 $client->request('GET', '/view/'.$content->getId());
383 $this->assertEquals(403, $client->getResponse()->getStatusCode());
386 public function testFilterOnReadingTime()
388 $this->logInAs('admin');
389 $client = $this->getClient();
391 $crawler = $client->request('GET', '/unread/list');
393 $form = $crawler->filter('button[id=submit-filter]')->form();
396 'entry_filter[readingTime][right_number]' => 11,
397 'entry_filter[readingTime][left_number]' => 11,
400 $crawler = $client->submit($form, $data);
402 $this->assertCount(1, $crawler->filter('div[class=entry]'));
405 public function testFilterOnCreationDate()
407 $this->logInAs('admin');
408 $client = $this->getClient();
410 $crawler = $client->request('GET', '/unread/list');
412 $form = $crawler->filter('button[id=submit-filter]')->form();
415 'entry_filter[createdAt][left_date]' => date('d/m/Y'),
416 'entry_filter[createdAt][right_date]' => date('d/m/Y', strtotime('+1 day')),
419 $crawler = $client->submit($form, $data);
421 $this->assertCount(5, $crawler->filter('div[class=entry]'));
424 'entry_filter[createdAt][left_date]' => date('d/m/Y'),
425 'entry_filter[createdAt][right_date]' => date('d/m/Y'),
428 $crawler = $client->submit($form, $data);
430 $this->assertCount(5, $crawler->filter('div[class=entry]'));
433 'entry_filter[createdAt][left_date]' => '01/01/1970',
434 'entry_filter[createdAt][right_date]' => '01/01/1970',
437 $crawler = $client->submit($form, $data);
439 $this->assertCount(0, $crawler->filter('div[class=entry]'));
442 public function testPaginationWithFilter()
444 $this->logInAs('admin');
445 $client = $this->getClient();
446 $crawler = $client->request('GET', '/config');
448 $form = $crawler->filter('button[id=config_save]')->form();
451 'config[items_per_page]' => '1',
454 $client->submit($form, $data);
456 $parameters = '?entry_filter%5BreadingTime%5D%5Bleft_number%5D=&entry_filter%5BreadingTime%5D%5Bright_number%5D=';
458 $crawler = $client->request('GET', 'unread/list'.$parameters);
460 $this->assertContains($parameters, $client->getResponse()->getContent());
463 $crawler = $client->request('GET', '/config');
464 $form = $crawler->filter('button[id=config_save]')->form();
466 'config[items_per_page]' => '12',
468 $client->submit($form, $data);
471 public function testFilterOnDomainName()
473 $this->logInAs('admin');
474 $client = $this->getClient();
476 $crawler = $client->request('GET', '/unread/list');
477 $form = $crawler->filter('button[id=submit-filter]')->form();
479 'entry_filter[domainName]' => 'domain',
482 $crawler = $client->submit($form, $data);
483 $this->assertCount(5, $crawler->filter('div[class=entry]'));
485 $form = $crawler->filter('button[id=submit-filter]')->form();
487 'entry_filter[domainName]' => 'wallabag',
490 $crawler = $client->submit($form, $data);
491 $this->assertCount(0, $crawler->filter('div[class=entry]'));
494 public function testFilterOnStatus()
496 $this->logInAs('admin');
497 $client = $this->getClient();
499 $crawler = $client->request('GET', '/unread/list');
500 $form = $crawler->filter('button[id=submit-filter]')->form();
501 $form['entry_filter[isArchived]']->tick();
502 $form['entry_filter[isStarred]']->untick();
504 $crawler = $client->submit($form);
505 $this->assertCount(1, $crawler->filter('div[class=entry]'));
507 $form = $crawler->filter('button[id=submit-filter]')->form();
508 $form['entry_filter[isArchived]']->untick();
509 $form['entry_filter[isStarred]']->tick();
511 $crawler = $client->submit($form);
512 $this->assertCount(1, $crawler->filter('div[class=entry]'));
515 public function testPreviewPictureFilter()
517 $this->logInAs('admin');
518 $client = $this->getClient();
520 $crawler = $client->request('GET', '/unread/list');
521 $form = $crawler->filter('button[id=submit-filter]')->form();
522 $form['entry_filter[previewPicture]']->tick();
524 $crawler = $client->submit($form);
525 $this->assertCount(1, $crawler->filter('div[class=entry]'));
528 public function testFilterOnLanguage()
530 $this->logInAs('admin');
531 $client = $this->getClient();
533 $crawler = $client->request('GET', '/unread/list');
534 $form = $crawler->filter('button[id=submit-filter]')->form();
536 'entry_filter[language]' => 'fr',
539 $crawler = $client->submit($form, $data);
540 $this->assertCount(2, $crawler->filter('div[class=entry]'));
542 $form = $crawler->filter('button[id=submit-filter]')->form();
544 'entry_filter[language]' => 'en',
547 $crawler = $client->submit($form, $data);
548 $this->assertCount(2, $crawler->filter('div[class=entry]'));