aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJeremy Benoist <jeremy.benoist@gmail.com>2017-06-23 08:30:23 +0200
committerJeremy Benoist <jeremy.benoist@gmail.com>2017-06-23 08:30:23 +0200
commit18696f77fdc76f7055d84460d459051a6bb7253a (patch)
tree445651b0962e18b842b86244a9c0ba26462785b9
parent29714661b1df78871ceaf0e079f11041a8641d4b (diff)
downloadwallabag-18696f77fdc76f7055d84460d459051a6bb7253a.tar.gz
wallabag-18696f77fdc76f7055d84460d459051a6bb7253a.tar.zst
wallabag-18696f77fdc76f7055d84460d459051a6bb7253a.zip
Avoid BC on exists endpoint
-rw-r--r--src/Wallabag/ApiBundle/Controller/EntryRestController.php8
-rw-r--r--tests/Wallabag/ApiBundle/Controller/EntryRestControllerTest.php41
2 files changed, 43 insertions, 6 deletions
diff --git a/src/Wallabag/ApiBundle/Controller/EntryRestController.php b/src/Wallabag/ApiBundle/Controller/EntryRestController.php
index 768c4fdc..793b91ba 100644
--- a/src/Wallabag/ApiBundle/Controller/EntryRestController.php
+++ b/src/Wallabag/ApiBundle/Controller/EntryRestController.php
@@ -18,9 +18,12 @@ class EntryRestController extends WallabagRestController
18{ 18{
19 /** 19 /**
20 * Check if an entry exist by url. 20 * Check if an entry exist by url.
21 * Return ID if entry(ies) exist (and if you give the return_id parameter).
22 * Otherwise it returns false.
21 * 23 *
22 * @ApiDoc( 24 * @ApiDoc(
23 * parameters={ 25 * parameters={
26 * {"name"="return_id", "dataType"="string", "required"=false, "format"="1 or 0", "description"="Set 1 if you want to retrieve ID in case entry(ies) exists, 0 by default"},
24 * {"name"="url", "dataType"="string", "required"=true, "format"="An url", "description"="Url to check if it exists"}, 27 * {"name"="url", "dataType"="string", "required"=true, "format"="An url", "description"="Url to check if it exists"},
25 * {"name"="urls", "dataType"="string", "required"=false, "format"="An array of urls (?urls[]=http...&urls[]=http...)", "description"="Urls (as an array) to check if it exists"} 28 * {"name"="urls", "dataType"="string", "required"=false, "format"="An array of urls (?urls[]=http...&urls[]=http...)", "description"="Urls (as an array) to check if it exists"}
26 * } 29 * }
@@ -32,6 +35,7 @@ class EntryRestController extends WallabagRestController
32 { 35 {
33 $this->validateAuthentication(); 36 $this->validateAuthentication();
34 37
38 $returnId = (null === $request->query->get('return_id')) ? 0 : (bool) $request->query->get('return_id');
35 $urls = $request->query->get('urls', []); 39 $urls = $request->query->get('urls', []);
36 40
37 // handle multiple urls first 41 // handle multiple urls first
@@ -42,7 +46,7 @@ class EntryRestController extends WallabagRestController
42 ->getRepository('WallabagCoreBundle:Entry') 46 ->getRepository('WallabagCoreBundle:Entry')
43 ->findByUrlAndUserId($url, $this->getUser()->getId()); 47 ->findByUrlAndUserId($url, $this->getUser()->getId());
44 48
45 $results[$url] = $res instanceof Entry ? $res->getId() : false; 49 $results[$url] = $res instanceof Entry ? ($returnId ? $res->getId() : true) : false;
46 } 50 }
47 51
48 return $this->sendResponse($results); 52 return $this->sendResponse($results);
@@ -59,7 +63,7 @@ class EntryRestController extends WallabagRestController
59 ->getRepository('WallabagCoreBundle:Entry') 63 ->getRepository('WallabagCoreBundle:Entry')
60 ->findByUrlAndUserId($url, $this->getUser()->getId()); 64 ->findByUrlAndUserId($url, $this->getUser()->getId());
61 65
62 $exists = $res instanceof Entry ? $res->getId() : false; 66 $exists = $res instanceof Entry ? ($returnId ? $res->getId() : true) : false;
63 67
64 return $this->sendResponse(['exists' => $exists]); 68 return $this->sendResponse(['exists' => $exists]);
65 } 69 }
diff --git a/tests/Wallabag/ApiBundle/Controller/EntryRestControllerTest.php b/tests/Wallabag/ApiBundle/Controller/EntryRestControllerTest.php
index 067aed2c..dc21bd32 100644
--- a/tests/Wallabag/ApiBundle/Controller/EntryRestControllerTest.php
+++ b/tests/Wallabag/ApiBundle/Controller/EntryRestControllerTest.php
@@ -759,21 +759,54 @@ class EntryRestControllerTest extends WallabagApiTestCase
759 $this->assertEquals(true, $content['is_starred']); 759 $this->assertEquals(true, $content['is_starred']);
760 } 760 }
761 761
762 public function testGetEntriesExists() 762 public function dataForEntriesExistWithUrl()
763 { 763 {
764 $this->client->request('GET', '/api/entries/exists?url=http://0.0.0.0/entry2'); 764 return [
765 'with_id' => [
766 'url' => '/api/entries/exists?url=http://0.0.0.0/entry2&return_id=1',
767 'expectedValue' => 2,
768 ],
769 'without_id' => [
770 'url' => '/api/entries/exists?url=http://0.0.0.0/entry2',
771 'expectedValue' => true,
772 ],
773 ];
774 }
775
776 /**
777 * @dataProvider dataForEntriesExistWithUrl
778 */
779 public function testGetEntriesExists($url, $expectedValue)
780 {
781 $this->client->request('GET', $url);
765 782
766 $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); 783 $this->assertEquals(200, $this->client->getResponse()->getStatusCode());
767 784
768 $content = json_decode($this->client->getResponse()->getContent(), true); 785 $content = json_decode($this->client->getResponse()->getContent(), true);
769 786
770 $this->assertEquals(2, $content['exists']); 787 $this->assertSame($expectedValue, $content['exists']);
771 } 788 }
772 789
773 public function testGetEntriesExistsWithManyUrls() 790 public function testGetEntriesExistsWithManyUrls()
774 { 791 {
775 $url1 = 'http://0.0.0.0/entry2'; 792 $url1 = 'http://0.0.0.0/entry2';
776 $url2 = 'http://0.0.0.0/entry10'; 793 $url2 = 'http://0.0.0.0/entry10';
794 $this->client->request('GET', '/api/entries/exists?urls[]='.$url1.'&urls[]='.$url2.'&return_id=1');
795
796 $this->assertEquals(200, $this->client->getResponse()->getStatusCode());
797
798 $content = json_decode($this->client->getResponse()->getContent(), true);
799
800 $this->assertArrayHasKey($url1, $content);
801 $this->assertArrayHasKey($url2, $content);
802 $this->assertSame(2, $content[$url1]);
803 $this->assertSame(false, $content[$url2]);
804 }
805
806 public function testGetEntriesExistsWithManyUrlsReturnBool()
807 {
808 $url1 = 'http://0.0.0.0/entry2';
809 $url2 = 'http://0.0.0.0/entry10';
777 $this->client->request('GET', '/api/entries/exists?urls[]='.$url1.'&urls[]='.$url2); 810 $this->client->request('GET', '/api/entries/exists?urls[]='.$url1.'&urls[]='.$url2);
778 811
779 $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); 812 $this->assertEquals(200, $this->client->getResponse()->getStatusCode());
@@ -782,7 +815,7 @@ class EntryRestControllerTest extends WallabagApiTestCase
782 815
783 $this->assertArrayHasKey($url1, $content); 816 $this->assertArrayHasKey($url1, $content);
784 $this->assertArrayHasKey($url2, $content); 817 $this->assertArrayHasKey($url2, $content);
785 $this->assertEquals(2, $content[$url1]); 818 $this->assertEquals(true, $content[$url1]);
786 $this->assertEquals(false, $content[$url2]); 819 $this->assertEquals(false, $content[$url2]);
787 } 820 }
788 821