diff options
Diffstat (limited to 'tests/Wallabag')
3 files changed, 193 insertions, 2 deletions
diff --git a/tests/Wallabag/ApiBundle/Controller/EntryRestControllerTest.php b/tests/Wallabag/ApiBundle/Controller/EntryRestControllerTest.php index 8a65f512..b0d4c4e1 100644 --- a/tests/Wallabag/ApiBundle/Controller/EntryRestControllerTest.php +++ b/tests/Wallabag/ApiBundle/Controller/EntryRestControllerTest.php | |||
@@ -36,6 +36,25 @@ class EntryRestControllerTest extends WallabagApiTestCase | |||
36 | $this->assertSame('application/json', $this->client->getResponse()->headers->get('Content-Type')); | 36 | $this->assertSame('application/json', $this->client->getResponse()->headers->get('Content-Type')); |
37 | } | 37 | } |
38 | 38 | ||
39 | public function testGetOneEntryWithOriginUrl() | ||
40 | { | ||
41 | $entry = $this->client->getContainer() | ||
42 | ->get('doctrine.orm.entity_manager') | ||
43 | ->getRepository('WallabagCoreBundle:Entry') | ||
44 | ->findOneBy(['user' => 1, 'url' => 'http://0.0.0.0/entry2']); | ||
45 | |||
46 | if (!$entry) { | ||
47 | $this->markTestSkipped('No content found in db.'); | ||
48 | } | ||
49 | |||
50 | $this->client->request('GET', '/api/entries/' . $entry->getId() . '.json'); | ||
51 | $this->assertSame(200, $this->client->getResponse()->getStatusCode()); | ||
52 | |||
53 | $content = json_decode($this->client->getResponse()->getContent(), true); | ||
54 | |||
55 | $this->assertSame($entry->getOriginUrl(), $content['origin_url']); | ||
56 | } | ||
57 | |||
39 | public function testExportEntry() | 58 | public function testExportEntry() |
40 | { | 59 | { |
41 | $entry = $this->client->getContainer() | 60 | $entry = $this->client->getContainer() |
@@ -421,6 +440,7 @@ class EntryRestControllerTest extends WallabagApiTestCase | |||
421 | $this->assertSame('New title for my article', $content['title']); | 440 | $this->assertSame('New title for my article', $content['title']); |
422 | $this->assertSame(1, $content['user_id']); | 441 | $this->assertSame(1, $content['user_id']); |
423 | $this->assertCount(2, $content['tags']); | 442 | $this->assertCount(2, $content['tags']); |
443 | $this->assertNull($content['origin_url']); | ||
424 | $this->assertSame('my content', $content['content']); | 444 | $this->assertSame('my content', $content['content']); |
425 | $this->assertSame('de', $content['language']); | 445 | $this->assertSame('de', $content['language']); |
426 | $this->assertSame('2016-09-08T11:55:58+0200', $content['published_at']); | 446 | $this->assertSame('2016-09-08T11:55:58+0200', $content['published_at']); |
@@ -531,6 +551,29 @@ class EntryRestControllerTest extends WallabagApiTestCase | |||
531 | $this->assertSame(1, $content['is_starred']); | 551 | $this->assertSame(1, $content['is_starred']); |
532 | } | 552 | } |
533 | 553 | ||
554 | public function testPostEntryWithOriginUrl() | ||
555 | { | ||
556 | $this->client->request('POST', '/api/entries.json', [ | ||
557 | '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', | ||
558 | 'tags' => 'google', | ||
559 | 'title' => 'New title for my article', | ||
560 | 'content' => 'my content', | ||
561 | 'language' => 'de', | ||
562 | 'published_at' => '2016-09-08T11:55:58+0200', | ||
563 | 'authors' => 'bob,helen', | ||
564 | 'public' => 1, | ||
565 | 'origin_url' => 'http://mysource.tld', | ||
566 | ]); | ||
567 | |||
568 | $this->assertSame(200, $this->client->getResponse()->getStatusCode()); | ||
569 | |||
570 | $content = json_decode($this->client->getResponse()->getContent(), true); | ||
571 | |||
572 | $this->assertGreaterThan(0, $content['id']); | ||
573 | $this->assertSame('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', $content['url']); | ||
574 | $this->assertSame('http://mysource.tld', $content['origin_url']); | ||
575 | } | ||
576 | |||
534 | public function testPatchEntry() | 577 | public function testPatchEntry() |
535 | { | 578 | { |
536 | $entry = $this->client->getContainer() | 579 | $entry = $this->client->getContainer() |
@@ -607,6 +650,91 @@ class EntryRestControllerTest extends WallabagApiTestCase | |||
607 | $this->assertSame($previousLanguage, $content['language'], 'Ensure language has not moved'); | 650 | $this->assertSame($previousLanguage, $content['language'], 'Ensure language has not moved'); |
608 | } | 651 | } |
609 | 652 | ||
653 | public function testPatchEntryWithOriginUrl() | ||
654 | { | ||
655 | $entry = $this->client->getContainer() | ||
656 | ->get('doctrine.orm.entity_manager') | ||
657 | ->getRepository('WallabagCoreBundle:Entry') | ||
658 | ->findOneByUser(1); | ||
659 | |||
660 | if (!$entry) { | ||
661 | $this->markTestSkipped('No content found in db.'); | ||
662 | } | ||
663 | |||
664 | $previousContent = $entry->getContent(); | ||
665 | $previousLanguage = $entry->getLanguage(); | ||
666 | |||
667 | $this->client->request('PATCH', '/api/entries/' . $entry->getId() . '.json', [ | ||
668 | 'title' => 'Another awesome title just for profit', | ||
669 | 'origin_url' => 'https://myawesomesource.example.com', | ||
670 | ]); | ||
671 | |||
672 | $this->assertSame(200, $this->client->getResponse()->getStatusCode()); | ||
673 | |||
674 | $content = json_decode($this->client->getResponse()->getContent(), true); | ||
675 | |||
676 | $this->assertSame($entry->getId(), $content['id']); | ||
677 | $this->assertSame($entry->getUrl(), $content['url']); | ||
678 | $this->assertSame('https://myawesomesource.example.com', $content['origin_url']); | ||
679 | $this->assertEmpty($content['published_by'], 'Authors were not saved because of an array instead of a string'); | ||
680 | $this->assertSame($previousContent, $content['content'], 'Ensure content has not moved'); | ||
681 | $this->assertSame($previousLanguage, $content['language'], 'Ensure language has not moved'); | ||
682 | } | ||
683 | |||
684 | public function testPatchEntryRemoveOriginUrl() | ||
685 | { | ||
686 | $entry = $this->client->getContainer() | ||
687 | ->get('doctrine.orm.entity_manager') | ||
688 | ->getRepository('WallabagCoreBundle:Entry') | ||
689 | ->findOneByUser(1); | ||
690 | |||
691 | if (!$entry) { | ||
692 | $this->markTestSkipped('No content found in db.'); | ||
693 | } | ||
694 | |||
695 | $previousContent = $entry->getContent(); | ||
696 | $previousLanguage = $entry->getLanguage(); | ||
697 | $previousTitle = $entry->getTitle(); | ||
698 | |||
699 | $this->client->request('PATCH', '/api/entries/' . $entry->getId() . '.json', [ | ||
700 | 'origin_url' => '', | ||
701 | ]); | ||
702 | |||
703 | $this->assertSame(200, $this->client->getResponse()->getStatusCode()); | ||
704 | |||
705 | $content = json_decode($this->client->getResponse()->getContent(), true); | ||
706 | |||
707 | $this->assertSame($entry->getId(), $content['id']); | ||
708 | $this->assertSame($entry->getUrl(), $content['url']); | ||
709 | $this->assertEmpty($content['origin_url']); | ||
710 | $this->assertEmpty($content['published_by'], 'Authors were not saved because of an array instead of a string'); | ||
711 | $this->assertSame($previousContent, $content['content'], 'Ensure content has not moved'); | ||
712 | $this->assertSame($previousLanguage, $content['language'], 'Ensure language has not moved'); | ||
713 | $this->assertSame($previousTitle, $content['title'], 'Ensure title has not moved'); | ||
714 | } | ||
715 | |||
716 | public function testPatchEntryNullOriginUrl() | ||
717 | { | ||
718 | $entry = $this->client->getContainer() | ||
719 | ->get('doctrine.orm.entity_manager') | ||
720 | ->getRepository('WallabagCoreBundle:Entry') | ||
721 | ->findOneByUser(1); | ||
722 | |||
723 | if (!$entry) { | ||
724 | $this->markTestSkipped('No content found in db.'); | ||
725 | } | ||
726 | |||
727 | $this->client->request('PATCH', '/api/entries/' . $entry->getId() . '.json', [ | ||
728 | 'origin_url' => null, | ||
729 | ]); | ||
730 | |||
731 | $this->assertSame(200, $this->client->getResponse()->getStatusCode()); | ||
732 | |||
733 | $content = json_decode($this->client->getResponse()->getContent(), true); | ||
734 | |||
735 | $this->assertNull($content['origin_url']); | ||
736 | } | ||
737 | |||
610 | public function testGetTagsEntry() | 738 | public function testGetTagsEntry() |
611 | { | 739 | { |
612 | $entry = $this->client->getContainer() | 740 | $entry = $this->client->getContainer() |
diff --git a/tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php b/tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php index 2a2fd1a4..4ac4548b 100644 --- a/tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php +++ b/tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php | |||
@@ -478,6 +478,7 @@ class EntryControllerTest extends WallabagCoreTestCase | |||
478 | 478 | ||
479 | $data = [ | 479 | $data = [ |
480 | 'entry[title]' => 'My updated title hehe :)', | 480 | 'entry[title]' => 'My updated title hehe :)', |
481 | 'entry[origin_url]' => 'https://example.io', | ||
481 | ]; | 482 | ]; |
482 | 483 | ||
483 | $client->submit($form, $data); | 484 | $client->submit($form, $data); |
@@ -486,8 +487,43 @@ class EntryControllerTest extends WallabagCoreTestCase | |||
486 | 487 | ||
487 | $crawler = $client->followRedirect(); | 488 | $crawler = $client->followRedirect(); |
488 | 489 | ||
489 | $this->assertGreaterThan(1, $alert = $crawler->filter('div[id=article] h1')->extract(['_text'])); | 490 | $this->assertGreaterThan(1, $title = $crawler->filter('div[id=article] h1')->extract(['_text'])); |
490 | $this->assertContains('My updated title hehe :)', $alert[0]); | 491 | $this->assertContains('My updated title hehe :)', $title[0]); |
492 | $this->assertGreaterThan(1, $stats = $crawler->filter('div[class=tools] ul[class=stats] li a[class=tool]')->extract(['_text'])); | ||
493 | $this->assertContains('example.io', trim($stats[1])); | ||
494 | } | ||
495 | |||
496 | public function testEditRemoveOriginUrl() | ||
497 | { | ||
498 | $this->logInAs('admin'); | ||
499 | $client = $this->getClient(); | ||
500 | |||
501 | $entry = new Entry($this->getLoggedInUser()); | ||
502 | $entry->setUrl($this->url); | ||
503 | $this->getEntityManager()->persist($entry); | ||
504 | $this->getEntityManager()->flush(); | ||
505 | |||
506 | $crawler = $client->request('GET', '/edit/' . $entry->getId()); | ||
507 | |||
508 | $this->assertSame(200, $client->getResponse()->getStatusCode()); | ||
509 | |||
510 | $form = $crawler->filter('button[type=submit]')->form(); | ||
511 | |||
512 | $data = [ | ||
513 | 'entry[title]' => 'My updated title hehe :)', | ||
514 | 'entry[origin_url]' => '', | ||
515 | ]; | ||
516 | |||
517 | $client->submit($form, $data); | ||
518 | |||
519 | $this->assertSame(302, $client->getResponse()->getStatusCode()); | ||
520 | |||
521 | $crawler = $client->followRedirect(); | ||
522 | |||
523 | $this->assertGreaterThan(1, $title = $crawler->filter('div[id=article] h1')->extract(['_text'])); | ||
524 | $this->assertContains('My updated title hehe :)', $title[0]); | ||
525 | $this->assertSame(1, count($stats = $crawler->filter('div[class=tools] ul[class=stats] li a[class=tool]')->extract(['_text']))); | ||
526 | $this->assertNotContains('example.io', trim($stats[0])); | ||
491 | } | 527 | } |
492 | 528 | ||
493 | public function testToggleArchive() | 529 | public function testToggleArchive() |
diff --git a/tests/Wallabag/CoreBundle/Twig/WallabagExtensionTest.php b/tests/Wallabag/CoreBundle/Twig/WallabagExtensionTest.php index ceec4b37..82336060 100644 --- a/tests/Wallabag/CoreBundle/Twig/WallabagExtensionTest.php +++ b/tests/Wallabag/CoreBundle/Twig/WallabagExtensionTest.php | |||
@@ -30,4 +30,31 @@ class WallabagExtensionTest extends \PHPUnit_Framework_TestCase | |||
30 | $this->assertSame('lemonde.fr', $extension->removeWww('lemonde.fr')); | 30 | $this->assertSame('lemonde.fr', $extension->removeWww('lemonde.fr')); |
31 | $this->assertSame('gist.github.com', $extension->removeWww('gist.github.com')); | 31 | $this->assertSame('gist.github.com', $extension->removeWww('gist.github.com')); |
32 | } | 32 | } |
33 | |||
34 | public function testRemoveSchemeAndWww() | ||
35 | { | ||
36 | $entryRepository = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository') | ||
37 | ->disableOriginalConstructor() | ||
38 | ->getMock(); | ||
39 | |||
40 | $tagRepository = $this->getMockBuilder('Wallabag\CoreBundle\Repository\TagRepository') | ||
41 | ->disableOriginalConstructor() | ||
42 | ->getMock(); | ||
43 | |||
44 | $tokenStorage = $this->getMockBuilder('Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface') | ||
45 | ->disableOriginalConstructor() | ||
46 | ->getMock(); | ||
47 | |||
48 | $translator = $this->getMockBuilder('Symfony\Component\Translation\TranslatorInterface') | ||
49 | ->disableOriginalConstructor() | ||
50 | ->getMock(); | ||
51 | |||
52 | $extension = new WallabagExtension($entryRepository, $tagRepository, $tokenStorage, 0, $translator); | ||
53 | |||
54 | $this->assertSame('lemonde.fr', $extension->removeSchemeAndWww('www.lemonde.fr')); | ||
55 | $this->assertSame('lemonde.fr', $extension->removeSchemeAndWww('http://lemonde.fr')); | ||
56 | $this->assertSame('lemonde.fr', $extension->removeSchemeAndWww('https://www.lemonde.fr')); | ||
57 | $this->assertSame('gist.github.com', $extension->removeSchemeAndWww('https://gist.github.com')); | ||
58 | $this->assertSame('ftp://gist.github.com', $extension->removeSchemeAndWww('ftp://gist.github.com')); | ||
59 | } | ||
33 | } | 60 | } |