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]);
105 public function testArchive()
107 $this->logInAs('admin');
108 $client = $this->getClient();
110 $client->request('GET', '/archive/list');
112 $this->assertEquals(200, $client->getResponse()->getStatusCode());
115 public function testStarred()
117 $this->logInAs('admin');
118 $client = $this->getClient();
120 $client->request('GET', '/starred/list');
122 $this->assertEquals(200, $client->getResponse()->getStatusCode());
126 * @depends testPostNewOk
128 public function testView()
130 $this->logInAs('admin');
131 $client = $this->getClient();
133 $content = $client->getContainer()
134 ->get('doctrine.orm.entity_manager')
135 ->getRepository('WallabagCoreBundle:Entry')
136 ->findOneByUrl($this->url
);
138 $client->request('GET', '/view/'.$content->getId());
140 $this->assertEquals(200, $client->getResponse()->getStatusCode());
141 $this->assertContains($content->getTitle(), $client->getResponse()->getContent());
144 public function testEdit()
146 $this->logInAs('admin');
147 $client = $this->getClient();
149 $content = $client->getContainer()
150 ->get('doctrine.orm.entity_manager')
151 ->getRepository('WallabagCoreBundle:Entry')
152 ->findOneByUrl($this->url
);
154 $crawler = $client->request('GET', '/edit/'.$content->getId());
156 $this->assertEquals(200, $client->getResponse()->getStatusCode());
158 $this->assertCount(1, $crawler->filter('input[id=entry_title]'));
159 $this->assertCount(1, $crawler->filter('button[id=entry_save]'));
162 public function testEditUpdate()
164 $this->logInAs('admin');
165 $client = $this->getClient();
167 $content = $client->getContainer()
168 ->get('doctrine.orm.entity_manager')
169 ->getRepository('WallabagCoreBundle:Entry')
170 ->findOneByUrl($this->url
);
172 $crawler = $client->request('GET', '/edit/'.$content->getId());
174 $this->assertEquals(200, $client->getResponse()->getStatusCode());
176 $form = $crawler->filter('button[type=submit]')->form();
179 'entry[title]' => 'My updated title hehe :)',
182 $client->submit($form, $data);
184 $this->assertEquals(302, $client->getResponse()->getStatusCode());
186 $crawler = $client->followRedirect();
188 $this->assertGreaterThan(1, $alert = $crawler->filter('div[id=article] h1')->extract(array('_text')));
189 $this->assertContains('My updated title hehe :)', $alert[0]);
192 public function testToggleArchive()
194 $this->logInAs('admin');
195 $client = $this->getClient();
197 $content = $client->getContainer()
198 ->get('doctrine.orm.entity_manager')
199 ->getRepository('WallabagCoreBundle:Entry')
200 ->findOneByUrl($this->url
);
202 $client->request('GET', '/archive/'.$content->getId());
204 $this->assertEquals(302, $client->getResponse()->getStatusCode());
206 $res = $client->getContainer()
207 ->get('doctrine.orm.entity_manager')
208 ->getRepository('WallabagCoreBundle:Entry')
209 ->find($content->getId());
211 $this->assertEquals($res->isArchived(), true);
214 public function testToggleStar()
216 $this->logInAs('admin');
217 $client = $this->getClient();
219 $content = $client->getContainer()
220 ->get('doctrine.orm.entity_manager')
221 ->getRepository('WallabagCoreBundle:Entry')
222 ->findOneByUrl($this->url
);
224 $client->request('GET', '/star/'.$content->getId());
226 $this->assertEquals(302, $client->getResponse()->getStatusCode());
228 $res = $client->getContainer()
229 ->get('doctrine.orm.entity_manager')
230 ->getRepository('WallabagCoreBundle:Entry')
231 ->findOneById($content->getId());
233 $this->assertEquals($res->isStarred(), true);
236 public function testDelete()
238 $this->logInAs('admin');
239 $client = $this->getClient();
241 $content = $client->getContainer()
242 ->get('doctrine.orm.entity_manager')
243 ->getRepository('WallabagCoreBundle:Entry')
244 ->findOneByUrl($this->url
);
246 $client->request('GET', '/delete/'.$content->getId());
248 $this->assertEquals(302, $client->getResponse()->getStatusCode());
250 $client->request('GET', '/delete/'.$content->getId());
252 $this->assertEquals(404, $client->getResponse()->getStatusCode());
255 public function testViewOtherUserEntry()
257 $this->logInAs('admin');
258 $client = $this->getClient();
260 $content = $client->getContainer()
261 ->get('doctrine.orm.entity_manager')
262 ->getRepository('WallabagCoreBundle:Entry')
263 ->findOneByUsernameAndNotArchived('bob');
265 $client->request('GET', '/view/'.$content->getId());
267 $this->assertEquals(403, $client->getResponse()->getStatusCode());
270 public function testFilterOnReadingTime()
272 $this->logInAs('admin');
273 $client = $this->getClient();
275 $crawler = $client->request('GET', '/unread/list');
277 $form = $crawler->filter('button[id=submit-filter]')->form();
280 'entry_filter[readingTime][right_number]' => 11,
281 'entry_filter[readingTime][left_number]' => 11,
284 $crawler = $client->submit($form, $data);
286 $this->assertCount(1, $crawler->filter('div[class=entry]'));
289 public function testFilterOnCreationDate()
291 $this->logInAs('admin');
292 $client = $this->getClient();
294 $crawler = $client->request('GET', '/unread/list');
296 $form = $crawler->filter('button[id=submit-filter]')->form();
299 'entry_filter[createdAt][left_date]' => date('d/m/Y'),
300 'entry_filter[createdAt][right_date]' => date('d/m/Y', strtotime('+1 day')),
303 $crawler = $client->submit($form, $data);
305 $this->assertCount(5, $crawler->filter('div[class=entry]'));
308 'entry_filter[createdAt][left_date]' => date('d/m/Y'),
309 'entry_filter[createdAt][right_date]' => date('d/m/Y'),
312 $crawler = $client->submit($form, $data);
314 $this->assertCount(5, $crawler->filter('div[class=entry]'));
317 'entry_filter[createdAt][left_date]' => '01/01/1970',
318 'entry_filter[createdAt][right_date]' => '01/01/1970',
321 $crawler = $client->submit($form, $data);
323 $this->assertCount(0, $crawler->filter('div[class=entry]'));
326 public function testPaginationWithFilter()
328 $this->logInAs('admin');
329 $client = $this->getClient();
330 $crawler = $client->request('GET', '/config');
332 $form = $crawler->filter('button[id=config_save]')->form();
335 'config[items_per_page]' => '1',
338 $client->submit($form, $data);
340 $parameters = '?entry_filter%5BreadingTime%5D%5Bleft_number%5D=&entry_filter%5BreadingTime%5D%5Bright_number%5D=';
342 $crawler = $client->request('GET', 'unread/list'.$parameters);
344 $this->assertContains($parameters, $client->getResponse()->getContent());
347 $crawler = $client->request('GET', '/config');
348 $form = $crawler->filter('button[id=config_save]')->form();
350 'config[items_per_page]' => '12',
352 $client->submit($form, $data);
355 public function testFilterOnDomainName()
357 $this->logInAs('admin');
358 $client = $this->getClient();
360 $crawler = $client->request('GET', '/unread/list');
361 $form = $crawler->filter('button[id=submit-filter]')->form();
363 'entry_filter[domainName]' => 'domain',
366 $crawler = $client->submit($form, $data);
367 $this->assertCount(5, $crawler->filter('div[class=entry]'));
369 $form = $crawler->filter('button[id=submit-filter]')->form();
371 'entry_filter[domainName]' => 'wallabag',
374 $crawler = $client->submit($form, $data);
375 $this->assertCount(0, $crawler->filter('div[class=entry]'));
378 public function testFilterOnStatus()
380 $this->logInAs('admin');
381 $client = $this->getClient();
383 $crawler = $client->request('GET', '/unread/list');
384 $form = $crawler->filter('button[id=submit-filter]')->form();
385 $form['entry_filter[isArchived]']->tick();
386 $form['entry_filter[isStarred]']->untick();
388 $crawler = $client->submit($form);
389 $this->assertCount(1, $crawler->filter('div[class=entry]'));
391 $form = $crawler->filter('button[id=submit-filter]')->form();
392 $form['entry_filter[isArchived]']->untick();
393 $form['entry_filter[isStarred]']->tick();
395 $crawler = $client->submit($form);
396 $this->assertCount(1, $crawler->filter('div[class=entry]'));
399 public function testPreviewPictureFilter()
401 $this->logInAs('admin');
402 $client = $this->getClient();
404 $crawler = $client->request('GET', '/unread/list');
405 $form = $crawler->filter('button[id=submit-filter]')->form();
406 $form['entry_filter[previewPicture]']->tick();
408 $crawler = $client->submit($form);
409 $this->assertCount(1, $crawler->filter('div[class=entry]'));
412 public function testFilterOnLanguage()
414 $this->logInAs('admin');
415 $client = $this->getClient();
417 $crawler = $client->request('GET', '/unread/list');
418 $form = $crawler->filter('button[id=submit-filter]')->form();
420 'entry_filter[language]' => 'fr',
423 $crawler = $client->submit($form, $data);
424 $this->assertCount(2, $crawler->filter('div[class=entry]'));
426 $form = $crawler->filter('button[id=submit-filter]')->form();
428 'entry_filter[language]' => 'en',
431 $crawler = $client->submit($form, $data);
432 $this->assertCount(2, $crawler->filter('div[class=entry]'));