diff options
author | Jeremy Benoist <jeremy.benoist@gmail.com> | 2017-05-09 23:15:25 +0200 |
---|---|---|
committer | Jeremy Benoist <jeremy.benoist@gmail.com> | 2017-05-09 23:15:25 +0200 |
commit | 1594a79fc5eefe217ed463144857d0693b6714fa (patch) | |
tree | 7570601ba62df6dd80fabb0d06a977fec63dc2eb | |
parent | 0eb8220204953b874ebd2dbd0362973f3f45074c (diff) | |
download | wallabag-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.php | 4 | ||||
-rw-r--r-- | tests/Wallabag/ApiBundle/Controller/TagRestControllerTest.php | 30 |
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 | ||