]> git.immae.eu Git - github/wallabag/wallabag.git/blame - src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php
Merge pull request #1561 from FabienM/docker-compose
[github/wallabag/wallabag.git] / src / Wallabag / CoreBundle / Tests / Controller / EntryControllerTest.php
CommitLineData
93fd4692
NL
1<?php
2
ad4d1caa 3namespace Wallabag\CoreBundle\Tests\Controller;
93fd4692 4
769e19dc 5use Wallabag\CoreBundle\Tests\WallabagCoreTestCase;
2863bf2a 6use Wallabag\CoreBundle\Entity\Entry;
93fd4692 7
769e19dc 8class EntryControllerTest extends WallabagCoreTestCase
93fd4692 9{
02d17813
JB
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';
11
3b815d2d
J
12 public function testLogin()
13 {
14 $client = $this->getClient();
15
eb3bd7ef 16 $client->request('GET', '/new');
3b815d2d
J
17
18 $this->assertEquals(302, $client->getResponse()->getStatusCode());
19 $this->assertContains('login', $client->getResponse()->headers->get('location'));
20 }
21
9c0c8820 22 public function testGetNew()
93fd4692 23 {
eb3bd7ef 24 $this->logInAs('admin');
3b815d2d 25 $client = $this->getClient();
93fd4692 26
aa6e27cf 27 $crawler = $client->request('GET', '/new');
93fd4692
NL
28
29 $this->assertEquals(200, $client->getResponse()->getStatusCode());
9c0c8820
J
30
31 $this->assertCount(1, $crawler->filter('input[type=url]'));
32 $this->assertCount(1, $crawler->filter('button[type=submit]'));
33 }
34
880a0e1c
NL
35 public function testPostNewViaBookmarklet()
36 {
37 $this->logInAs('admin');
38 $client = $this->getClient();
39
40 $crawler = $client->request('GET', '/');
41
42 $this->assertCount(4, $crawler->filter('div[class=entry]'));
43
44 // Good URL
45 $crawler = $client->request('GET', '/bookmarklet', array('url' => $this->url));
46 $this->assertEquals(302, $client->getResponse()->getStatusCode());
47 $crawler = $client->followRedirect();
48 $crawler = $client->request('GET', '/');
49 $this->assertCount(5, $crawler->filter('div[class=entry]'));
50
51 $em = $client->getContainer()
52 ->get('doctrine.orm.entity_manager');
53 $entry = $em
54 ->getRepository('WallabagCoreBundle:Entry')
55 ->findOneByUrl($this->url);
56 $em->remove($entry);
57 $em->flush();
58 }
59
9c0c8820
J
60 public function testPostNewEmpty()
61 {
eb3bd7ef 62 $this->logInAs('admin');
3b815d2d 63 $client = $this->getClient();
9c0c8820
J
64
65 $crawler = $client->request('GET', '/new');
66
67 $this->assertEquals(200, $client->getResponse()->getStatusCode());
68
69 $form = $crawler->filter('button[type=submit]')->form();
70
71 $crawler = $client->submit($form);
72
73 $this->assertEquals(200, $client->getResponse()->getStatusCode());
74 $this->assertCount(1, $alert = $crawler->filter('form ul li')->extract(array('_text')));
75 $this->assertEquals('This value should not be blank.', $alert[0]);
76 }
77
8a493541 78 /**
75c48e3a 79 * This test will require an internet connection.
8a493541 80 */
9c0c8820
J
81 public function testPostNewOk()
82 {
eb3bd7ef 83 $this->logInAs('admin');
3b815d2d 84 $client = $this->getClient();
9c0c8820
J
85
86 $crawler = $client->request('GET', '/new');
87
88 $this->assertEquals(200, $client->getResponse()->getStatusCode());
89
90 $form = $crawler->filter('button[type=submit]')->form();
91
92 $data = array(
02d17813 93 'entry[url]' => $this->url,
9c0c8820
J
94 );
95
96 $client->submit($form, $data);
97
98 $this->assertEquals(302, $client->getResponse()->getStatusCode());
99
100 $crawler = $client->followRedirect();
101
3b815d2d 102 $this->assertGreaterThan(1, $alert = $crawler->filter('h2 a')->extract(array('_text')));
34c06cab 103 $this->assertContains('Google', $alert[0]);
9c0c8820
J
104 }
105
958671a7
KG
106 /**
107 * This test will require an internet connection.
108 */
109 public function testPostNewThatWillBeTaggued()
110 {
111 $this->logInAs('admin');
112 $client = $this->getClient();
113
114 $crawler = $client->request('GET', '/new');
115
116 $this->assertEquals(200, $client->getResponse()->getStatusCode());
117
118 $form = $crawler->filter('button[type=submit]')->form();
119
120 $data = array(
121 'entry[url]' => $url = 'https://github.com/wallabag/wallabag',
122 );
123
124 $client->submit($form, $data);
125
126 $this->assertEquals(302, $client->getResponse()->getStatusCode());
127
128 $crawler = $client->followRedirect();
129
130 $em = $client->getContainer()
131 ->get('doctrine.orm.entity_manager');
132 $entry = $em
133 ->getRepository('WallabagCoreBundle:Entry')
134 ->findOneByUrl($url);
69edb774
KG
135 $tags = $entry->getTags();
136
137 $this->assertCount(1, $tags);
138 $this->assertEquals('wallabag', $tags[0]->getLabel());
958671a7
KG
139
140 $em->remove($entry);
141 $em->flush();
142 }
143
9c0c8820
J
144 public function testArchive()
145 {
eb3bd7ef 146 $this->logInAs('admin');
3b815d2d 147 $client = $this->getClient();
9c0c8820 148
9fb6ac83 149 $client->request('GET', '/archive/list');
9c0c8820
J
150
151 $this->assertEquals(200, $client->getResponse()->getStatusCode());
152 }
153
154 public function testStarred()
155 {
eb3bd7ef 156 $this->logInAs('admin');
3b815d2d 157 $client = $this->getClient();
9c0c8820 158
9fb6ac83 159 $client->request('GET', '/starred/list');
9c0c8820
J
160
161 $this->assertEquals(200, $client->getResponse()->getStatusCode());
162 }
163
8a493541
JB
164 /**
165 * @depends testPostNewOk
166 */
9c0c8820
J
167 public function testView()
168 {
eb3bd7ef 169 $this->logInAs('admin');
3b815d2d 170 $client = $this->getClient();
9c0c8820
J
171
172 $content = $client->getContainer()
173 ->get('doctrine.orm.entity_manager')
174 ->getRepository('WallabagCoreBundle:Entry')
02d17813 175 ->findOneByUrl($this->url);
9c0c8820 176
eb3bd7ef 177 $client->request('GET', '/view/'.$content->getId());
9c0c8820
J
178
179 $this->assertEquals(200, $client->getResponse()->getStatusCode());
180 $this->assertContains($content->getTitle(), $client->getResponse()->getContent());
93fd4692 181 }
eb3bd7ef 182
831b02aa
JB
183 /**
184 * @depends testPostNewOk
185 *
186 * This test will require an internet connection.
187 */
188 public function testReload()
189 {
190 $this->logInAs('admin');
191 $client = $this->getClient();
192
193 $content = $client->getContainer()
194 ->get('doctrine.orm.entity_manager')
195 ->getRepository('WallabagCoreBundle:Entry')
196 ->findOneByUrl($this->url);
197
198 // empty content
199 $content->setContent('');
200 $client->getContainer()->get('doctrine.orm.entity_manager')->persist($content);
201 $client->getContainer()->get('doctrine.orm.entity_manager')->flush();
202
203 $client->request('GET', '/reload/'.$content->getId());
204
205 $this->assertEquals(302, $client->getResponse()->getStatusCode());
206
207 $content = $client->getContainer()
208 ->get('doctrine.orm.entity_manager')
209 ->getRepository('WallabagCoreBundle:Entry')
210 ->findOneByUrl($this->url);
211
212 $this->assertNotEmpty($content->getContent());
213 }
214
82d6d9cb
JB
215 public function testEdit()
216 {
217 $this->logInAs('admin');
218 $client = $this->getClient();
219
220 $content = $client->getContainer()
221 ->get('doctrine.orm.entity_manager')
222 ->getRepository('WallabagCoreBundle:Entry')
02d17813 223 ->findOneByUrl($this->url);
82d6d9cb
JB
224
225 $crawler = $client->request('GET', '/edit/'.$content->getId());
226
227 $this->assertEquals(200, $client->getResponse()->getStatusCode());
228
229 $this->assertCount(1, $crawler->filter('input[id=entry_title]'));
230 $this->assertCount(1, $crawler->filter('button[id=entry_save]'));
231 }
232
233 public function testEditUpdate()
234 {
235 $this->logInAs('admin');
236 $client = $this->getClient();
237
238 $content = $client->getContainer()
239 ->get('doctrine.orm.entity_manager')
240 ->getRepository('WallabagCoreBundle:Entry')
02d17813 241 ->findOneByUrl($this->url);
82d6d9cb
JB
242
243 $crawler = $client->request('GET', '/edit/'.$content->getId());
244
245 $this->assertEquals(200, $client->getResponse()->getStatusCode());
246
247 $form = $crawler->filter('button[type=submit]')->form();
248
249 $data = array(
250 'entry[title]' => 'My updated title hehe :)',
251 );
252
253 $client->submit($form, $data);
254
255 $this->assertEquals(302, $client->getResponse()->getStatusCode());
256
257 $crawler = $client->followRedirect();
258
259 $this->assertGreaterThan(1, $alert = $crawler->filter('div[id=article] h1')->extract(array('_text')));
260 $this->assertContains('My updated title hehe :)', $alert[0]);
261 }
262
eb3bd7ef
J
263 public function testToggleArchive()
264 {
265 $this->logInAs('admin');
266 $client = $this->getClient();
267
268 $content = $client->getContainer()
269 ->get('doctrine.orm.entity_manager')
270 ->getRepository('WallabagCoreBundle:Entry')
02d17813 271 ->findOneByUrl($this->url);
eb3bd7ef
J
272
273 $client->request('GET', '/archive/'.$content->getId());
274
275 $this->assertEquals(302, $client->getResponse()->getStatusCode());
276
277 $res = $client->getContainer()
278 ->get('doctrine.orm.entity_manager')
279 ->getRepository('WallabagCoreBundle:Entry')
159986c4 280 ->find($content->getId());
eb3bd7ef
J
281
282 $this->assertEquals($res->isArchived(), true);
283 }
284
285 public function testToggleStar()
286 {
287 $this->logInAs('admin');
288 $client = $this->getClient();
289
290 $content = $client->getContainer()
291 ->get('doctrine.orm.entity_manager')
292 ->getRepository('WallabagCoreBundle:Entry')
02d17813 293 ->findOneByUrl($this->url);
eb3bd7ef
J
294
295 $client->request('GET', '/star/'.$content->getId());
296
297 $this->assertEquals(302, $client->getResponse()->getStatusCode());
298
299 $res = $client->getContainer()
300 ->get('doctrine.orm.entity_manager')
301 ->getRepository('WallabagCoreBundle:Entry')
302 ->findOneById($content->getId());
303
304 $this->assertEquals($res->isStarred(), true);
305 }
306
307 public function testDelete()
308 {
309 $this->logInAs('admin');
310 $client = $this->getClient();
311
312 $content = $client->getContainer()
313 ->get('doctrine.orm.entity_manager')
314 ->getRepository('WallabagCoreBundle:Entry')
02d17813 315 ->findOneByUrl($this->url);
eb3bd7ef
J
316
317 $client->request('GET', '/delete/'.$content->getId());
318
319 $this->assertEquals(302, $client->getResponse()->getStatusCode());
320
1d147791 321 $client->request('GET', '/delete/'.$content->getId());
eb3bd7ef 322
1d147791 323 $this->assertEquals(404, $client->getResponse()->getStatusCode());
eb3bd7ef 324 }
3d2b2d62 325
2863bf2a
JB
326 /**
327 * It will create a new entry.
328 * Browse to it.
329 * Then remove it.
330 *
331 * And it'll check that user won't be redirected to the view page of the content when it had been removed
332 */
333 public function testViewAndDelete()
334 {
335 $this->logInAs('admin');
336 $client = $this->getClient();
337
338 // add a new content to be removed later
339 $user = $client->getContainer()
340 ->get('doctrine.orm.entity_manager')
341 ->getRepository('WallabagUserBundle:User')
342 ->findOneByUserName('admin');
343
344 $content = new Entry($user);
345 $content->setUrl('http://1.1.1.1/entry');
346 $content->setReadingTime(12);
347 $content->setDomainName('domain.io');
348 $content->setMimetype('text/html');
349 $content->setTitle('test title entry');
350 $content->setContent('This is my content /o/');
351 $content->setArchived(true);
352 $content->setLanguage('fr');
353
354 $client->getContainer()
355 ->get('doctrine.orm.entity_manager')
356 ->persist($content);
357 $client->getContainer()
358 ->get('doctrine.orm.entity_manager')
359 ->flush();
360
361 $client->request('GET', '/view/'.$content->getId());
362 $this->assertEquals(200, $client->getResponse()->getStatusCode());
363
364 $client->request('GET', '/delete/'.$content->getId());
365 $this->assertEquals(302, $client->getResponse()->getStatusCode());
366
367 $client->followRedirect();
368 $this->assertEquals(200, $client->getResponse()->getStatusCode());
369 }
370
3d2b2d62
J
371 public function testViewOtherUserEntry()
372 {
159986c4 373 $this->logInAs('admin');
3d2b2d62
J
374 $client = $this->getClient();
375
376 $content = $client->getContainer()
377 ->get('doctrine.orm.entity_manager')
378 ->getRepository('WallabagCoreBundle:Entry')
159986c4 379 ->findOneByUsernameAndNotArchived('bob');
3d2b2d62 380
159986c4 381 $client->request('GET', '/view/'.$content->getId());
3d2b2d62
J
382
383 $this->assertEquals(403, $client->getResponse()->getStatusCode());
384 }
26864574 385
3f357ee2 386 public function testFilterOnReadingTime()
26864574
NL
387 {
388 $this->logInAs('admin');
389 $client = $this->getClient();
390
391 $crawler = $client->request('GET', '/unread/list');
392
393 $form = $crawler->filter('button[id=submit-filter]')->form();
394
395 $data = array(
396 'entry_filter[readingTime][right_number]' => 11,
8ce32af6 397 'entry_filter[readingTime][left_number]' => 11,
26864574
NL
398 );
399
400 $crawler = $client->submit($form, $data);
401
402 $this->assertCount(1, $crawler->filter('div[class=entry]'));
403 }
ab2c93c7 404
3f357ee2
NL
405 public function testFilterOnCreationDate()
406 {
407 $this->logInAs('admin');
408 $client = $this->getClient();
409
410 $crawler = $client->request('GET', '/unread/list');
411
412 $form = $crawler->filter('button[id=submit-filter]')->form();
413
414 $data = array(
415 'entry_filter[createdAt][left_date]' => date('d/m/Y'),
8ce32af6 416 'entry_filter[createdAt][right_date]' => date('d/m/Y', strtotime('+1 day')),
3f357ee2
NL
417 );
418
419 $crawler = $client->submit($form, $data);
420
e1779760 421 $this->assertCount(5, $crawler->filter('div[class=entry]'));
3f357ee2 422
f90af145
JB
423 $data = array(
424 'entry_filter[createdAt][left_date]' => date('d/m/Y'),
425 'entry_filter[createdAt][right_date]' => date('d/m/Y'),
426 );
427
428 $crawler = $client->submit($form, $data);
429
430 $this->assertCount(5, $crawler->filter('div[class=entry]'));
431
3f357ee2
NL
432 $data = array(
433 'entry_filter[createdAt][left_date]' => '01/01/1970',
8ce32af6 434 'entry_filter[createdAt][right_date]' => '01/01/1970',
3f357ee2
NL
435 );
436
437 $crawler = $client->submit($form, $data);
438
439 $this->assertCount(0, $crawler->filter('div[class=entry]'));
3f357ee2
NL
440 }
441
ab2c93c7
NL
442 public function testPaginationWithFilter()
443 {
444 $this->logInAs('admin');
445 $client = $this->getClient();
ab2c93c7
NL
446 $crawler = $client->request('GET', '/config');
447
448 $form = $crawler->filter('button[id=config_save]')->form();
449
450 $data = array(
451 'config[items_per_page]' => '1',
452 );
453
454 $client->submit($form, $data);
455
456 $parameters = '?entry_filter%5BreadingTime%5D%5Bleft_number%5D=&amp;entry_filter%5BreadingTime%5D%5Bright_number%5D=';
457
458 $crawler = $client->request('GET', 'unread/list'.$parameters);
459
460 $this->assertContains($parameters, $client->getResponse()->getContent());
e1779760
NL
461
462 // reset pagination
463 $crawler = $client->request('GET', '/config');
464 $form = $crawler->filter('button[id=config_save]')->form();
465 $data = array(
466 'config[items_per_page]' => '12',
467 );
468 $client->submit($form, $data);
ab2c93c7 469 }
443cecd2
NL
470
471 public function testFilterOnDomainName()
472 {
473 $this->logInAs('admin');
474 $client = $this->getClient();
475
476 $crawler = $client->request('GET', '/unread/list');
477 $form = $crawler->filter('button[id=submit-filter]')->form();
478 $data = array(
02d17813 479 'entry_filter[domainName]' => 'domain',
443cecd2
NL
480 );
481
482 $crawler = $client->submit($form, $data);
02d17813 483 $this->assertCount(5, $crawler->filter('div[class=entry]'));
443cecd2
NL
484
485 $form = $crawler->filter('button[id=submit-filter]')->form();
486 $data = array(
8ce32af6 487 'entry_filter[domainName]' => 'wallabag',
443cecd2
NL
488 );
489
490 $crawler = $client->submit($form, $data);
491 $this->assertCount(0, $crawler->filter('div[class=entry]'));
492 }
e1779760
NL
493
494 public function testFilterOnStatus()
495 {
496 $this->logInAs('admin');
497 $client = $this->getClient();
498
499 $crawler = $client->request('GET', '/unread/list');
500 $form = $crawler->filter('button[id=submit-filter]')->form();
501 $form['entry_filter[isArchived]']->tick();
502 $form['entry_filter[isStarred]']->untick();
503
504 $crawler = $client->submit($form);
159986c4 505 $this->assertCount(1, $crawler->filter('div[class=entry]'));
e1779760
NL
506
507 $form = $crawler->filter('button[id=submit-filter]')->form();
508 $form['entry_filter[isArchived]']->untick();
509 $form['entry_filter[isStarred]']->tick();
510
511 $crawler = $client->submit($form);
02d17813 512 $this->assertCount(1, $crawler->filter('div[class=entry]'));
e1779760 513 }
497e0cad
NL
514
515 public function testPreviewPictureFilter()
516 {
517 $this->logInAs('admin');
518 $client = $this->getClient();
519
520 $crawler = $client->request('GET', '/unread/list');
521 $form = $crawler->filter('button[id=submit-filter]')->form();
522 $form['entry_filter[previewPicture]']->tick();
523
524 $crawler = $client->submit($form);
525 $this->assertCount(1, $crawler->filter('div[class=entry]'));
526 }
d4ebe5c5
JB
527
528 public function testFilterOnLanguage()
529 {
530 $this->logInAs('admin');
531 $client = $this->getClient();
532
533 $crawler = $client->request('GET', '/unread/list');
534 $form = $crawler->filter('button[id=submit-filter]')->form();
535 $data = array(
159986c4 536 'entry_filter[language]' => 'fr',
d4ebe5c5
JB
537 );
538
539 $crawler = $client->submit($form, $data);
02d17813 540 $this->assertCount(2, $crawler->filter('div[class=entry]'));
d4ebe5c5
JB
541
542 $form = $crawler->filter('button[id=submit-filter]')->form();
543 $data = array(
544 'entry_filter[language]' => 'en',
545 );
546
547 $crawler = $client->submit($form, $data);
548 $this->assertCount(2, $crawler->filter('div[class=entry]'));
549 }
93fd4692 550}