aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/Wallabag/CoreBundle/Controller/WallabagRestController.php17
-rw-r--r--src/Wallabag/CoreBundle/DataFixtures/ORM/LoadTagData.php42
-rw-r--r--src/Wallabag/CoreBundle/Entity/Tag.php2
-rw-r--r--src/Wallabag/CoreBundle/Tests/Controller/WallabagRestControllerTest.php29
4 files changed, 86 insertions, 4 deletions
diff --git a/src/Wallabag/CoreBundle/Controller/WallabagRestController.php b/src/Wallabag/CoreBundle/Controller/WallabagRestController.php
index 276cfe1c..cb68784d 100644
--- a/src/Wallabag/CoreBundle/Controller/WallabagRestController.php
+++ b/src/Wallabag/CoreBundle/Controller/WallabagRestController.php
@@ -6,7 +6,6 @@ use Nelmio\ApiDocBundle\Annotation\ApiDoc;
6use Symfony\Bundle\FrameworkBundle\Controller\Controller; 6use Symfony\Bundle\FrameworkBundle\Controller\Controller;
7use Symfony\Component\HttpFoundation\Request; 7use Symfony\Component\HttpFoundation\Request;
8use Symfony\Component\HttpFoundation\Response; 8use Symfony\Component\HttpFoundation\Response;
9use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
10use Wallabag\CoreBundle\Entity\Entry; 9use Wallabag\CoreBundle\Entity\Entry;
11use Wallabag\CoreBundle\Entity\Tag; 10use Wallabag\CoreBundle\Entity\Tag;
12use Wallabag\CoreBundle\Service\Extractor; 11use Wallabag\CoreBundle\Service\Extractor;
@@ -244,12 +243,24 @@ class WallabagRestController extends Controller
244 * 243 *
245 * @ApiDoc( 244 * @ApiDoc(
246 * requirements={ 245 * requirements={
247 * {"name"="tag", "dataType"="string", "requirement"="\w+", "description"="The tag"} 246 * {"name"="label", "dataType"="string", "requirement"="\w+", "description"="Label of the tag"}
248 * } 247 * }
249 * ) 248 * )
250 */ 249 */
251 public function getTagAction(Tag $tag) 250 public function getTagAction($label)
252 { 251 {
252 $tag = $this
253 ->getDoctrine()
254 ->getRepository('WallabagCoreBundle:Tag')
255 ->findOneByLabel($label);
256
257 if (is_null($tag)) {
258 throw $this->createNotFoundException();
259 }
260
261 $json = $this->get('serializer')->serialize($tag, 'json');
262
263 return new Response($json, 200, array('application/json'));
253 } 264 }
254 265
255 /** 266 /**
diff --git a/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadTagData.php b/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadTagData.php
new file mode 100644
index 00000000..6b13c2be
--- /dev/null
+++ b/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadTagData.php
@@ -0,0 +1,42 @@
1<?php
2
3namespace Wallabag\CoreBundle\DataFixtures\ORM;
4
5use Doctrine\Common\DataFixtures\AbstractFixture;
6use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
7use Doctrine\Common\Persistence\ObjectManager;
8use Wallabag\CoreBundle\Entity\Tag;
9
10class LoadTagData extends AbstractFixture implements OrderedFixtureInterface
11{
12 /**
13 * {@inheritDoc}
14 */
15 public function load(ObjectManager $manager)
16 {
17 $tag1 = new Tag();
18 $tag1->setLabel('foo');
19
20 $manager->persist($tag1);
21
22 $tag2 = new Tag();
23 $tag2->setLabel('bar');
24
25 $manager->persist($tag2);
26
27 $tag3 = new Tag();
28 $tag3->setLabel('baz');
29
30 $manager->persist($tag3);
31
32 $manager->flush();
33 }
34
35 /**
36 * {@inheritDoc}
37 */
38 public function getOrder()
39 {
40 return 30;
41 }
42}
diff --git a/src/Wallabag/CoreBundle/Entity/Tag.php b/src/Wallabag/CoreBundle/Entity/Tag.php
index 31017563..963f32b1 100644
--- a/src/Wallabag/CoreBundle/Entity/Tag.php
+++ b/src/Wallabag/CoreBundle/Entity/Tag.php
@@ -58,6 +58,6 @@ class Tag
58 */ 58 */
59 public function getLabel() 59 public function getLabel()
60 { 60 {
61 return $this->value; 61 return $this->label;
62 } 62 }
63} 63}
diff --git a/src/Wallabag/CoreBundle/Tests/Controller/WallabagRestControllerTest.php b/src/Wallabag/CoreBundle/Tests/Controller/WallabagRestControllerTest.php
index 4164e516..0ffe7fe6 100644
--- a/src/Wallabag/CoreBundle/Tests/Controller/WallabagRestControllerTest.php
+++ b/src/Wallabag/CoreBundle/Tests/Controller/WallabagRestControllerTest.php
@@ -150,4 +150,33 @@ class WallabagRestControllerTest extends WallabagTestCase
150 150
151 $this->assertEquals(404, $client->getResponse()->getStatusCode()); 151 $this->assertEquals(404, $client->getResponse()->getStatusCode());
152 } 152 }
153
154 public function testGetOneTag()
155 {
156 $client = $this->createClient();
157 $client->request('GET', '/api/salts/admin.json');
158 $salt = json_decode($client->getResponse()->getContent());
159
160 $headers = $this->generateHeaders('admin', 'test', $salt[0]);
161
162 $tag = $client->getContainer()
163 ->get('doctrine.orm.entity_manager')
164 ->getRepository('WallabagCoreBundle:Tag')
165 ->findOneByLabel('foo');
166
167 if (!$tag) {
168 $this->markTestSkipped('No content found in db.');
169 }
170
171 $client->request('GET', '/api/tags/'.$tag->getLabel().'.json', array(), array(), $headers);
172
173 $this->assertEquals(json_encode($tag), $client->getResponse()->getContent());
174
175 $this->assertTrue(
176 $client->getResponse()->headers->contains(
177 'Content-Type',
178 'application/json'
179 )
180 );
181 }
153} 182}