mirror of
https://github.com/wallabag/wallabag.git
synced 2024-11-26 19:11:07 +00:00
Add some tests
Also, retrieve tag from the request instead of the query (which will be the same but it's more easy to test). Moved down `deleteTagAction` because it conflicted with the new action: api_delete_tag => /api/tags/{tag}.{_format} api_delete_tags_label => /api/tags/label.{_format} And finally, throw exception when a tag is not found before removing it.
This commit is contained in:
parent
9bf83f1fb8
commit
a0e1eafc35
2 changed files with 181 additions and 62 deletions
|
@ -329,6 +329,77 @@ class WallabagRestController extends FOSRestController
|
|||
return $this->renderJsonResponse($json);
|
||||
}
|
||||
|
||||
/**
|
||||
* Permanently remove one tag from **every** entry.
|
||||
*
|
||||
* @ApiDoc(
|
||||
* requirements={
|
||||
* {"name"="tag", "dataType"="string", "required"=true, "requirement"="\w+", "description"="Tag as a string"}
|
||||
* }
|
||||
* )
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function deleteTagLabelAction(Request $request)
|
||||
{
|
||||
$this->validateAuthentication();
|
||||
$label = $request->request->get('tag', '');
|
||||
|
||||
$tag = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findOneByLabel($label);
|
||||
|
||||
if (empty($tag)) {
|
||||
throw $this->createNotFoundException('Tag not found');
|
||||
}
|
||||
|
||||
$this->getDoctrine()
|
||||
->getRepository('WallabagCoreBundle:Entry')
|
||||
->removeTag($this->getUser()->getId(), $tag);
|
||||
|
||||
$json = $this->get('serializer')->serialize($tag, 'json');
|
||||
|
||||
return $this->renderJsonResponse($json);
|
||||
}
|
||||
|
||||
/**
|
||||
* Permanently remove some tags from **every** entry.
|
||||
*
|
||||
* @ApiDoc(
|
||||
* requirements={
|
||||
* {"name"="tags", "dataType"="string", "required"=true, "format"="tag1,tag2", "description"="Tags as strings (comma splitted)"}
|
||||
* }
|
||||
* )
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function deleteTagsLabelAction(Request $request)
|
||||
{
|
||||
$this->validateAuthentication();
|
||||
|
||||
$tagsLabels = $request->request->get('tags', '');
|
||||
|
||||
$tags = [];
|
||||
|
||||
foreach (explode(',', $tagsLabels) as $tagLabel) {
|
||||
$tagEntity = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findOneByLabel($tagLabel);
|
||||
|
||||
if (!empty($tagEntity)) {
|
||||
$tags[] = $tagEntity;
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($tags)) {
|
||||
throw $this->createNotFoundException('Tags not found');
|
||||
}
|
||||
|
||||
$this->getDoctrine()
|
||||
->getRepository('WallabagCoreBundle:Entry')
|
||||
->removeTags($this->getUser()->getId(), $tags);
|
||||
|
||||
$json = $this->get('serializer')->serialize($tags, 'json');
|
||||
|
||||
return $this->renderJsonResponse($json);
|
||||
}
|
||||
|
||||
/**
|
||||
* Permanently remove one tag from **every** entry.
|
||||
*
|
||||
|
@ -353,65 +424,6 @@ class WallabagRestController extends FOSRestController
|
|||
return $this->renderJsonResponse($json);
|
||||
}
|
||||
|
||||
/**
|
||||
* Permanently remove one tag from **every** entry.
|
||||
*
|
||||
* @ApiDoc(
|
||||
* requirements={
|
||||
* {"name"="tag", "dataType"="string", "requirement"="\w+", "description"="The tag as a string"}
|
||||
* }
|
||||
* )
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function deleteTagLabelAction(Request $request)
|
||||
{
|
||||
$this->validateAuthentication();
|
||||
$label = $request->query->get('tag', '');
|
||||
|
||||
$tag = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findOneByLabel($label);
|
||||
$this->getDoctrine()
|
||||
->getRepository('WallabagCoreBundle:Entry')
|
||||
->removeTag($this->getUser()->getId(), $tag);
|
||||
|
||||
$json = $this->get('serializer')->serialize($tag, 'json');
|
||||
|
||||
return $this->renderJsonResponse($json);
|
||||
}
|
||||
|
||||
/**
|
||||
* Permanently remove some tags from **every** entry.
|
||||
*
|
||||
* @ApiDoc(
|
||||
* requirements={
|
||||
* {"name"="tags", "dataType"="string", "required"=true, "format"="tag1,tag2", "description"="The tags as strings"}
|
||||
* }
|
||||
* )
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function deleteTagsLabelAction(Request $request)
|
||||
{
|
||||
$this->validateAuthentication();
|
||||
|
||||
$tagsLabels = $request->query->get('tags', '');
|
||||
|
||||
$tags = array();
|
||||
|
||||
foreach (explode(',', $tagsLabels) as $tagLabel) {
|
||||
$tagEntity = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findOneByLabel($tagLabel);
|
||||
$tags[] = $tagEntity;
|
||||
}
|
||||
|
||||
$this->getDoctrine()
|
||||
->getRepository('WallabagCoreBundle:Entry')
|
||||
->removeTags($this->getUser()->getId(), $tags);
|
||||
|
||||
$json = $this->get('serializer')->serialize($tags, 'json');
|
||||
|
||||
return $this->renderJsonResponse($json);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve version number.
|
||||
*
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
namespace Tests\Wallabag\ApiBundle\Controller;
|
||||
|
||||
use Tests\Wallabag\ApiBundle\WallabagApiTestCase;
|
||||
use Wallabag\CoreBundle\Entity\Tag;
|
||||
|
||||
class WallabagRestControllerTest extends WallabagApiTestCase
|
||||
{
|
||||
|
@ -359,7 +360,7 @@ class WallabagRestControllerTest extends WallabagApiTestCase
|
|||
$entry = $this->client->getContainer()
|
||||
->get('doctrine.orm.entity_manager')
|
||||
->getRepository('WallabagCoreBundle:Entry')
|
||||
->findOneWithTags(1);
|
||||
->findOneWithTags($this->user->getId());
|
||||
|
||||
$entry = $entry[0];
|
||||
|
||||
|
@ -421,7 +422,7 @@ class WallabagRestControllerTest extends WallabagApiTestCase
|
|||
$entry = $this->client->getContainer()
|
||||
->get('doctrine.orm.entity_manager')
|
||||
->getRepository('WallabagCoreBundle:Entry')
|
||||
->findOneWithTags(1);
|
||||
->findOneWithTags($this->user->getId());
|
||||
$entry = $entry[0];
|
||||
|
||||
if (!$entry) {
|
||||
|
@ -472,7 +473,7 @@ class WallabagRestControllerTest extends WallabagApiTestCase
|
|||
$this->assertEquals($tag['label'], $content['label']);
|
||||
$this->assertEquals($tag['slug'], $content['slug']);
|
||||
|
||||
$entries = $entry = $this->client->getContainer()
|
||||
$entries = $this->client->getContainer()
|
||||
->get('doctrine.orm.entity_manager')
|
||||
->getRepository('WallabagCoreBundle:Entry')
|
||||
->findAllByTagId($this->user->getId(), $tag['id']);
|
||||
|
@ -480,6 +481,112 @@ class WallabagRestControllerTest extends WallabagApiTestCase
|
|||
$this->assertCount(0, $entries);
|
||||
}
|
||||
|
||||
public function testDeleteTagByLabel()
|
||||
{
|
||||
$em = $this->client->getContainer()->get('doctrine.orm.entity_manager');
|
||||
$entry = $this->client->getContainer()
|
||||
->get('doctrine.orm.entity_manager')
|
||||
->getRepository('WallabagCoreBundle:Entry')
|
||||
->findOneWithTags($this->user->getId());
|
||||
|
||||
$entry = $entry[0];
|
||||
|
||||
$tag = new Tag();
|
||||
$tag->setLabel('Awesome tag for test');
|
||||
$em->persist($tag);
|
||||
|
||||
$entry->addTag($tag);
|
||||
|
||||
$em->persist($entry);
|
||||
$em->flush();
|
||||
|
||||
$this->client->request('DELETE', '/api/tag/label.json', ['tag' => $tag->getLabel()]);
|
||||
|
||||
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
|
||||
|
||||
$content = json_decode($this->client->getResponse()->getContent(), true);
|
||||
|
||||
$this->assertArrayHasKey('label', $content);
|
||||
$this->assertEquals($tag->getLabel(), $content['label']);
|
||||
$this->assertEquals($tag->getSlug(), $content['slug']);
|
||||
|
||||
$entries = $this->client->getContainer()
|
||||
->get('doctrine.orm.entity_manager')
|
||||
->getRepository('WallabagCoreBundle:Entry')
|
||||
->findAllByTagId($this->user->getId(), $tag->getId());
|
||||
|
||||
$this->assertCount(0, $entries);
|
||||
}
|
||||
|
||||
public function testDeleteTagByLabelNotFound()
|
||||
{
|
||||
$this->client->request('DELETE', '/api/tag/label.json', ['tag' => 'does not exist']);
|
||||
|
||||
$this->assertEquals(404, $this->client->getResponse()->getStatusCode());
|
||||
}
|
||||
|
||||
public function testDeleteTagsByLabel()
|
||||
{
|
||||
$em = $this->client->getContainer()->get('doctrine.orm.entity_manager');
|
||||
$entry = $this->client->getContainer()
|
||||
->get('doctrine.orm.entity_manager')
|
||||
->getRepository('WallabagCoreBundle:Entry')
|
||||
->findOneWithTags($this->user->getId());
|
||||
|
||||
$entry = $entry[0];
|
||||
|
||||
$tag = new Tag();
|
||||
$tag->setLabel('Awesome tag for tagsLabel');
|
||||
$em->persist($tag);
|
||||
|
||||
$tag2 = new Tag();
|
||||
$tag2->setLabel('Awesome tag for tagsLabel 2');
|
||||
$em->persist($tag2);
|
||||
|
||||
$entry->addTag($tag);
|
||||
$entry->addTag($tag2);
|
||||
|
||||
$em->persist($entry);
|
||||
$em->flush();
|
||||
|
||||
$this->client->request('DELETE', '/api/tags/label.json', ['tags' => $tag->getLabel().','.$tag2->getLabel()]);
|
||||
|
||||
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
|
||||
|
||||
$content = json_decode($this->client->getResponse()->getContent(), true);
|
||||
|
||||
$this->assertCount(2, $content);
|
||||
|
||||
$this->assertArrayHasKey('label', $content[0]);
|
||||
$this->assertEquals($tag->getLabel(), $content[0]['label']);
|
||||
$this->assertEquals($tag->getSlug(), $content[0]['slug']);
|
||||
|
||||
$this->assertArrayHasKey('label', $content[1]);
|
||||
$this->assertEquals($tag2->getLabel(), $content[1]['label']);
|
||||
$this->assertEquals($tag2->getSlug(), $content[1]['slug']);
|
||||
|
||||
$entries = $this->client->getContainer()
|
||||
->get('doctrine.orm.entity_manager')
|
||||
->getRepository('WallabagCoreBundle:Entry')
|
||||
->findAllByTagId($this->user->getId(), $tag->getId());
|
||||
|
||||
$this->assertCount(0, $entries);
|
||||
|
||||
$entries = $this->client->getContainer()
|
||||
->get('doctrine.orm.entity_manager')
|
||||
->getRepository('WallabagCoreBundle:Entry')
|
||||
->findAllByTagId($this->user->getId(), $tag2->getId());
|
||||
|
||||
$this->assertCount(0, $entries);
|
||||
}
|
||||
|
||||
public function testDeleteTagsByLabelNotFound()
|
||||
{
|
||||
$this->client->request('DELETE', '/api/tags/label.json', ['tags' => 'does not exist']);
|
||||
|
||||
$this->assertEquals(404, $this->client->getResponse()->getStatusCode());
|
||||
}
|
||||
|
||||
public function testGetVersion()
|
||||
{
|
||||
$this->client->request('GET', '/api/version');
|
||||
|
|
Loading…
Reference in a new issue