3 namespace Wallabag\CoreBundle\Tests\Controller
;
5 use Wallabag\CoreBundle\Tests\WallabagCoreTestCase
;
6 use Doctrine\ORM\AbstractQuery
;
8 class EntryControllerTest
extends WallabagCoreTestCase
10 public function testLogin()
12 $client = $this->getClient();
14 $client->request('GET', '/new');
16 $this->assertEquals(302, $client->getResponse()->getStatusCode());
17 $this->assertContains('login', $client->getResponse()->headers
->get('location'));
20 public function testGetNew()
22 $this->logInAs('admin');
23 $client = $this->getClient();
25 $crawler = $client->request('GET', '/new');
27 $this->assertEquals(200, $client->getResponse()->getStatusCode());
29 $this->assertCount(1, $crawler->filter('input[type=url]'));
30 $this->assertCount(1, $crawler->filter('button[type=submit]'));
33 public function testPostNewEmpty()
35 $this->logInAs('admin');
36 $client = $this->getClient();
38 $crawler = $client->request('GET', '/new');
40 $this->assertEquals(200, $client->getResponse()->getStatusCode());
42 $form = $crawler->filter('button[type=submit]')->form();
44 $crawler = $client->submit($form);
46 $this->assertEquals(200, $client->getResponse()->getStatusCode());
47 $this->assertCount(1, $alert = $crawler->filter('form ul li')->extract(array('_text')));
48 $this->assertEquals('This value should not be blank.', $alert[0]);
51 public function testPostNewOk()
53 $this->logInAs('admin');
54 $client = $this->getClient();
56 $crawler = $client->request('GET', '/new');
58 $this->assertEquals(200, $client->getResponse()->getStatusCode());
60 $form = $crawler->filter('button[type=submit]')->form();
63 'entry[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',
66 $client->submit($form, $data);
68 $this->assertEquals(302, $client->getResponse()->getStatusCode());
70 $crawler = $client->followRedirect();
72 $this->assertGreaterThan(1, $alert = $crawler->filter('h2 a')->extract(array('_text')));
73 $this->assertContains('Google', $alert[0]);
76 public function testArchive()
78 $this->logInAs('admin');
79 $client = $this->getClient();
81 $client->request('GET', '/archive/list');
83 $this->assertEquals(200, $client->getResponse()->getStatusCode());
86 public function testStarred()
88 $this->logInAs('admin');
89 $client = $this->getClient();
91 $client->request('GET', '/starred/list');
93 $this->assertEquals(200, $client->getResponse()->getStatusCode());
96 public function testView()
98 $this->logInAs('admin');
99 $client = $this->getClient();
101 $content = $client->getContainer()
102 ->get('doctrine.orm.entity_manager')
103 ->getRepository('WallabagCoreBundle:Entry')
104 ->findOneByIsArchived(false);
106 $client->request('GET', '/view/'.$content->getId());
108 $this->assertEquals(200, $client->getResponse()->getStatusCode());
109 $this->assertContains($content->getTitle(), $client->getResponse()->getContent());
112 public function testEdit()
114 $this->logInAs('admin');
115 $client = $this->getClient();
117 $content = $client->getContainer()
118 ->get('doctrine.orm.entity_manager')
119 ->getRepository('WallabagCoreBundle:Entry')
120 ->findOneByIsArchived(false);
122 $crawler = $client->request('GET', '/edit/'.$content->getId());
124 $this->assertEquals(200, $client->getResponse()->getStatusCode());
126 $this->assertCount(1, $crawler->filter('input[id=entry_title]'));
127 $this->assertCount(1, $crawler->filter('button[id=entry_save]'));
130 public function testEditUpdate()
132 $this->logInAs('admin');
133 $client = $this->getClient();
135 $content = $client->getContainer()
136 ->get('doctrine.orm.entity_manager')
137 ->getRepository('WallabagCoreBundle:Entry')
138 ->findOneByIsArchived(false);
140 $crawler = $client->request('GET', '/edit/'.$content->getId());
142 $this->assertEquals(200, $client->getResponse()->getStatusCode());
144 $form = $crawler->filter('button[type=submit]')->form();
147 'entry[title]' => 'My updated title hehe :)',
150 $client->submit($form, $data);
152 $this->assertEquals(302, $client->getResponse()->getStatusCode());
154 $crawler = $client->followRedirect();
156 $this->assertGreaterThan(1, $alert = $crawler->filter('div[id=article] h1')->extract(array('_text')));
157 $this->assertContains('My updated title hehe :)', $alert[0]);
160 public function testToggleArchive()
162 $this->logInAs('admin');
163 $client = $this->getClient();
165 $content = $client->getContainer()
166 ->get('doctrine.orm.entity_manager')
167 ->getRepository('WallabagCoreBundle:Entry')
168 ->findOneByIsArchived(false);
170 $client->request('GET', '/archive/'.$content->getId());
172 $this->assertEquals(302, $client->getResponse()->getStatusCode());
174 $res = $client->getContainer()
175 ->get('doctrine.orm.entity_manager')
176 ->getRepository('WallabagCoreBundle:Entry')
177 ->findOneById($content->getId());
179 $this->assertEquals($res->isArchived(), true);
182 public function testToggleStar()
184 $this->logInAs('admin');
185 $client = $this->getClient();
187 $content = $client->getContainer()
188 ->get('doctrine.orm.entity_manager')
189 ->getRepository('WallabagCoreBundle:Entry')
190 ->findOneByIsStarred(false);
192 $client->request('GET', '/star/'.$content->getId());
194 $this->assertEquals(302, $client->getResponse()->getStatusCode());
196 $res = $client->getContainer()
197 ->get('doctrine.orm.entity_manager')
198 ->getRepository('WallabagCoreBundle:Entry')
199 ->findOneById($content->getId());
201 $this->assertEquals($res->isStarred(), true);
204 public function testDelete()
206 $this->logInAs('admin');
207 $client = $this->getClient();
209 $content = $client->getContainer()
210 ->get('doctrine.orm.entity_manager')
211 ->getRepository('WallabagCoreBundle:Entry')
214 $client->request('GET', '/delete/'.$content->getId());
216 $this->assertEquals(302, $client->getResponse()->getStatusCode());
218 $client->request('GET', '/delete/'.$content->getId());
220 $this->assertEquals(404, $client->getResponse()->getStatusCode());
223 public function testViewOtherUserEntry()
225 $this->logInAs('bob');
226 $client = $this->getClient();
228 $content = $client->getContainer()
229 ->get('doctrine.orm.entity_manager')
230 ->getRepository('WallabagCoreBundle:Entry')
231 ->createQueryBuilder('e')
233 ->leftJoin('e.user', 'u')
234 ->where('u.username != :username')->setParameter('username', 'bob')
237 ->getSingleResult(AbstractQuery
::HYDRATE_ARRAY
);
239 $client->request('GET', '/view/'.$content['id']);
241 $this->assertEquals(403, $client->getResponse()->getStatusCode());
244 public function testFilterOnReadingTime()
246 $this->logInAs('admin');
247 $client = $this->getClient();
249 $crawler = $client->request('GET', '/unread/list');
251 $form = $crawler->filter('button[id=submit-filter]')->form();
254 'entry_filter[readingTime][right_number]' => 11,
255 'entry_filter[readingTime][left_number]' => 11,
258 $crawler = $client->submit($form, $data);
260 $this->assertCount(1, $crawler->filter('div[class=entry]'));
263 public function testFilterOnCreationDate()
265 $this->logInAs('admin');
266 $client = $this->getClient();
268 $crawler = $client->request('GET', '/unread/list');
270 $form = $crawler->filter('button[id=submit-filter]')->form();
273 'entry_filter[createdAt][left_date]' => date('d/m/Y'),
274 'entry_filter[createdAt][right_date]' => date('d/m/Y', strtotime('+1 day')),
277 $crawler = $client->submit($form, $data);
279 $this->assertCount(5, $crawler->filter('div[class=entry]'));
282 'entry_filter[createdAt][left_date]' => '01/01/1970',
283 'entry_filter[createdAt][right_date]' => '01/01/1970',
286 $crawler = $client->submit($form, $data);
288 $this->assertCount(0, $crawler->filter('div[class=entry]'));
291 public function testPaginationWithFilter()
293 $this->logInAs('admin');
294 $client = $this->getClient();
295 $crawler = $client->request('GET', '/config');
297 $form = $crawler->filter('button[id=config_save]')->form();
300 'config[items_per_page]' => '1',
303 $client->submit($form, $data);
305 $parameters = '?entry_filter%5BreadingTime%5D%5Bleft_number%5D=&entry_filter%5BreadingTime%5D%5Bright_number%5D=';
307 $crawler = $client->request('GET', 'unread/list'.$parameters);
309 $this->assertContains($parameters, $client->getResponse()->getContent());
312 $crawler = $client->request('GET', '/config');
313 $form = $crawler->filter('button[id=config_save]')->form();
315 'config[items_per_page]' => '12',
317 $client->submit($form, $data);
320 public function testFilterOnDomainName()
322 $this->logInAs('admin');
323 $client = $this->getClient();
325 $crawler = $client->request('GET', '/unread/list');
326 $form = $crawler->filter('button[id=submit-filter]')->form();
328 'entry_filter[domainName]' => 'monde',
331 $crawler = $client->submit($form, $data);
332 $this->assertCount(1, $crawler->filter('div[class=entry]'));
334 $form = $crawler->filter('button[id=submit-filter]')->form();
336 'entry_filter[domainName]' => 'wallabag',
339 $crawler = $client->submit($form, $data);
340 $this->assertCount(0, $crawler->filter('div[class=entry]'));
343 public function testFilterOnStatus()
345 $this->logInAs('admin');
346 $client = $this->getClient();
348 $crawler = $client->request('GET', '/unread/list');
349 $form = $crawler->filter('button[id=submit-filter]')->form();
350 $form['entry_filter[isArchived]']->tick();
351 $form['entry_filter[isStarred]']->untick();
353 $crawler = $client->submit($form);
354 $this->assertCount(1, $crawler->filter('div[class=entry]'));
356 $form = $crawler->filter('button[id=submit-filter]')->form();
357 $form['entry_filter[isArchived]']->untick();
358 $form['entry_filter[isStarred]']->tick();
360 $crawler = $client->submit($form);
361 $this->assertCount(1, $crawler->filter('div[class=entry]'));