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