aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJeremy Benoist <jeremy.benoist@gmail.com>2017-05-09 23:15:25 +0200
committerJeremy Benoist <jeremy.benoist@gmail.com>2017-05-09 23:15:25 +0200
commit1594a79fc5eefe217ed463144857d0693b6714fa (patch)
tree7570601ba62df6dd80fabb0d06a977fec63dc2eb
parent0eb8220204953b874ebd2dbd0362973f3f45074c (diff)
downloadwallabag-1594a79fc5eefe217ed463144857d0693b6714fa.tar.gz
wallabag-1594a79fc5eefe217ed463144857d0693b6714fa.tar.zst
wallabag-1594a79fc5eefe217ed463144857d0693b6714fa.zip
Retrieve tag / tags value from query or request
It allows to request to delete a tag using query string instead of body parameter (which seems to be the standard). Instead of breaking the previous behavior, I used a generic way to retrieve parameter (which looks into request attributes, query parameters and request parameters)
-rw-r--r--src/Wallabag/ApiBundle/Controller/TagRestController.php4
-rw-r--r--tests/Wallabag/ApiBundle/Controller/TagRestControllerTest.php30
2 files changed, 28 insertions, 6 deletions
diff --git a/src/Wallabag/ApiBundle/Controller/TagRestController.php b/src/Wallabag/ApiBundle/Controller/TagRestController.php
index 47298d7e..354187a0 100644
--- a/src/Wallabag/ApiBundle/Controller/TagRestController.php
+++ b/src/Wallabag/ApiBundle/Controller/TagRestController.php
@@ -44,7 +44,7 @@ class TagRestController extends WallabagRestController
44 public function deleteTagLabelAction(Request $request) 44 public function deleteTagLabelAction(Request $request)
45 { 45 {
46 $this->validateAuthentication(); 46 $this->validateAuthentication();
47 $label = $request->request->get('tag', ''); 47 $label = $request->get('tag', '');
48 48
49 $tag = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findOneByLabel($label); 49 $tag = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findOneByLabel($label);
50 50
@@ -78,7 +78,7 @@ class TagRestController extends WallabagRestController
78 { 78 {
79 $this->validateAuthentication(); 79 $this->validateAuthentication();
80 80
81 $tagsLabels = $request->request->get('tags', ''); 81 $tagsLabels = $request->get('tags', '');
82 82
83 $tags = []; 83 $tags = [];
84 84
diff --git a/tests/Wallabag/ApiBundle/Controller/TagRestControllerTest.php b/tests/Wallabag/ApiBundle/Controller/TagRestControllerTest.php
index bde5251f..90b132eb 100644
--- a/tests/Wallabag/ApiBundle/Controller/TagRestControllerTest.php
+++ b/tests/Wallabag/ApiBundle/Controller/TagRestControllerTest.php
@@ -54,7 +54,18 @@ class TagRestControllerTest extends WallabagApiTestCase
54 $this->assertNull($tag, $tagName.' was removed because it begun an orphan tag'); 54 $this->assertNull($tag, $tagName.' was removed because it begun an orphan tag');
55 } 55 }
56 56
57 public function testDeleteTagByLabel() 57 public function dataForDeletingTagByLabel()
58 {
59 return [
60 'by_query' => [true],
61 'by_body' => [false],
62 ];
63 }
64
65 /**
66 * @dataProvider dataForDeletingTagByLabel
67 */
68 public function testDeleteTagByLabel($useQueryString)
58 { 69 {
59 $em = $this->client->getContainer()->get('doctrine.orm.entity_manager'); 70 $em = $this->client->getContainer()->get('doctrine.orm.entity_manager');
60 $entry = $this->client->getContainer() 71 $entry = $this->client->getContainer()
@@ -73,7 +84,11 @@ class TagRestControllerTest extends WallabagApiTestCase
73 $em->persist($entry); 84 $em->persist($entry);
74 $em->flush(); 85 $em->flush();
75 86
76 $this->client->request('DELETE', '/api/tag/label.json', ['tag' => $tag->getLabel()]); 87 if ($useQueryString) {
88 $this->client->request('DELETE', '/api/tag/label.json?tag='.$tag->getLabel());
89 } else {
90 $this->client->request('DELETE', '/api/tag/label.json', ['tag' => $tag->getLabel()]);
91 }
77 92
78 $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); 93 $this->assertEquals(200, $this->client->getResponse()->getStatusCode());
79 94
@@ -98,7 +113,10 @@ class TagRestControllerTest extends WallabagApiTestCase
98 $this->assertEquals(404, $this->client->getResponse()->getStatusCode()); 113 $this->assertEquals(404, $this->client->getResponse()->getStatusCode());
99 } 114 }
100 115
101 public function testDeleteTagsByLabel() 116 /**
117 * @dataProvider dataForDeletingTagByLabel
118 */
119 public function testDeleteTagsByLabel($useQueryString)
102 { 120 {
103 $em = $this->client->getContainer()->get('doctrine.orm.entity_manager'); 121 $em = $this->client->getContainer()->get('doctrine.orm.entity_manager');
104 $entry = $this->client->getContainer() 122 $entry = $this->client->getContainer()
@@ -122,7 +140,11 @@ class TagRestControllerTest extends WallabagApiTestCase
122 $em->persist($entry); 140 $em->persist($entry);
123 $em->flush(); 141 $em->flush();
124 142
125 $this->client->request('DELETE', '/api/tags/label.json', ['tags' => $tag->getLabel().','.$tag2->getLabel()]); 143 if ($useQueryString) {
144 $this->client->request('DELETE', '/api/tags/label.json?tags='.$tag->getLabel().','.$tag2->getLabel());
145 } else {
146 $this->client->request('DELETE', '/api/tags/label.json', ['tags' => $tag->getLabel().','.$tag2->getLabel()]);
147 }
126 148
127 $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); 149 $this->assertEquals(200, $this->client->getResponse()->getStatusCode());
128 150