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]);
77 public function testPostNewOk()
79 $this->logInAs('admin');
80 $client = $this->getClient();
82 $crawler = $client->request('GET', '/new');
84 $this->assertEquals(200, $client->getResponse()->getStatusCode());
86 $form = $crawler->filter('button[type=submit]')->form();
89 'entry[url]' => $this->url
,
92 $client->submit($form, $data);
94 $this->assertEquals(302, $client->getResponse()->getStatusCode());
96 $crawler = $client->followRedirect();
98 $this->assertGreaterThan(1, $alert = $crawler->filter('h2 a')->extract(array('_text')));
99 $this->assertContains('Google', $alert[0]);
102 public function testArchive()
104 $this->logInAs('admin');
105 $client = $this->getClient();
107 $client->request('GET', '/archive/list');
109 $this->assertEquals(200, $client->getResponse()->getStatusCode());
112 public function testStarred()
114 $this->logInAs('admin');
115 $client = $this->getClient();
117 $client->request('GET', '/starred/list');
119 $this->assertEquals(200, $client->getResponse()->getStatusCode());
122 public function testView()
124 $this->logInAs('admin');
125 $client = $this->getClient();
127 $content = $client->getContainer()
128 ->get('doctrine.orm.entity_manager')
129 ->getRepository('WallabagCoreBundle:Entry')
130 ->findOneByUrl($this->url
);
132 $client->request('GET', '/view/'.$content->getId());
134 $this->assertEquals(200, $client->getResponse()->getStatusCode());
135 $this->assertContains($content->getTitle(), $client->getResponse()->getContent());
138 public function testEdit()
140 $this->logInAs('admin');
141 $client = $this->getClient();
143 $content = $client->getContainer()
144 ->get('doctrine.orm.entity_manager')
145 ->getRepository('WallabagCoreBundle:Entry')
146 ->findOneByUrl($this->url
);
148 $crawler = $client->request('GET', '/edit/'.$content->getId());
150 $this->assertEquals(200, $client->getResponse()->getStatusCode());
152 $this->assertCount(1, $crawler->filter('input[id=entry_title]'));
153 $this->assertCount(1, $crawler->filter('button[id=entry_save]'));
156 public function testEditUpdate()
158 $this->logInAs('admin');
159 $client = $this->getClient();
161 $content = $client->getContainer()
162 ->get('doctrine.orm.entity_manager')
163 ->getRepository('WallabagCoreBundle:Entry')
164 ->findOneByUrl($this->url
);
166 $crawler = $client->request('GET', '/edit/'.$content->getId());
168 $this->assertEquals(200, $client->getResponse()->getStatusCode());
170 $form = $crawler->filter('button[type=submit]')->form();
173 'entry[title]' => 'My updated title hehe :)',
176 $client->submit($form, $data);
178 $this->assertEquals(302, $client->getResponse()->getStatusCode());
180 $crawler = $client->followRedirect();
182 $this->assertGreaterThan(1, $alert = $crawler->filter('div[id=article] h1')->extract(array('_text')));
183 $this->assertContains('My updated title hehe :)', $alert[0]);
186 public function testToggleArchive()
188 $this->logInAs('admin');
189 $client = $this->getClient();
191 $content = $client->getContainer()
192 ->get('doctrine.orm.entity_manager')
193 ->getRepository('WallabagCoreBundle:Entry')
194 ->findOneByUrl($this->url
);
196 $client->request('GET', '/archive/'.$content->getId());
198 $this->assertEquals(302, $client->getResponse()->getStatusCode());
200 $res = $client->getContainer()
201 ->get('doctrine.orm.entity_manager')
202 ->getRepository('WallabagCoreBundle:Entry')
203 ->find($content->getId());
205 $this->assertEquals($res->isArchived(), true);
208 public function testToggleStar()
210 $this->logInAs('admin');
211 $client = $this->getClient();
213 $content = $client->getContainer()
214 ->get('doctrine.orm.entity_manager')
215 ->getRepository('WallabagCoreBundle:Entry')
216 ->findOneByUrl($this->url
);
218 $client->request('GET', '/star/'.$content->getId());
220 $this->assertEquals(302, $client->getResponse()->getStatusCode());
222 $res = $client->getContainer()
223 ->get('doctrine.orm.entity_manager')
224 ->getRepository('WallabagCoreBundle:Entry')
225 ->findOneById($content->getId());
227 $this->assertEquals($res->isStarred(), true);
230 public function testDelete()
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', '/delete/'.$content->getId());
242 $this->assertEquals(302, $client->getResponse()->getStatusCode());
244 $client->request('GET', '/delete/'.$content->getId());
246 $this->assertEquals(404, $client->getResponse()->getStatusCode());
249 public function testViewOtherUserEntry()
251 $this->logInAs('admin');
252 $client = $this->getClient();
254 $content = $client->getContainer()
255 ->get('doctrine.orm.entity_manager')
256 ->getRepository('WallabagCoreBundle:Entry')
257 ->findOneByUsernameAndNotArchived('bob');
259 $client->request('GET', '/view/'.$content->getId());
261 $this->assertEquals(403, $client->getResponse()->getStatusCode());
264 public function testFilterOnReadingTime()
266 $this->logInAs('admin');
267 $client = $this->getClient();
269 $crawler = $client->request('GET', '/unread/list');
271 $form = $crawler->filter('button[id=submit-filter]')->form();
274 'entry_filter[readingTime][right_number]' => 11,
275 'entry_filter[readingTime][left_number]' => 11,
278 $crawler = $client->submit($form, $data);
280 $this->assertCount(1, $crawler->filter('div[class=entry]'));
283 public function testFilterOnCreationDate()
285 $this->logInAs('admin');
286 $client = $this->getClient();
288 $crawler = $client->request('GET', '/unread/list');
290 $form = $crawler->filter('button[id=submit-filter]')->form();
293 'entry_filter[createdAt][left_date]' => date('d/m/Y'),
294 'entry_filter[createdAt][right_date]' => date('d/m/Y', strtotime('+1 day')),
297 $crawler = $client->submit($form, $data);
299 $this->assertCount(5, $crawler->filter('div[class=entry]'));
302 'entry_filter[createdAt][left_date]' => date('d/m/Y'),
303 'entry_filter[createdAt][right_date]' => date('d/m/Y'),
306 $crawler = $client->submit($form, $data);
308 $this->assertCount(5, $crawler->filter('div[class=entry]'));
311 'entry_filter[createdAt][left_date]' => '01/01/1970',
312 'entry_filter[createdAt][right_date]' => '01/01/1970',
315 $crawler = $client->submit($form, $data);
317 $this->assertCount(0, $crawler->filter('div[class=entry]'));
320 public function testPaginationWithFilter()
322 $this->logInAs('admin');
323 $client = $this->getClient();
324 $crawler = $client->request('GET', '/config');
326 $form = $crawler->filter('button[id=config_save]')->form();
329 'config[items_per_page]' => '1',
332 $client->submit($form, $data);
334 $parameters = '?entry_filter%5BreadingTime%5D%5Bleft_number%5D=&entry_filter%5BreadingTime%5D%5Bright_number%5D=';
336 $crawler = $client->request('GET', 'unread/list'.$parameters);
338 $this->assertContains($parameters, $client->getResponse()->getContent());
341 $crawler = $client->request('GET', '/config');
342 $form = $crawler->filter('button[id=config_save]')->form();
344 'config[items_per_page]' => '12',
346 $client->submit($form, $data);
349 public function testFilterOnDomainName()
351 $this->logInAs('admin');
352 $client = $this->getClient();
354 $crawler = $client->request('GET', '/unread/list');
355 $form = $crawler->filter('button[id=submit-filter]')->form();
357 'entry_filter[domainName]' => 'domain',
360 $crawler = $client->submit($form, $data);
361 $this->assertCount(5, $crawler->filter('div[class=entry]'));
363 $form = $crawler->filter('button[id=submit-filter]')->form();
365 'entry_filter[domainName]' => 'wallabag',
368 $crawler = $client->submit($form, $data);
369 $this->assertCount(0, $crawler->filter('div[class=entry]'));
372 public function testFilterOnStatus()
374 $this->logInAs('admin');
375 $client = $this->getClient();
377 $crawler = $client->request('GET', '/unread/list');
378 $form = $crawler->filter('button[id=submit-filter]')->form();
379 $form['entry_filter[isArchived]']->tick();
380 $form['entry_filter[isStarred]']->untick();
382 $crawler = $client->submit($form);
383 $this->assertCount(1, $crawler->filter('div[class=entry]'));
385 $form = $crawler->filter('button[id=submit-filter]')->form();
386 $form['entry_filter[isArchived]']->untick();
387 $form['entry_filter[isStarred]']->tick();
389 $crawler = $client->submit($form);
390 $this->assertCount(1, $crawler->filter('div[class=entry]'));
393 public function testPreviewPictureFilter()
395 $this->logInAs('admin');
396 $client = $this->getClient();
398 $crawler = $client->request('GET', '/unread/list');
399 $form = $crawler->filter('button[id=submit-filter]')->form();
400 $form['entry_filter[previewPicture]']->tick();
402 $crawler = $client->submit($form);
403 $this->assertCount(1, $crawler->filter('div[class=entry]'));
406 public function testFilterOnLanguage()
408 $this->logInAs('admin');
409 $client = $this->getClient();
411 $crawler = $client->request('GET', '/unread/list');
412 $form = $crawler->filter('button[id=submit-filter]')->form();
414 'entry_filter[language]' => 'fr',
417 $crawler = $client->submit($form, $data);
418 $this->assertCount(2, $crawler->filter('div[class=entry]'));
420 $form = $crawler->filter('button[id=submit-filter]')->form();
422 'entry_filter[language]' => 'en',
425 $crawler = $client->submit($form, $data);
426 $this->assertCount(2, $crawler->filter('div[class=entry]'));