3 namespace Wallabag\CoreBundle\Tests\Controller
;
5 use Wallabag\CoreBundle\Tests\WallabagCoreTestCase
;
6 use Doctrine\ORM\AbstractQuery
;
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 testPostNewEmpty()
37 $this->logInAs('admin');
38 $client = $this->getClient();
40 $crawler = $client->request('GET', '/new');
42 $this->assertEquals(200, $client->getResponse()->getStatusCode());
44 $form = $crawler->filter('button[type=submit]')->form();
46 $crawler = $client->submit($form);
48 $this->assertEquals(200, $client->getResponse()->getStatusCode());
49 $this->assertCount(1, $alert = $crawler->filter('form ul li')->extract(array('_text')));
50 $this->assertEquals('This value should not be blank.', $alert[0]);
53 public function testPostNewOk()
55 $this->logInAs('admin');
56 $client = $this->getClient();
58 $crawler = $client->request('GET', '/new');
60 $this->assertEquals(200, $client->getResponse()->getStatusCode());
62 $form = $crawler->filter('button[type=submit]')->form();
65 'entry[url]' => $this->url
,
68 $client->submit($form, $data);
70 $this->assertEquals(302, $client->getResponse()->getStatusCode());
72 $crawler = $client->followRedirect();
74 $this->assertGreaterThan(1, $alert = $crawler->filter('h2 a')->extract(array('_text')));
75 $this->assertContains('Google', $alert[0]);
78 public function testArchive()
80 $this->logInAs('admin');
81 $client = $this->getClient();
83 $client->request('GET', '/archive/list');
85 $this->assertEquals(200, $client->getResponse()->getStatusCode());
88 public function testStarred()
90 $this->logInAs('admin');
91 $client = $this->getClient();
93 $client->request('GET', '/starred/list');
95 $this->assertEquals(200, $client->getResponse()->getStatusCode());
98 public function testView()
100 $this->logInAs('admin');
101 $client = $this->getClient();
103 $content = $client->getContainer()
104 ->get('doctrine.orm.entity_manager')
105 ->getRepository('WallabagCoreBundle:Entry')
106 ->findOneByUrl($this->url
);
108 $client->request('GET', '/view/'.$content->getId());
110 $this->assertEquals(200, $client->getResponse()->getStatusCode());
111 $this->assertContains($content->getTitle(), $client->getResponse()->getContent());
114 public function testEdit()
116 $this->logInAs('admin');
117 $client = $this->getClient();
119 $content = $client->getContainer()
120 ->get('doctrine.orm.entity_manager')
121 ->getRepository('WallabagCoreBundle:Entry')
122 ->findOneByUrl($this->url
);
124 $crawler = $client->request('GET', '/edit/'.$content->getId());
126 $this->assertEquals(200, $client->getResponse()->getStatusCode());
128 $this->assertCount(1, $crawler->filter('input[id=entry_title]'));
129 $this->assertCount(1, $crawler->filter('button[id=entry_save]'));
132 public function testEditUpdate()
134 $this->logInAs('admin');
135 $client = $this->getClient();
137 $content = $client->getContainer()
138 ->get('doctrine.orm.entity_manager')
139 ->getRepository('WallabagCoreBundle:Entry')
140 ->findOneByUrl($this->url
);
142 $crawler = $client->request('GET', '/edit/'.$content->getId());
144 $this->assertEquals(200, $client->getResponse()->getStatusCode());
146 $form = $crawler->filter('button[type=submit]')->form();
149 'entry[title]' => 'My updated title hehe :)',
152 $client->submit($form, $data);
154 $this->assertEquals(302, $client->getResponse()->getStatusCode());
156 $crawler = $client->followRedirect();
158 $this->assertGreaterThan(1, $alert = $crawler->filter('div[id=article] h1')->extract(array('_text')));
159 $this->assertContains('My updated title hehe :)', $alert[0]);
162 public function testToggleArchive()
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 $client->request('GET', '/archive/'.$content->getId());
174 $this->assertEquals(302, $client->getResponse()->getStatusCode());
176 $res = $client->getContainer()
177 ->get('doctrine.orm.entity_manager')
178 ->getRepository('WallabagCoreBundle:Entry')
179 ->find($content->getId());
181 $this->assertEquals($res->isArchived(), true);
184 public function testToggleStar()
186 $this->logInAs('admin');
187 $client = $this->getClient();
189 $content = $client->getContainer()
190 ->get('doctrine.orm.entity_manager')
191 ->getRepository('WallabagCoreBundle:Entry')
192 ->findOneByUrl($this->url
);
194 $client->request('GET', '/star/'.$content->getId());
196 $this->assertEquals(302, $client->getResponse()->getStatusCode());
198 $res = $client->getContainer()
199 ->get('doctrine.orm.entity_manager')
200 ->getRepository('WallabagCoreBundle:Entry')
201 ->findOneById($content->getId());
203 $this->assertEquals($res->isStarred(), true);
206 public function testDelete()
208 $this->logInAs('admin');
209 $client = $this->getClient();
211 $content = $client->getContainer()
212 ->get('doctrine.orm.entity_manager')
213 ->getRepository('WallabagCoreBundle:Entry')
214 ->findOneByUrl($this->url
);
216 $client->request('GET', '/delete/'.$content->getId());
218 $this->assertEquals(302, $client->getResponse()->getStatusCode());
220 $client->request('GET', '/delete/'.$content->getId());
222 $this->assertEquals(404, $client->getResponse()->getStatusCode());
225 public function testViewOtherUserEntry()
227 $this->logInAs('admin');
228 $client = $this->getClient();
230 $content = $client->getContainer()
231 ->get('doctrine.orm.entity_manager')
232 ->getRepository('WallabagCoreBundle:Entry')
233 ->findOneByUsernameAndNotArchived('bob');
235 $client->request('GET', '/view/'.$content->getId());
237 $this->assertEquals(403, $client->getResponse()->getStatusCode());
240 public function testFilterOnReadingTime()
242 $this->logInAs('admin');
243 $client = $this->getClient();
245 $crawler = $client->request('GET', '/unread/list');
247 $form = $crawler->filter('button[id=submit-filter]')->form();
250 'entry_filter[readingTime][right_number]' => 11,
251 'entry_filter[readingTime][left_number]' => 11,
254 $crawler = $client->submit($form, $data);
256 $this->assertCount(1, $crawler->filter('div[class=entry]'));
259 public function testFilterOnCreationDate()
261 $this->logInAs('admin');
262 $client = $this->getClient();
264 $crawler = $client->request('GET', '/unread/list');
266 $form = $crawler->filter('button[id=submit-filter]')->form();
269 'entry_filter[createdAt][left_date]' => date('d/m/Y'),
270 'entry_filter[createdAt][right_date]' => date('d/m/Y', strtotime('+1 day')),
273 $crawler = $client->submit($form, $data);
275 $this->assertCount(5, $crawler->filter('div[class=entry]'));
278 'entry_filter[createdAt][left_date]' => date('d/m/Y'),
279 'entry_filter[createdAt][right_date]' => date('d/m/Y'),
282 $crawler = $client->submit($form, $data);
284 $this->assertCount(5, $crawler->filter('div[class=entry]'));
287 'entry_filter[createdAt][left_date]' => '01/01/1970',
288 'entry_filter[createdAt][right_date]' => '01/01/1970',
291 $crawler = $client->submit($form, $data);
293 $this->assertCount(0, $crawler->filter('div[class=entry]'));
296 public function testPaginationWithFilter()
298 $this->logInAs('admin');
299 $client = $this->getClient();
300 $crawler = $client->request('GET', '/config');
302 $form = $crawler->filter('button[id=config_save]')->form();
305 'config[items_per_page]' => '1',
308 $client->submit($form, $data);
310 $parameters = '?entry_filter%5BreadingTime%5D%5Bleft_number%5D=&entry_filter%5BreadingTime%5D%5Bright_number%5D=';
312 $crawler = $client->request('GET', 'unread/list'.$parameters);
314 $this->assertContains($parameters, $client->getResponse()->getContent());
317 $crawler = $client->request('GET', '/config');
318 $form = $crawler->filter('button[id=config_save]')->form();
320 'config[items_per_page]' => '12',
322 $client->submit($form, $data);
325 public function testFilterOnDomainName()
327 $this->logInAs('admin');
328 $client = $this->getClient();
330 $crawler = $client->request('GET', '/unread/list');
331 $form = $crawler->filter('button[id=submit-filter]')->form();
333 'entry_filter[domainName]' => 'domain',
336 $crawler = $client->submit($form, $data);
337 $this->assertCount(5, $crawler->filter('div[class=entry]'));
339 $form = $crawler->filter('button[id=submit-filter]')->form();
341 'entry_filter[domainName]' => 'wallabag',
344 $crawler = $client->submit($form, $data);
345 $this->assertCount(0, $crawler->filter('div[class=entry]'));
348 public function testFilterOnStatus()
350 $this->logInAs('admin');
351 $client = $this->getClient();
353 $crawler = $client->request('GET', '/unread/list');
354 $form = $crawler->filter('button[id=submit-filter]')->form();
355 $form['entry_filter[isArchived]']->tick();
356 $form['entry_filter[isStarred]']->untick();
358 $crawler = $client->submit($form);
359 $this->assertCount(1, $crawler->filter('div[class=entry]'));
361 $form = $crawler->filter('button[id=submit-filter]')->form();
362 $form['entry_filter[isArchived]']->untick();
363 $form['entry_filter[isStarred]']->tick();
365 $crawler = $client->submit($form);
366 $this->assertCount(1, $crawler->filter('div[class=entry]'));
369 public function testPreviewPictureFilter()
371 $this->logInAs('admin');
372 $client = $this->getClient();
374 $crawler = $client->request('GET', '/unread/list');
375 $form = $crawler->filter('button[id=submit-filter]')->form();
376 $form['entry_filter[previewPicture]']->tick();
378 $crawler = $client->submit($form);
379 $this->assertCount(1, $crawler->filter('div[class=entry]'));
382 public function testFilterOnLanguage()
384 $this->logInAs('admin');
385 $client = $this->getClient();
387 $crawler = $client->request('GET', '/unread/list');
388 $form = $crawler->filter('button[id=submit-filter]')->form();
390 'entry_filter[language]' => 'fr',
393 $crawler = $client->submit($form, $data);
394 $this->assertCount(2, $crawler->filter('div[class=entry]'));
396 $form = $crawler->filter('button[id=submit-filter]')->form();
398 'entry_filter[language]' => 'en',
401 $crawler = $client->submit($form, $data);
402 $this->assertCount(2, $crawler->filter('div[class=entry]'));