aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/Wallabag/CoreBundle/Controller/WallabagRestController.php28
-rw-r--r--src/Wallabag/CoreBundle/Repository/EntryRepository.php5
-rw-r--r--src/Wallabag/CoreBundle/Tests/Controller/WallabagRestControllerTest.php37
3 files changed, 69 insertions, 1 deletions
diff --git a/src/Wallabag/CoreBundle/Controller/WallabagRestController.php b/src/Wallabag/CoreBundle/Controller/WallabagRestController.php
index db9cf1be..e59ad4b7 100644
--- a/src/Wallabag/CoreBundle/Controller/WallabagRestController.php
+++ b/src/Wallabag/CoreBundle/Controller/WallabagRestController.php
@@ -213,8 +213,34 @@ class WallabagRestController extends Controller
213 * } 213 * }
214 * ) 214 * )
215 */ 215 */
216 public function postEntriesTagsAction(Entry $entry) 216 public function postEntriesTagsAction(Request $request, Entry $entry)
217 { 217 {
218 $tags = explode(',', $request->request->get('tags'));
219
220 foreach ($tags as $label) {
221 $tagEntity = $this
222 ->getDoctrine()
223 ->getRepository('WallabagCoreBundle:Tag')
224 ->findOneByLabel($label);
225
226 if (is_null($tagEntity)) {
227 $tagEntity = new Tag();
228 $tagEntity->setLabel($label);
229 }
230
231 // only add the tag on the entry if the relation doesn't exist
232 if (!$entry->getTags()->contains($tagEntity)) {
233 $entry->addTag($tagEntity);
234 }
235 }
236
237 $em = $this->getDoctrine()->getManager();
238 $em->persist($entry);
239 $em->flush();
240
241 $json = $this->get('serializer')->serialize($entry, 'json');
242
243 return new Response($json, 200, array('application/json'));
218 } 244 }
219 245
220 /** 246 /**
diff --git a/src/Wallabag/CoreBundle/Repository/EntryRepository.php b/src/Wallabag/CoreBundle/Repository/EntryRepository.php
index f6f60c6f..10fb9bf7 100644
--- a/src/Wallabag/CoreBundle/Repository/EntryRepository.php
+++ b/src/Wallabag/CoreBundle/Repository/EntryRepository.php
@@ -119,6 +119,11 @@ class EntryRepository extends EntityRepository
119 ->getResult(); 119 ->getResult();
120 } 120 }
121 121
122 /**
123 * Fetch an entry with a tag. Only used for tests.
124 *
125 * @return Entry
126 */
122 public function findOneWithTags() 127 public function findOneWithTags()
123 { 128 {
124 $qb = $this->createQueryBuilder('e') 129 $qb = $this->createQueryBuilder('e')
diff --git a/src/Wallabag/CoreBundle/Tests/Controller/WallabagRestControllerTest.php b/src/Wallabag/CoreBundle/Tests/Controller/WallabagRestControllerTest.php
index d2390055..cadbb70b 100644
--- a/src/Wallabag/CoreBundle/Tests/Controller/WallabagRestControllerTest.php
+++ b/src/Wallabag/CoreBundle/Tests/Controller/WallabagRestControllerTest.php
@@ -176,4 +176,41 @@ class WallabagRestControllerTest extends WallabagTestCase
176 176
177 $this->assertEquals(json_encode($tags), $client->getResponse()->getContent()); 177 $this->assertEquals(json_encode($tags), $client->getResponse()->getContent());
178 } 178 }
179
180 public function testPostTagsOnEntry()
181 {
182 $client = $this->createClient();
183 $client->request('GET', '/api/salts/admin.json');
184 $salt = json_decode($client->getResponse()->getContent());
185 $headers = $this->generateHeaders('admin', 'test', $salt[0]);
186
187 $entry = $client->getContainer()
188 ->get('doctrine.orm.entity_manager')
189 ->getRepository('WallabagCoreBundle:Entry')
190 ->findOneByUser(1);
191
192 if (!$entry) {
193 $this->markTestSkipped('No content found in db.');
194 }
195
196 $newTags = 'tag1,tag2,tag3';
197
198 $client->request('POST', '/api/entries/'.$entry->getId().'/tags', array('tags' => $newTags), array(), $headers);
199
200 $this->assertEquals(200, $client->getResponse()->getStatusCode());
201
202 $entryDB = $client->getContainer()
203 ->get('doctrine.orm.entity_manager')
204 ->getRepository('WallabagCoreBundle:Entry')
205 ->find($entry->getId());
206
207 $tagsInDB = array();
208 foreach ($entryDB->getTags()->toArray() as $tag) {
209 $tagsInDB[$tag->getId()] = $tag->getLabel();
210 }
211
212 foreach (explode(',', $newTags) as $tag) {
213 $this->assertContains($tag, $tagsInDB);
214 }
215 }
179} 216}