aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/Wallabag/ApiBundle/Controller
diff options
context:
space:
mode:
Diffstat (limited to 'tests/Wallabag/ApiBundle/Controller')
-rw-r--r--tests/Wallabag/ApiBundle/Controller/DeveloperControllerTest.php18
-rw-r--r--tests/Wallabag/ApiBundle/Controller/EntryRestControllerTest.php218
-rw-r--r--tests/Wallabag/ApiBundle/Controller/SearchRestControllerTest.php69
-rw-r--r--tests/Wallabag/ApiBundle/Controller/TagRestControllerTest.php46
-rw-r--r--tests/Wallabag/ApiBundle/Controller/TaggingRuleRestControllerTest.php15
-rw-r--r--tests/Wallabag/ApiBundle/Controller/WallabagRestControllerTest.php17
6 files changed, 338 insertions, 45 deletions
diff --git a/tests/Wallabag/ApiBundle/Controller/DeveloperControllerTest.php b/tests/Wallabag/ApiBundle/Controller/DeveloperControllerTest.php
index f58d1c12..e3d69290 100644
--- a/tests/Wallabag/ApiBundle/Controller/DeveloperControllerTest.php
+++ b/tests/Wallabag/ApiBundle/Controller/DeveloperControllerTest.php
@@ -30,7 +30,7 @@ class DeveloperControllerTest extends WallabagCoreTestCase
30 $newNbClients = $em->getRepository('WallabagApiBundle:Client')->findAll(); 30 $newNbClients = $em->getRepository('WallabagApiBundle:Client')->findAll();
31 $this->assertGreaterThan(\count($nbClients), \count($newNbClients)); 31 $this->assertGreaterThan(\count($nbClients), \count($newNbClients));
32 32
33 $this->assertGreaterThan(1, $alert = $crawler->filter('.settings ul li strong')->extract(['_text'])); 33 $this->assertGreaterThan(1, $alert = $crawler->filter('.settings table strong')->extract(['_text']));
34 $this->assertContains('My app', $alert[0]); 34 $this->assertContains('My app', $alert[0]);
35 } 35 }
36 36
@@ -56,6 +56,20 @@ class DeveloperControllerTest extends WallabagCoreTestCase
56 $this->assertArrayHasKey('refresh_token', $data); 56 $this->assertArrayHasKey('refresh_token', $data);
57 } 57 }
58 58
59 public function testCreateTokenWithBadClientId()
60 {
61 $client = $this->getClient();
62 $client->request('POST', '/oauth/v2/token', [
63 'grant_type' => 'password',
64 'client_id' => '$WALLABAG_CLIENT_ID',
65 'client_secret' => 'secret',
66 'username' => 'admin',
67 'password' => 'mypassword',
68 ]);
69
70 $this->assertSame(400, $client->getResponse()->getStatusCode());
71 }
72
59 public function testListingClient() 73 public function testListingClient()
60 { 74 {
61 $this->logInAs('admin'); 75 $this->logInAs('admin');
@@ -121,7 +135,7 @@ class DeveloperControllerTest extends WallabagCoreTestCase
121 { 135 {
122 $client = $this->getClient(); 136 $client = $this->getClient();
123 $em = $client->getContainer()->get('doctrine.orm.entity_manager'); 137 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
124 $userManager = $client->getContainer()->get('fos_user.user_manager'); 138 $userManager = $client->getContainer()->get('fos_user.user_manager.test');
125 $user = $userManager->findUserBy(['username' => $username]); 139 $user = $userManager->findUserBy(['username' => $username]);
126 $apiClient = new Client($user); 140 $apiClient = new Client($user);
127 $apiClient->setName('My app'); 141 $apiClient->setName('My app');
diff --git a/tests/Wallabag/ApiBundle/Controller/EntryRestControllerTest.php b/tests/Wallabag/ApiBundle/Controller/EntryRestControllerTest.php
index 58b617f3..8b7898ee 100644
--- a/tests/Wallabag/ApiBundle/Controller/EntryRestControllerTest.php
+++ b/tests/Wallabag/ApiBundle/Controller/EntryRestControllerTest.php
@@ -15,7 +15,7 @@ class EntryRestControllerTest extends WallabagApiTestCase
15 $entry = $this->client->getContainer() 15 $entry = $this->client->getContainer()
16 ->get('doctrine.orm.entity_manager') 16 ->get('doctrine.orm.entity_manager')
17 ->getRepository('WallabagCoreBundle:Entry') 17 ->getRepository('WallabagCoreBundle:Entry')
18 ->findOneBy(['user' => 1, 'isArchived' => false]); 18 ->findOneBy(['user' => $this->getUserId(), 'isArchived' => false]);
19 19
20 if (!$entry) { 20 if (!$entry) {
21 $this->markTestSkipped('No content found in db.'); 21 $this->markTestSkipped('No content found in db.');
@@ -41,7 +41,7 @@ class EntryRestControllerTest extends WallabagApiTestCase
41 $entry = $this->client->getContainer() 41 $entry = $this->client->getContainer()
42 ->get('doctrine.orm.entity_manager') 42 ->get('doctrine.orm.entity_manager')
43 ->getRepository('WallabagCoreBundle:Entry') 43 ->getRepository('WallabagCoreBundle:Entry')
44 ->findOneBy(['user' => 1, 'url' => 'http://0.0.0.0/entry2']); 44 ->findOneBy(['user' => $this->getUserId(), 'url' => 'http://0.0.0.0/entry2']);
45 45
46 if (!$entry) { 46 if (!$entry) {
47 $this->markTestSkipped('No content found in db.'); 47 $this->markTestSkipped('No content found in db.');
@@ -60,7 +60,7 @@ class EntryRestControllerTest extends WallabagApiTestCase
60 $entry = $this->client->getContainer() 60 $entry = $this->client->getContainer()
61 ->get('doctrine.orm.entity_manager') 61 ->get('doctrine.orm.entity_manager')
62 ->getRepository('WallabagCoreBundle:Entry') 62 ->getRepository('WallabagCoreBundle:Entry')
63 ->findOneBy(['user' => 1, 'isArchived' => false]); 63 ->findOneBy(['user' => $this->getUserId(), 'isArchived' => false]);
64 64
65 if (!$entry) { 65 if (!$entry) {
66 $this->markTestSkipped('No content found in db.'); 66 $this->markTestSkipped('No content found in db.');
@@ -108,7 +108,7 @@ class EntryRestControllerTest extends WallabagApiTestCase
108 $entry = $this->client->getContainer() 108 $entry = $this->client->getContainer()
109 ->get('doctrine.orm.entity_manager') 109 ->get('doctrine.orm.entity_manager')
110 ->getRepository('WallabagCoreBundle:Entry') 110 ->getRepository('WallabagCoreBundle:Entry')
111 ->findOneBy(['user' => 2, 'isArchived' => false]); 111 ->findOneBy(['user' => $this->getUserId('bob'), 'isArchived' => false]);
112 112
113 if (!$entry) { 113 if (!$entry) {
114 $this->markTestSkipped('No content found in db.'); 114 $this->markTestSkipped('No content found in db.');
@@ -133,6 +133,27 @@ class EntryRestControllerTest extends WallabagApiTestCase
133 $this->assertSame(1, $content['page']); 133 $this->assertSame(1, $content['page']);
134 $this->assertGreaterThanOrEqual(1, $content['pages']); 134 $this->assertGreaterThanOrEqual(1, $content['pages']);
135 135
136 $this->assertNotNull($content['_embedded']['items'][0]['content']);
137
138 $this->assertSame('application/json', $this->client->getResponse()->headers->get('Content-Type'));
139 }
140
141 public function testGetEntriesDetailMetadata()
142 {
143 $this->client->request('GET', '/api/entries?detail=metadata');
144
145 $this->assertSame(200, $this->client->getResponse()->getStatusCode());
146
147 $content = json_decode($this->client->getResponse()->getContent(), true);
148
149 $this->assertGreaterThanOrEqual(1, \count($content));
150 $this->assertNotEmpty($content['_embedded']['items']);
151 $this->assertGreaterThanOrEqual(1, $content['total']);
152 $this->assertSame(1, $content['page']);
153 $this->assertGreaterThanOrEqual(1, $content['pages']);
154
155 $this->assertNull($content['_embedded']['items'][0]['content']);
156
136 $this->assertSame('application/json', $this->client->getResponse()->headers->get('Content-Type')); 157 $this->assertSame('application/json', $this->client->getResponse()->headers->get('Content-Type'));
137 } 158 }
138 159
@@ -185,7 +206,7 @@ class EntryRestControllerTest extends WallabagApiTestCase
185 $entry = $this->client->getContainer() 206 $entry = $this->client->getContainer()
186 ->get('doctrine.orm.entity_manager') 207 ->get('doctrine.orm.entity_manager')
187 ->getRepository('WallabagCoreBundle:Entry') 208 ->getRepository('WallabagCoreBundle:Entry')
188 ->findOneByUser(1); 209 ->findOneByUser($this->getUserId());
189 210
190 if (!$entry) { 211 if (!$entry) {
191 $this->markTestSkipped('No content found in db.'); 212 $this->markTestSkipped('No content found in db.');
@@ -242,6 +263,15 @@ class EntryRestControllerTest extends WallabagApiTestCase
242 $this->assertSame(2, $content['limit']); 263 $this->assertSame(2, $content['limit']);
243 } 264 }
244 265
266 public function testGetStarredEntriesWithBadSort()
267 {
268 $this->client->request('GET', '/api/entries', ['starred' => 1, 'sort' => 'updated', 'order' => 'unknown']);
269
270 $this->assertSame(400, $this->client->getResponse()->getStatusCode());
271
272 $this->assertSame('application/json', $this->client->getResponse()->headers->get('Content-Type'));
273 }
274
245 public function testGetStarredEntries() 275 public function testGetStarredEntries()
246 { 276 {
247 $this->client->request('GET', '/api/entries', ['starred' => 1, 'sort' => 'updated']); 277 $this->client->request('GET', '/api/entries', ['starred' => 1, 'sort' => 'updated']);
@@ -391,29 +421,71 @@ class EntryRestControllerTest extends WallabagApiTestCase
391 421
392 public function testDeleteEntry() 422 public function testDeleteEntry()
393 { 423 {
394 $entry = $this->client->getContainer() 424 $em = $this->client->getContainer()->get('doctrine.orm.entity_manager');
395 ->get('doctrine.orm.entity_manager') 425 $entry = new Entry($em->getReference(User::class, 1));
396 ->getRepository('WallabagCoreBundle:Entry') 426 $entry->setUrl('http://0.0.0.0/test-delete-entry');
397 ->findOneByUser(1, ['id' => 'asc']); 427 $entry->setTitle('Test delete entry');
428 $em->persist($entry);
429 $em->flush();
398 430
399 if (!$entry) { 431 $em->clear();
400 $this->markTestSkipped('No content found in db.');
401 }
402 432
403 $this->client->request('DELETE', '/api/entries/' . $entry->getId() . '.json'); 433 $e = [
434 'title' => $entry->getTitle(),
435 'url' => $entry->getUrl(),
436 'id' => $entry->getId(),
437 ];
438
439 $this->client->request('DELETE', '/api/entries/' . $e['id'] . '.json');
404 440
405 $this->assertSame(200, $this->client->getResponse()->getStatusCode()); 441 $this->assertSame(200, $this->client->getResponse()->getStatusCode());
406 442
407 $content = json_decode($this->client->getResponse()->getContent(), true); 443 $content = json_decode($this->client->getResponse()->getContent(), true);
408 444
409 $this->assertSame($entry->getTitle(), $content['title']); 445 $this->assertSame($e['title'], $content['title']);
410 $this->assertSame($entry->getUrl(), $content['url']); 446 $this->assertSame($e['url'], $content['url']);
411 $this->assertSame($entry->getId(), $content['id']); 447 $this->assertSame($e['id'], $content['id']);
448
449 // We'll try to delete this entry again
450 $client = $this->createAuthorizedClient();
451 $client->request('DELETE', '/api/entries/' . $e['id'] . '.json');
452
453 $this->assertSame(404, $client->getResponse()->getStatusCode());
454 }
455
456 public function testDeleteEntryExpectId()
457 {
458 $em = $this->client->getContainer()->get('doctrine.orm.entity_manager');
459 $entry = new Entry($em->getReference(User::class, 1));
460 $entry->setUrl('http://0.0.0.0/test-delete-entry-id');
461 $em->persist($entry);
462 $em->flush();
463
464 $em->clear();
465
466 $id = $entry->getId();
467
468 $this->client->request('DELETE', '/api/entries/' . $id . '.json?expect=id');
469
470 $this->assertSame(200, $this->client->getResponse()->getStatusCode());
471
472 $content = json_decode($this->client->getResponse()->getContent(), true);
473
474 $this->assertSame($id, $content['id']);
475 $this->assertArrayNotHasKey('url', $content);
412 476
413 // We'll try to delete this entry again 477 // We'll try to delete this entry again
414 $this->client->request('DELETE', '/api/entries/' . $entry->getId() . '.json'); 478 $client = $this->createAuthorizedClient();
479 $client->request('DELETE', '/api/entries/' . $id . '.json');
415 480
416 $this->assertSame(404, $this->client->getResponse()->getStatusCode()); 481 $this->assertSame(404, $client->getResponse()->getStatusCode());
482 }
483
484 public function testDeleteEntryExpectBadRequest()
485 {
486 $this->client->request('DELETE', '/api/entries/1.json?expect=badrequest');
487
488 $this->assertSame(400, $this->client->getResponse()->getStatusCode());
417 } 489 }
418 490
419 public function testPostEntry() 491 public function testPostEntry()
@@ -438,8 +510,9 @@ class EntryRestControllerTest extends WallabagApiTestCase
438 $this->assertSame(0, $content['is_archived']); 510 $this->assertSame(0, $content['is_archived']);
439 $this->assertSame(0, $content['is_starred']); 511 $this->assertSame(0, $content['is_starred']);
440 $this->assertNull($content['starred_at']); 512 $this->assertNull($content['starred_at']);
513 $this->assertNull($content['archived_at']);
441 $this->assertSame('New title for my article', $content['title']); 514 $this->assertSame('New title for my article', $content['title']);
442 $this->assertSame(1, $content['user_id']); 515 $this->assertSame($this->getUserId(), $content['user_id']);
443 $this->assertCount(2, $content['tags']); 516 $this->assertCount(2, $content['tags']);
444 $this->assertNull($content['origin_url']); 517 $this->assertNull($content['origin_url']);
445 $this->assertSame('my content', $content['content']); 518 $this->assertSame('my content', $content['content']);
@@ -454,7 +527,7 @@ class EntryRestControllerTest extends WallabagApiTestCase
454 public function testPostSameEntry() 527 public function testPostSameEntry()
455 { 528 {
456 $em = $this->client->getContainer()->get('doctrine.orm.entity_manager'); 529 $em = $this->client->getContainer()->get('doctrine.orm.entity_manager');
457 $entry = new Entry($em->getReference(User::class, 1)); 530 $entry = new Entry($em->getReference(User::class, $this->getUserId()));
458 $entry->setUrl('https://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'); 531 $entry->setUrl('https://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');
459 $entry->setArchived(true); 532 $entry->setArchived(true);
460 $entry->addTag((new Tag())->setLabel('google')); 533 $entry->addTag((new Tag())->setLabel('google'));
@@ -533,7 +606,8 @@ class EntryRestControllerTest extends WallabagApiTestCase
533 $this->assertSame(1, $content['is_archived']); 606 $this->assertSame(1, $content['is_archived']);
534 $this->assertSame(1, $content['is_starred']); 607 $this->assertSame(1, $content['is_starred']);
535 $this->assertGreaterThanOrEqual($now->getTimestamp(), (new \DateTime($content['starred_at']))->getTimestamp()); 608 $this->assertGreaterThanOrEqual($now->getTimestamp(), (new \DateTime($content['starred_at']))->getTimestamp());
536 $this->assertSame(1, $content['user_id']); 609 $this->assertGreaterThanOrEqual($now->getTimestamp(), (new \DateTime($content['archived_at']))->getTimestamp());
610 $this->assertSame($this->getUserId(), $content['user_id']);
537 } 611 }
538 612
539 public function testPostArchivedAndStarredEntryWithoutQuotes() 613 public function testPostArchivedAndStarredEntryWithoutQuotes()
@@ -582,7 +656,7 @@ class EntryRestControllerTest extends WallabagApiTestCase
582 $entry = $this->client->getContainer() 656 $entry = $this->client->getContainer()
583 ->get('doctrine.orm.entity_manager') 657 ->get('doctrine.orm.entity_manager')
584 ->getRepository('WallabagCoreBundle:Entry') 658 ->getRepository('WallabagCoreBundle:Entry')
585 ->findOneByUser(1); 659 ->findOneByUser($this->getUserId());
586 660
587 if (!$entry) { 661 if (!$entry) {
588 $this->markTestSkipped('No content found in db.'); 662 $this->markTestSkipped('No content found in db.');
@@ -609,7 +683,7 @@ class EntryRestControllerTest extends WallabagApiTestCase
609 $this->assertSame($entry->getUrl(), $content['url']); 683 $this->assertSame($entry->getUrl(), $content['url']);
610 $this->assertSame('New awesome title', $content['title']); 684 $this->assertSame('New awesome title', $content['title']);
611 $this->assertGreaterThanOrEqual(1, \count($content['tags']), 'We force only one tag'); 685 $this->assertGreaterThanOrEqual(1, \count($content['tags']), 'We force only one tag');
612 $this->assertSame(1, $content['user_id']); 686 $this->assertSame($this->getUserId(), $content['user_id']);
613 $this->assertSame('de_AT', $content['language']); 687 $this->assertSame('de_AT', $content['language']);
614 $this->assertSame('http://preview.io/picture.jpg', $content['preview_picture']); 688 $this->assertSame('http://preview.io/picture.jpg', $content['preview_picture']);
615 $this->assertContains('sponge', $content['published_by']); 689 $this->assertContains('sponge', $content['published_by']);
@@ -624,7 +698,7 @@ class EntryRestControllerTest extends WallabagApiTestCase
624 $entry = $this->client->getContainer() 698 $entry = $this->client->getContainer()
625 ->get('doctrine.orm.entity_manager') 699 ->get('doctrine.orm.entity_manager')
626 ->getRepository('WallabagCoreBundle:Entry') 700 ->getRepository('WallabagCoreBundle:Entry')
627 ->findOneByUser(1); 701 ->findOneByUser($this->getUserId());
628 702
629 if (!$entry) { 703 if (!$entry) {
630 $this->markTestSkipped('No content found in db.'); 704 $this->markTestSkipped('No content found in db.');
@@ -658,7 +732,7 @@ class EntryRestControllerTest extends WallabagApiTestCase
658 $entry = $this->client->getContainer() 732 $entry = $this->client->getContainer()
659 ->get('doctrine.orm.entity_manager') 733 ->get('doctrine.orm.entity_manager')
660 ->getRepository('WallabagCoreBundle:Entry') 734 ->getRepository('WallabagCoreBundle:Entry')
661 ->findOneByUser(1); 735 ->findOneByUser($this->getUserId());
662 736
663 if (!$entry) { 737 if (!$entry) {
664 $this->markTestSkipped('No content found in db.'); 738 $this->markTestSkipped('No content found in db.');
@@ -689,7 +763,7 @@ class EntryRestControllerTest extends WallabagApiTestCase
689 $entry = $this->client->getContainer() 763 $entry = $this->client->getContainer()
690 ->get('doctrine.orm.entity_manager') 764 ->get('doctrine.orm.entity_manager')
691 ->getRepository('WallabagCoreBundle:Entry') 765 ->getRepository('WallabagCoreBundle:Entry')
692 ->findOneByUser(1); 766 ->findOneByUser($this->getUserId());
693 767
694 if (!$entry) { 768 if (!$entry) {
695 $this->markTestSkipped('No content found in db.'); 769 $this->markTestSkipped('No content found in db.');
@@ -721,7 +795,7 @@ class EntryRestControllerTest extends WallabagApiTestCase
721 $entry = $this->client->getContainer() 795 $entry = $this->client->getContainer()
722 ->get('doctrine.orm.entity_manager') 796 ->get('doctrine.orm.entity_manager')
723 ->getRepository('WallabagCoreBundle:Entry') 797 ->getRepository('WallabagCoreBundle:Entry')
724 ->findOneByUser(1); 798 ->findOneByUser($this->getUserId());
725 799
726 if (!$entry) { 800 if (!$entry) {
727 $this->markTestSkipped('No content found in db.'); 801 $this->markTestSkipped('No content found in db.');
@@ -766,7 +840,7 @@ class EntryRestControllerTest extends WallabagApiTestCase
766 $entry = $this->client->getContainer() 840 $entry = $this->client->getContainer()
767 ->get('doctrine.orm.entity_manager') 841 ->get('doctrine.orm.entity_manager')
768 ->getRepository('WallabagCoreBundle:Entry') 842 ->getRepository('WallabagCoreBundle:Entry')
769 ->findOneByUser(1); 843 ->findOneByUser($this->getUserId());
770 844
771 if (!$entry) { 845 if (!$entry) {
772 $this->markTestSkipped('No content found in db.'); 846 $this->markTestSkipped('No content found in db.');
@@ -783,7 +857,7 @@ class EntryRestControllerTest extends WallabagApiTestCase
783 $content = json_decode($this->client->getResponse()->getContent(), true); 857 $content = json_decode($this->client->getResponse()->getContent(), true);
784 858
785 $this->assertArrayHasKey('tags', $content); 859 $this->assertArrayHasKey('tags', $content);
786 $this->assertSame($nbTags + 3, \count($content['tags'])); 860 $this->assertCount($nbTags + 3, $content['tags']);
787 861
788 $entryDB = $this->client->getContainer() 862 $entryDB = $this->client->getContainer()
789 ->get('doctrine.orm.entity_manager') 863 ->get('doctrine.orm.entity_manager')
@@ -823,7 +897,7 @@ class EntryRestControllerTest extends WallabagApiTestCase
823 $content = json_decode($this->client->getResponse()->getContent(), true); 897 $content = json_decode($this->client->getResponse()->getContent(), true);
824 898
825 $this->assertArrayHasKey('tags', $content); 899 $this->assertArrayHasKey('tags', $content);
826 $this->assertSame($nbTags - 1, \count($content['tags'])); 900 $this->assertCount($nbTags - 1, $content['tags']);
827 } 901 }
828 902
829 public function testSaveIsArchivedAfterPost() 903 public function testSaveIsArchivedAfterPost()
@@ -831,7 +905,7 @@ class EntryRestControllerTest extends WallabagApiTestCase
831 $entry = $this->client->getContainer() 905 $entry = $this->client->getContainer()
832 ->get('doctrine.orm.entity_manager') 906 ->get('doctrine.orm.entity_manager')
833 ->getRepository('WallabagCoreBundle:Entry') 907 ->getRepository('WallabagCoreBundle:Entry')
834 ->findOneBy(['user' => 1, 'isArchived' => true]); 908 ->findOneBy(['user' => $this->getUserId(), 'isArchived' => true]);
835 909
836 if (!$entry) { 910 if (!$entry) {
837 $this->markTestSkipped('No content found in db.'); 911 $this->markTestSkipped('No content found in db.');
@@ -853,7 +927,7 @@ class EntryRestControllerTest extends WallabagApiTestCase
853 $entry = $this->client->getContainer() 927 $entry = $this->client->getContainer()
854 ->get('doctrine.orm.entity_manager') 928 ->get('doctrine.orm.entity_manager')
855 ->getRepository('WallabagCoreBundle:Entry') 929 ->getRepository('WallabagCoreBundle:Entry')
856 ->findOneBy(['user' => 1, 'isStarred' => true]); 930 ->findOneBy(['user' => $this->getUserId(), 'isStarred' => true]);
857 931
858 if (!$entry) { 932 if (!$entry) {
859 $this->markTestSkipped('No content found in db.'); 933 $this->markTestSkipped('No content found in db.');
@@ -875,7 +949,7 @@ class EntryRestControllerTest extends WallabagApiTestCase
875 $entry = $this->client->getContainer() 949 $entry = $this->client->getContainer()
876 ->get('doctrine.orm.entity_manager') 950 ->get('doctrine.orm.entity_manager')
877 ->getRepository('WallabagCoreBundle:Entry') 951 ->getRepository('WallabagCoreBundle:Entry')
878 ->findOneBy(['user' => 1, 'isArchived' => true]); 952 ->findOneBy(['user' => $this->getUserId(), 'isArchived' => true]);
879 953
880 if (!$entry) { 954 if (!$entry) {
881 $this->markTestSkipped('No content found in db.'); 955 $this->markTestSkipped('No content found in db.');
@@ -901,7 +975,7 @@ class EntryRestControllerTest extends WallabagApiTestCase
901 $entry = $this->client->getContainer() 975 $entry = $this->client->getContainer()
902 ->get('doctrine.orm.entity_manager') 976 ->get('doctrine.orm.entity_manager')
903 ->getRepository('WallabagCoreBundle:Entry') 977 ->getRepository('WallabagCoreBundle:Entry')
904 ->findOneBy(['user' => 1, 'isStarred' => true]); 978 ->findOneBy(['user' => $this->getUserId(), 'isStarred' => true]);
905 979
906 if (!$entry) { 980 if (!$entry) {
907 $this->markTestSkipped('No content found in db.'); 981 $this->markTestSkipped('No content found in db.');
@@ -920,6 +994,8 @@ class EntryRestControllerTest extends WallabagApiTestCase
920 994
921 public function dataForEntriesExistWithUrl() 995 public function dataForEntriesExistWithUrl()
922 { 996 {
997 $url = hash('sha1', 'http://0.0.0.0/entry2');
998
923 return [ 999 return [
924 'with_id' => [ 1000 'with_id' => [
925 'url' => '/api/entries/exists?url=http://0.0.0.0/entry2&return_id=1', 1001 'url' => '/api/entries/exists?url=http://0.0.0.0/entry2&return_id=1',
@@ -929,6 +1005,14 @@ class EntryRestControllerTest extends WallabagApiTestCase
929 'url' => '/api/entries/exists?url=http://0.0.0.0/entry2', 1005 'url' => '/api/entries/exists?url=http://0.0.0.0/entry2',
930 'expectedValue' => true, 1006 'expectedValue' => true,
931 ], 1007 ],
1008 'hashed_url_with_id' => [
1009 'url' => '/api/entries/exists?hashed_url=' . $url . '&return_id=1',
1010 'expectedValue' => 2,
1011 ],
1012 'hashed_url_without_id' => [
1013 'url' => '/api/entries/exists?hashed_url=' . $url . '',
1014 'expectedValue' => true,
1015 ],
932 ]; 1016 ];
933 } 1017 }
934 1018
@@ -950,6 +1034,7 @@ class EntryRestControllerTest extends WallabagApiTestCase
950 { 1034 {
951 $url1 = 'http://0.0.0.0/entry2'; 1035 $url1 = 'http://0.0.0.0/entry2';
952 $url2 = 'http://0.0.0.0/entry10'; 1036 $url2 = 'http://0.0.0.0/entry10';
1037
953 $this->client->request('GET', '/api/entries/exists?urls[]=' . $url1 . '&urls[]=' . $url2 . '&return_id=1'); 1038 $this->client->request('GET', '/api/entries/exists?urls[]=' . $url1 . '&urls[]=' . $url2 . '&return_id=1');
954 1039
955 $this->assertSame(200, $this->client->getResponse()->getStatusCode()); 1040 $this->assertSame(200, $this->client->getResponse()->getStatusCode());
@@ -958,7 +1043,8 @@ class EntryRestControllerTest extends WallabagApiTestCase
958 1043
959 $this->assertArrayHasKey($url1, $content); 1044 $this->assertArrayHasKey($url1, $content);
960 $this->assertArrayHasKey($url2, $content); 1045 $this->assertArrayHasKey($url2, $content);
961 $this->assertSame(2, $content[$url1]); 1046 // it returns a database id, we don't know it, so we only check it's greater than the lowest possible value
1047 $this->assertGreaterThan(1, $content[$url1]);
962 $this->assertNull($content[$url2]); 1048 $this->assertNull($content[$url2]);
963 } 1049 }
964 1050
@@ -978,6 +1064,38 @@ class EntryRestControllerTest extends WallabagApiTestCase
978 $this->assertFalse($content[$url2]); 1064 $this->assertFalse($content[$url2]);
979 } 1065 }
980 1066
1067 public function testGetEntriesExistsWithManyUrlsHashed()
1068 {
1069 $url1 = 'http://0.0.0.0/entry2';
1070 $url2 = 'http://0.0.0.0/entry10';
1071 $this->client->request('GET', '/api/entries/exists?hashed_urls[]=' . hash('sha1', $url1) . '&hashed_urls[]=' . hash('sha1', $url2) . '&return_id=1');
1072
1073 $this->assertSame(200, $this->client->getResponse()->getStatusCode());
1074
1075 $content = json_decode($this->client->getResponse()->getContent(), true);
1076
1077 $this->assertArrayHasKey(hash('sha1', $url1), $content);
1078 $this->assertArrayHasKey(hash('sha1', $url2), $content);
1079 $this->assertSame(2, $content[hash('sha1', $url1)]);
1080 $this->assertNull($content[hash('sha1', $url2)]);
1081 }
1082
1083 public function testGetEntriesExistsWithManyUrlsHashedReturnBool()
1084 {
1085 $url1 = 'http://0.0.0.0/entry2';
1086 $url2 = 'http://0.0.0.0/entry10';
1087 $this->client->request('GET', '/api/entries/exists?hashed_urls[]=' . hash('sha1', $url1) . '&hashed_urls[]=' . hash('sha1', $url2));
1088
1089 $this->assertSame(200, $this->client->getResponse()->getStatusCode());
1090
1091 $content = json_decode($this->client->getResponse()->getContent(), true);
1092
1093 $this->assertArrayHasKey(hash('sha1', $url1), $content);
1094 $this->assertArrayHasKey(hash('sha1', $url2), $content);
1095 $this->assertTrue($content[hash('sha1', $url1)]);
1096 $this->assertFalse($content[hash('sha1', $url2)]);
1097 }
1098
981 public function testGetEntriesExistsWhichDoesNotExists() 1099 public function testGetEntriesExistsWhichDoesNotExists()
982 { 1100 {
983 $this->client->request('GET', '/api/entries/exists?url=http://google.com/entry2'); 1101 $this->client->request('GET', '/api/entries/exists?url=http://google.com/entry2');
@@ -989,6 +1107,17 @@ class EntryRestControllerTest extends WallabagApiTestCase
989 $this->assertFalse($content['exists']); 1107 $this->assertFalse($content['exists']);
990 } 1108 }
991 1109
1110 public function testGetEntriesExistsWhichDoesNotExistsWithHashedUrl()
1111 {
1112 $this->client->request('GET', '/api/entries/exists?hashed_url=' . hash('sha1', 'http://google.com/entry2'));
1113
1114 $this->assertSame(200, $this->client->getResponse()->getStatusCode());
1115
1116 $content = json_decode($this->client->getResponse()->getContent(), true);
1117
1118 $this->assertFalse($content['exists']);
1119 }
1120
992 public function testGetEntriesExistsWithNoUrl() 1121 public function testGetEntriesExistsWithNoUrl()
993 { 1122 {
994 $this->client->request('GET', '/api/entries/exists?url='); 1123 $this->client->request('GET', '/api/entries/exists?url=');
@@ -996,11 +1125,18 @@ class EntryRestControllerTest extends WallabagApiTestCase
996 $this->assertSame(403, $this->client->getResponse()->getStatusCode()); 1125 $this->assertSame(403, $this->client->getResponse()->getStatusCode());
997 } 1126 }
998 1127
1128 public function testGetEntriesExistsWithNoHashedUrl()
1129 {
1130 $this->client->request('GET', '/api/entries/exists?hashed_url=');
1131
1132 $this->assertSame(403, $this->client->getResponse()->getStatusCode());
1133 }
1134
999 public function testReloadEntryErrorWhileFetching() 1135 public function testReloadEntryErrorWhileFetching()
1000 { 1136 {
1001 $entry = $this->client->getContainer()->get('doctrine.orm.entity_manager') 1137 $entry = $this->client->getContainer()->get('doctrine.orm.entity_manager')
1002 ->getRepository('WallabagCoreBundle:Entry') 1138 ->getRepository('WallabagCoreBundle:Entry')
1003 ->findByUrlAndUserId('http://0.0.0.0/entry4', 1); 1139 ->findByUrlAndUserId('http://0.0.0.0/entry4', $this->getUserId());
1004 1140
1005 if (!$entry) { 1141 if (!$entry) {
1006 $this->markTestSkipped('No content found in db.'); 1142 $this->markTestSkipped('No content found in db.');
@@ -1036,7 +1172,7 @@ class EntryRestControllerTest extends WallabagApiTestCase
1036 { 1172 {
1037 $entry = $this->client->getContainer()->get('doctrine.orm.entity_manager') 1173 $entry = $this->client->getContainer()->get('doctrine.orm.entity_manager')
1038 ->getRepository('WallabagCoreBundle:Entry') 1174 ->getRepository('WallabagCoreBundle:Entry')
1039 ->findByUrlAndUserId('http://0.0.0.0/entry4', 1); 1175 ->findByUrlAndUserId('http://0.0.0.0/entry4', $this->getUserId());
1040 1176
1041 $tags = $entry->getTags(); 1177 $tags = $entry->getTags();
1042 1178
@@ -1060,7 +1196,7 @@ class EntryRestControllerTest extends WallabagApiTestCase
1060 1196
1061 $entry = $this->client->getContainer()->get('doctrine.orm.entity_manager') 1197 $entry = $this->client->getContainer()->get('doctrine.orm.entity_manager')
1062 ->getRepository('WallabagCoreBundle:Entry') 1198 ->getRepository('WallabagCoreBundle:Entry')
1063 ->findByUrlAndUserId('http://0.0.0.0/entry4', 1); 1199 ->findByUrlAndUserId('http://0.0.0.0/entry4', $this->getUserId());
1064 1200
1065 $tags = $entry->getTags(); 1201 $tags = $entry->getTags();
1066 $this->assertCount(4, $tags); 1202 $this->assertCount(4, $tags);
@@ -1080,7 +1216,7 @@ class EntryRestControllerTest extends WallabagApiTestCase
1080 public function testDeleteEntriesTagsListAction() 1216 public function testDeleteEntriesTagsListAction()
1081 { 1217 {
1082 $em = $this->client->getContainer()->get('doctrine.orm.entity_manager'); 1218 $em = $this->client->getContainer()->get('doctrine.orm.entity_manager');
1083 $entry = new Entry($em->getReference(User::class, 1)); 1219 $entry = new Entry($em->getReference(User::class, $this->getUserId()));
1084 $entry->setUrl('http://0.0.0.0/test-entry'); 1220 $entry->setUrl('http://0.0.0.0/test-entry');
1085 $entry->addTag((new Tag())->setLabel('foo-tag')); 1221 $entry->addTag((new Tag())->setLabel('foo-tag'));
1086 $entry->addTag((new Tag())->setLabel('bar-tag')); 1222 $entry->addTag((new Tag())->setLabel('bar-tag'));
@@ -1148,7 +1284,7 @@ class EntryRestControllerTest extends WallabagApiTestCase
1148 public function testDeleteEntriesListAction() 1284 public function testDeleteEntriesListAction()
1149 { 1285 {
1150 $em = $this->client->getContainer()->get('doctrine.orm.entity_manager'); 1286 $em = $this->client->getContainer()->get('doctrine.orm.entity_manager');
1151 $em->persist((new Entry($em->getReference(User::class, 1)))->setUrl('http://0.0.0.0/test-entry1')); 1287 $em->persist((new Entry($em->getReference(User::class, $this->getUserId())))->setUrl('http://0.0.0.0/test-entry1'));
1152 1288
1153 $em->flush(); 1289 $em->flush();
1154 $em->clear(); 1290 $em->clear();
@@ -1206,7 +1342,7 @@ class EntryRestControllerTest extends WallabagApiTestCase
1206 public function testRePostEntryAndReUsePublishedAt() 1342 public function testRePostEntryAndReUsePublishedAt()
1207 { 1343 {
1208 $em = $this->client->getContainer()->get('doctrine.orm.entity_manager'); 1344 $em = $this->client->getContainer()->get('doctrine.orm.entity_manager');
1209 $entry = new Entry($em->getReference(User::class, 1)); 1345 $entry = new Entry($em->getReference(User::class, $this->getUserId()));
1210 $entry->setTitle('Antoine de Caunes : « Je veux avoir le droit de tâtonner »'); 1346 $entry->setTitle('Antoine de Caunes : « Je veux avoir le droit de tâtonner »');
1211 $entry->setContent('hihi'); 1347 $entry->setContent('hihi');
1212 $entry->setUrl('https://www.lemonde.fr/m-perso/article/2017/06/25/antoine-de-caunes-je-veux-avoir-le-droit-de-tatonner_5150728_4497916.html'); 1348 $entry->setUrl('https://www.lemonde.fr/m-perso/article/2017/06/25/antoine-de-caunes-je-veux-avoir-le-droit-de-tatonner_5150728_4497916.html');
diff --git a/tests/Wallabag/ApiBundle/Controller/SearchRestControllerTest.php b/tests/Wallabag/ApiBundle/Controller/SearchRestControllerTest.php
new file mode 100644
index 00000000..fd524639
--- /dev/null
+++ b/tests/Wallabag/ApiBundle/Controller/SearchRestControllerTest.php
@@ -0,0 +1,69 @@
1<?php
2
3namespace Tests\Wallabag\ApiBundle\Controller;
4
5use Tests\Wallabag\ApiBundle\WallabagApiTestCase;
6
7class SearchRestControllerTest extends WallabagApiTestCase
8{
9 public function testGetSearchWithFullOptions()
10 {
11 $this->client->request('GET', '/api/search', [
12 'page' => 1,
13 'perPage' => 2,
14 'term' => 'entry', // 6 results
15 ]);
16
17 $this->assertSame(200, $this->client->getResponse()->getStatusCode());
18
19 $content = json_decode($this->client->getResponse()->getContent(), true);
20
21 $this->assertGreaterThanOrEqual(1, \count($content));
22 $this->assertArrayHasKey('items', $content['_embedded']);
23 $this->assertGreaterThanOrEqual(0, $content['total']);
24 $this->assertSame(1, $content['page']);
25 $this->assertSame(2, $content['limit']);
26 $this->assertGreaterThanOrEqual(1, $content['pages']);
27
28 $this->assertArrayHasKey('_links', $content);
29 $this->assertArrayHasKey('self', $content['_links']);
30 $this->assertArrayHasKey('first', $content['_links']);
31 $this->assertArrayHasKey('last', $content['_links']);
32
33 foreach (['self', 'first', 'last'] as $link) {
34 $this->assertArrayHasKey('href', $content['_links'][$link]);
35 $this->assertContains('term=entry', $content['_links'][$link]['href']);
36 }
37
38 $this->assertSame('application/json', $this->client->getResponse()->headers->get('Content-Type'));
39 }
40
41 public function testGetSearchWithNoLimit()
42 {
43 $this->client->request('GET', '/api/search', [
44 'term' => 'entry',
45 ]);
46
47 $this->assertSame(200, $this->client->getResponse()->getStatusCode());
48
49 $content = json_decode($this->client->getResponse()->getContent(), true);
50
51 $this->assertGreaterThanOrEqual(1, \count($content));
52 $this->assertArrayHasKey('items', $content['_embedded']);
53 $this->assertGreaterThanOrEqual(0, $content['total']);
54 $this->assertSame(1, $content['page']);
55 $this->assertGreaterThanOrEqual(1, $content['pages']);
56
57 $this->assertArrayHasKey('_links', $content);
58 $this->assertArrayHasKey('self', $content['_links']);
59 $this->assertArrayHasKey('first', $content['_links']);
60 $this->assertArrayHasKey('last', $content['_links']);
61
62 foreach (['self', 'first', 'last'] as $link) {
63 $this->assertArrayHasKey('href', $content['_links'][$link]);
64 $this->assertContains('term=entry', $content['_links'][$link]['href']);
65 }
66
67 $this->assertSame('application/json', $this->client->getResponse()->headers->get('Content-Type'));
68 }
69}
diff --git a/tests/Wallabag/ApiBundle/Controller/TagRestControllerTest.php b/tests/Wallabag/ApiBundle/Controller/TagRestControllerTest.php
index 430e548d..9daa94cd 100644
--- a/tests/Wallabag/ApiBundle/Controller/TagRestControllerTest.php
+++ b/tests/Wallabag/ApiBundle/Controller/TagRestControllerTest.php
@@ -7,6 +7,8 @@ use Wallabag\CoreBundle\Entity\Tag;
7 7
8class TagRestControllerTest extends WallabagApiTestCase 8class TagRestControllerTest extends WallabagApiTestCase
9{ 9{
10 private $otherUserTagLabel = 'bob';
11
10 public function testGetUserTags() 12 public function testGetUserTags()
11 { 13 {
12 $this->client->request('GET', '/api/tags.json'); 14 $this->client->request('GET', '/api/tags.json');
@@ -19,17 +21,33 @@ class TagRestControllerTest extends WallabagApiTestCase
19 $this->assertArrayHasKey('id', $content[0]); 21 $this->assertArrayHasKey('id', $content[0]);
20 $this->assertArrayHasKey('label', $content[0]); 22 $this->assertArrayHasKey('label', $content[0]);
21 23
24 $tagLabels = array_map(function ($i) {
25 return $i['label'];
26 }, $content);
27
28 $this->assertNotContains($this->otherUserTagLabel, $tagLabels, 'There is a possible tag leak');
29
22 return end($content); 30 return end($content);
23 } 31 }
24 32
25 public function testDeleteUserTag() 33 public function testDeleteUserTag()
26 { 34 {
35 $em = $this->client->getContainer()->get('doctrine.orm.entity_manager');
36 $entry = $this->client->getContainer()
37 ->get('doctrine.orm.entity_manager')
38 ->getRepository('WallabagCoreBundle:Entry')
39 ->findOneWithTags($this->user->getId());
40
41 $entry = $entry[0];
42
27 $tagLabel = 'tagtest'; 43 $tagLabel = 'tagtest';
28 $tag = new Tag(); 44 $tag = new Tag();
29 $tag->setLabel($tagLabel); 45 $tag->setLabel($tagLabel);
30
31 $em = $this->client->getContainer()->get('doctrine.orm.entity_manager');
32 $em->persist($tag); 46 $em->persist($tag);
47
48 $entry->addTag($tag);
49
50 $em->persist($entry);
33 $em->flush(); 51 $em->flush();
34 $em->clear(); 52 $em->clear();
35 53
@@ -53,6 +71,16 @@ class TagRestControllerTest extends WallabagApiTestCase
53 $this->assertNull($tag, $tagLabel . ' was removed because it begun an orphan tag'); 71 $this->assertNull($tag, $tagLabel . ' was removed because it begun an orphan tag');
54 } 72 }
55 73
74 public function testDeleteOtherUserTag()
75 {
76 $em = $this->client->getContainer()->get('doctrine.orm.entity_manager');
77 $tag = $em->getRepository('WallabagCoreBundle:Tag')->findOneByLabel($this->otherUserTagLabel);
78
79 $this->client->request('DELETE', '/api/tags/' . $tag->getId() . '.json');
80
81 $this->assertSame(404, $this->client->getResponse()->getStatusCode());
82 }
83
56 public function dataForDeletingTagByLabel() 84 public function dataForDeletingTagByLabel()
57 { 85 {
58 return [ 86 return [
@@ -112,6 +140,13 @@ class TagRestControllerTest extends WallabagApiTestCase
112 $this->assertSame(404, $this->client->getResponse()->getStatusCode()); 140 $this->assertSame(404, $this->client->getResponse()->getStatusCode());
113 } 141 }
114 142
143 public function testDeleteTagByLabelOtherUser()
144 {
145 $this->client->request('DELETE', '/api/tag/label.json', ['tag' => $this->otherUserTagLabel]);
146
147 $this->assertSame(404, $this->client->getResponse()->getStatusCode());
148 }
149
115 /** 150 /**
116 * @dataProvider dataForDeletingTagByLabel 151 * @dataProvider dataForDeletingTagByLabel
117 */ 152 */
@@ -180,4 +215,11 @@ class TagRestControllerTest extends WallabagApiTestCase
180 215
181 $this->assertSame(404, $this->client->getResponse()->getStatusCode()); 216 $this->assertSame(404, $this->client->getResponse()->getStatusCode());
182 } 217 }
218
219 public function testDeleteTagsByLabelOtherUser()
220 {
221 $this->client->request('DELETE', '/api/tags/label.json', ['tags' => $this->otherUserTagLabel]);
222
223 $this->assertSame(404, $this->client->getResponse()->getStatusCode());
224 }
183} 225}
diff --git a/tests/Wallabag/ApiBundle/Controller/TaggingRuleRestControllerTest.php b/tests/Wallabag/ApiBundle/Controller/TaggingRuleRestControllerTest.php
new file mode 100644
index 00000000..b6477256
--- /dev/null
+++ b/tests/Wallabag/ApiBundle/Controller/TaggingRuleRestControllerTest.php
@@ -0,0 +1,15 @@
1<?php
2
3namespace Tests\Wallabag\ApiBundle\Controller;
4
5use Tests\Wallabag\ApiBundle\WallabagApiTestCase;
6
7class TaggingRuleRestControllerTest extends WallabagApiTestCase
8{
9 public function testExportEntry()
10 {
11 $this->client->request('GET', '/api/taggingrule/export');
12 $this->assertSame(200, $this->client->getResponse()->getStatusCode());
13 $this->assertSame('application/json', $this->client->getResponse()->headers->get('Content-Type'));
14 }
15}
diff --git a/tests/Wallabag/ApiBundle/Controller/WallabagRestControllerTest.php b/tests/Wallabag/ApiBundle/Controller/WallabagRestControllerTest.php
index ac4d6cdc..8b49c0ae 100644
--- a/tests/Wallabag/ApiBundle/Controller/WallabagRestControllerTest.php
+++ b/tests/Wallabag/ApiBundle/Controller/WallabagRestControllerTest.php
@@ -18,4 +18,21 @@ class WallabagRestControllerTest extends WallabagApiTestCase
18 18
19 $this->assertSame($client->getContainer()->getParameter('wallabag_core.version'), $content); 19 $this->assertSame($client->getContainer()->getParameter('wallabag_core.version'), $content);
20 } 20 }
21
22 public function testGetInfo()
23 {
24 // create a new client instead of using $this->client to be sure client isn't authenticated
25 $client = static::createClient();
26 $client->request('GET', '/api/info');
27
28 $this->assertSame(200, $client->getResponse()->getStatusCode());
29
30 $content = json_decode($client->getResponse()->getContent(), true);
31
32 $this->assertArrayHasKey('appname', $content);
33 $this->assertArrayHasKey('version', $content);
34 $this->assertArrayHasKey('allowed_registration', $content);
35
36 $this->assertSame('wallabag', $content['appname']);
37 }
21} 38}