3 namespace Wallabag\CoreBundle\Tests\Controller
;
5 use Wallabag\CoreBundle\Tests\WallabagCoreTestCase
;
7 class EntryControllerTest
extends WallabagCoreTestCase
9 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 public function testLogin()
13 $client = $this->getClient();
15 $client->request('GET', '/new');
17 $this->assertEquals(302, $client->getResponse()->getStatusCode());
18 $this->assertContains('login', $client->getResponse()->headers
->get('location'));
21 public function testGetNew()
23 $this->logInAs('admin');
24 $client = $this->getClient();
26 $crawler = $client->request('GET', '/new');
28 $this->assertEquals(200, $client->getResponse()->getStatusCode());
30 $this->assertCount(1, $crawler->filter('input[type=url]'));
31 $this->assertCount(1, $crawler->filter('button[type=submit]'));
34 public function testPostNewViaBookmarklet()
36 $this->logInAs('admin');
37 $client = $this->getClient();
39 $crawler = $client->request('GET', '/');
41 $this->assertCount(4, $crawler->filter('div[class=entry]'));
44 $crawler = $client->request('GET', '/bookmarklet', array('url' => $this->url
));
45 $this->assertEquals(302, $client->getResponse()->getStatusCode());
46 $crawler = $client->followRedirect();
47 $crawler = $client->request('GET', '/');
48 $this->assertCount(5, $crawler->filter('div[class=entry]'));
50 $em = $client->getContainer()
51 ->get('doctrine.orm.entity_manager');
53 ->getRepository('WallabagCoreBundle:Entry')
54 ->findOneByUrl($this->url
);
59 public function testPostNewEmpty()
61 $this->logInAs('admin');
62 $client = $this->getClient();
64 $crawler = $client->request('GET', '/new');
66 $this->assertEquals(200, $client->getResponse()->getStatusCode());
68 $form = $crawler->filter('button[type=submit]')->form();
70 $crawler = $client->submit($form);
72 $this->assertEquals(200, $client->getResponse()->getStatusCode());
73 $this->assertCount(1, $alert = $crawler->filter('form ul li')->extract(array('_text')));
74 $this->assertEquals('This value should not be blank.', $alert[0]);
78 * This test will require an internet connection.
80 public function testPostNewOk()
82 $this->logInAs('admin');
83 $client = $this->getClient();
85 $crawler = $client->request('GET', '/new');
87 $this->assertEquals(200, $client->getResponse()->getStatusCode());
89 $form = $crawler->filter('button[type=submit]')->form();
92 'entry[url]' => $this->url
,
95 $client->submit($form, $data);
97 $this->assertEquals(302, $client->getResponse()->getStatusCode());
99 $crawler = $client->followRedirect();
101 $this->assertGreaterThan(1, $alert = $crawler->filter('h2 a')->extract(array('_text')));
102 $this->assertContains('Google', $alert[0]);
106 * This test will require an internet connection.
108 public function testPostNewThatWillBeTaggued()
110 $this->logInAs('admin');
111 $client = $this->getClient();
113 $crawler = $client->request('GET', '/new');
115 $this->assertEquals(200, $client->getResponse()->getStatusCode());
117 $form = $crawler->filter('button[type=submit]')->form();
120 'entry[url]' => $url = 'https://github.com/wallabag/wallabag',
123 $client->submit($form, $data);
125 $this->assertEquals(302, $client->getResponse()->getStatusCode());
127 $crawler = $client->followRedirect();
129 $em = $client->getContainer()
130 ->get('doctrine.orm.entity_manager');
132 ->getRepository('WallabagCoreBundle:Entry')
133 ->findOneByUrl($url);
134 $tags = $entry->getTags();
136 $this->assertCount(1, $tags);
137 $this->assertEquals('wallabag', $tags[0]->getLabel());
143 public function testArchive()
145 $this->logInAs('admin');
146 $client = $this->getClient();
148 $client->request('GET', '/archive/list');
150 $this->assertEquals(200, $client->getResponse()->getStatusCode());
153 public function testStarred()
155 $this->logInAs('admin');
156 $client = $this->getClient();
158 $client->request('GET', '/starred/list');
160 $this->assertEquals(200, $client->getResponse()->getStatusCode());
164 * @depends testPostNewOk
166 public function testView()
168 $this->logInAs('admin');
169 $client = $this->getClient();
171 $content = $client->getContainer()
172 ->get('doctrine.orm.entity_manager')
173 ->getRepository('WallabagCoreBundle:Entry')
174 ->findOneByUrl($this->url
);
176 $client->request('GET', '/view/'.$content->getId());
178 $this->assertEquals(200, $client->getResponse()->getStatusCode());
179 $this->assertContains($content->getTitle(), $client->getResponse()->getContent());
182 public function testEdit()
184 $this->logInAs('admin');
185 $client = $this->getClient();
187 $content = $client->getContainer()
188 ->get('doctrine.orm.entity_manager')
189 ->getRepository('WallabagCoreBundle:Entry')
190 ->findOneByUrl($this->url
);
192 $crawler = $client->request('GET', '/edit/'.$content->getId());
194 $this->assertEquals(200, $client->getResponse()->getStatusCode());
196 $this->assertCount(1, $crawler->filter('input[id=entry_title]'));
197 $this->assertCount(1, $crawler->filter('button[id=entry_save]'));
200 public function testEditUpdate()
202 $this->logInAs('admin');
203 $client = $this->getClient();
205 $content = $client->getContainer()
206 ->get('doctrine.orm.entity_manager')
207 ->getRepository('WallabagCoreBundle:Entry')
208 ->findOneByUrl($this->url
);
210 $crawler = $client->request('GET', '/edit/'.$content->getId());
212 $this->assertEquals(200, $client->getResponse()->getStatusCode());
214 $form = $crawler->filter('button[type=submit]')->form();
217 'entry[title]' => 'My updated title hehe :)',
220 $client->submit($form, $data);
222 $this->assertEquals(302, $client->getResponse()->getStatusCode());
224 $crawler = $client->followRedirect();
226 $this->assertGreaterThan(1, $alert = $crawler->filter('div[id=article] h1')->extract(array('_text')));
227 $this->assertContains('My updated title hehe :)', $alert[0]);
230 public function testToggleArchive()
232 $this->logInAs('admin');
233 $client = $this->getClient();
235 $content = $client->getContainer()
236 ->get('doctrine.orm.entity_manager')
237 ->getRepository('WallabagCoreBundle:Entry')
238 ->findOneByUrl($this->url
);
240 $client->request('GET', '/archive/'.$content->getId());
242 $this->assertEquals(302, $client->getResponse()->getStatusCode());
244 $res = $client->getContainer()
245 ->get('doctrine.orm.entity_manager')
246 ->getRepository('WallabagCoreBundle:Entry')
247 ->find($content->getId());
249 $this->assertEquals($res->isArchived(), true);
252 public function testToggleStar()
254 $this->logInAs('admin');
255 $client = $this->getClient();
257 $content = $client->getContainer()
258 ->get('doctrine.orm.entity_manager')
259 ->getRepository('WallabagCoreBundle:Entry')
260 ->findOneByUrl($this->url
);
262 $client->request('GET', '/star/'.$content->getId());
264 $this->assertEquals(302, $client->getResponse()->getStatusCode());
266 $res = $client->getContainer()
267 ->get('doctrine.orm.entity_manager')
268 ->getRepository('WallabagCoreBundle:Entry')
269 ->findOneById($content->getId());
271 $this->assertEquals($res->isStarred(), true);
274 public function testDelete()
276 $this->logInAs('admin');
277 $client = $this->getClient();
279 $content = $client->getContainer()
280 ->get('doctrine.orm.entity_manager')
281 ->getRepository('WallabagCoreBundle:Entry')
282 ->findOneByUrl($this->url
);
284 $client->request('GET', '/delete/'.$content->getId());
286 $this->assertEquals(302, $client->getResponse()->getStatusCode());
288 $client->request('GET', '/delete/'.$content->getId());
290 $this->assertEquals(404, $client->getResponse()->getStatusCode());
293 public function testViewOtherUserEntry()
295 $this->logInAs('admin');
296 $client = $this->getClient();
298 $content = $client->getContainer()
299 ->get('doctrine.orm.entity_manager')
300 ->getRepository('WallabagCoreBundle:Entry')
301 ->findOneByUsernameAndNotArchived('bob');
303 $client->request('GET', '/view/'.$content->getId());
305 $this->assertEquals(403, $client->getResponse()->getStatusCode());
308 public function testFilterOnReadingTime()
310 $this->logInAs('admin');
311 $client = $this->getClient();
313 $crawler = $client->request('GET', '/unread/list');
315 $form = $crawler->filter('button[id=submit-filter]')->form();
318 'entry_filter[readingTime][right_number]' => 11,
319 'entry_filter[readingTime][left_number]' => 11,
322 $crawler = $client->submit($form, $data);
324 $this->assertCount(1, $crawler->filter('div[class=entry]'));
327 public function testFilterOnCreationDate()
329 $this->logInAs('admin');
330 $client = $this->getClient();
332 $crawler = $client->request('GET', '/unread/list');
334 $form = $crawler->filter('button[id=submit-filter]')->form();
337 'entry_filter[createdAt][left_date]' => date('d/m/Y'),
338 'entry_filter[createdAt][right_date]' => date('d/m/Y', strtotime('+1 day')),
341 $crawler = $client->submit($form, $data);
343 $this->assertCount(5, $crawler->filter('div[class=entry]'));
346 'entry_filter[createdAt][left_date]' => date('d/m/Y'),
347 'entry_filter[createdAt][right_date]' => date('d/m/Y'),
350 $crawler = $client->submit($form, $data);
352 $this->assertCount(5, $crawler->filter('div[class=entry]'));
355 'entry_filter[createdAt][left_date]' => '01/01/1970',
356 'entry_filter[createdAt][right_date]' => '01/01/1970',
359 $crawler = $client->submit($form, $data);
361 $this->assertCount(0, $crawler->filter('div[class=entry]'));
364 public function testPaginationWithFilter()
366 $this->logInAs('admin');
367 $client = $this->getClient();
368 $crawler = $client->request('GET', '/config');
370 $form = $crawler->filter('button[id=config_save]')->form();
373 'config[items_per_page]' => '1',
376 $client->submit($form, $data);
378 $parameters = '?entry_filter%5BreadingTime%5D%5Bleft_number%5D=&entry_filter%5BreadingTime%5D%5Bright_number%5D=';
380 $crawler = $client->request('GET', 'unread/list'.$parameters);
382 $this->assertContains($parameters, $client->getResponse()->getContent());
385 $crawler = $client->request('GET', '/config');
386 $form = $crawler->filter('button[id=config_save]')->form();
388 'config[items_per_page]' => '12',
390 $client->submit($form, $data);
393 public function testFilterOnDomainName()
395 $this->logInAs('admin');
396 $client = $this->getClient();
398 $crawler = $client->request('GET', '/unread/list');
399 $form = $crawler->filter('button[id=submit-filter]')->form();
401 'entry_filter[domainName]' => 'domain',
404 $crawler = $client->submit($form, $data);
405 $this->assertCount(5, $crawler->filter('div[class=entry]'));
407 $form = $crawler->filter('button[id=submit-filter]')->form();
409 'entry_filter[domainName]' => 'wallabag',
412 $crawler = $client->submit($form, $data);
413 $this->assertCount(0, $crawler->filter('div[class=entry]'));
416 public function testFilterOnStatus()
418 $this->logInAs('admin');
419 $client = $this->getClient();
421 $crawler = $client->request('GET', '/unread/list');
422 $form = $crawler->filter('button[id=submit-filter]')->form();
423 $form['entry_filter[isArchived]']->tick();
424 $form['entry_filter[isStarred]']->untick();
426 $crawler = $client->submit($form);
427 $this->assertCount(1, $crawler->filter('div[class=entry]'));
429 $form = $crawler->filter('button[id=submit-filter]')->form();
430 $form['entry_filter[isArchived]']->untick();
431 $form['entry_filter[isStarred]']->tick();
433 $crawler = $client->submit($form);
434 $this->assertCount(1, $crawler->filter('div[class=entry]'));
437 public function testPreviewPictureFilter()
439 $this->logInAs('admin');
440 $client = $this->getClient();
442 $crawler = $client->request('GET', '/unread/list');
443 $form = $crawler->filter('button[id=submit-filter]')->form();
444 $form['entry_filter[previewPicture]']->tick();
446 $crawler = $client->submit($form);
447 $this->assertCount(1, $crawler->filter('div[class=entry]'));
450 public function testFilterOnLanguage()
452 $this->logInAs('admin');
453 $client = $this->getClient();
455 $crawler = $client->request('GET', '/unread/list');
456 $form = $crawler->filter('button[id=submit-filter]')->form();
458 'entry_filter[language]' => 'fr',
461 $crawler = $client->submit($form, $data);
462 $this->assertCount(2, $crawler->filter('div[class=entry]'));
464 $form = $crawler->filter('button[id=submit-filter]')->form();
466 'entry_filter[language]' => 'en',
469 $crawler = $client->submit($form, $data);
470 $this->assertCount(2, $crawler->filter('div[class=entry]'));