mirror of
https://github.com/wallabag/wallabag.git
synced 2025-02-28 00:16:28 +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);
|
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.
|
* Permanently remove one tag from **every** entry.
|
||||||
*
|
*
|
||||||
|
@ -353,65 +424,6 @@ class WallabagRestController extends FOSRestController
|
||||||
return $this->renderJsonResponse($json);
|
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.
|
* Retrieve version number.
|
||||||
*
|
*
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
namespace Tests\Wallabag\ApiBundle\Controller;
|
namespace Tests\Wallabag\ApiBundle\Controller;
|
||||||
|
|
||||||
use Tests\Wallabag\ApiBundle\WallabagApiTestCase;
|
use Tests\Wallabag\ApiBundle\WallabagApiTestCase;
|
||||||
|
use Wallabag\CoreBundle\Entity\Tag;
|
||||||
|
|
||||||
class WallabagRestControllerTest extends WallabagApiTestCase
|
class WallabagRestControllerTest extends WallabagApiTestCase
|
||||||
{
|
{
|
||||||
|
@ -359,7 +360,7 @@ class WallabagRestControllerTest extends WallabagApiTestCase
|
||||||
$entry = $this->client->getContainer()
|
$entry = $this->client->getContainer()
|
||||||
->get('doctrine.orm.entity_manager')
|
->get('doctrine.orm.entity_manager')
|
||||||
->getRepository('WallabagCoreBundle:Entry')
|
->getRepository('WallabagCoreBundle:Entry')
|
||||||
->findOneWithTags(1);
|
->findOneWithTags($this->user->getId());
|
||||||
|
|
||||||
$entry = $entry[0];
|
$entry = $entry[0];
|
||||||
|
|
||||||
|
@ -421,7 +422,7 @@ class WallabagRestControllerTest extends WallabagApiTestCase
|
||||||
$entry = $this->client->getContainer()
|
$entry = $this->client->getContainer()
|
||||||
->get('doctrine.orm.entity_manager')
|
->get('doctrine.orm.entity_manager')
|
||||||
->getRepository('WallabagCoreBundle:Entry')
|
->getRepository('WallabagCoreBundle:Entry')
|
||||||
->findOneWithTags(1);
|
->findOneWithTags($this->user->getId());
|
||||||
$entry = $entry[0];
|
$entry = $entry[0];
|
||||||
|
|
||||||
if (!$entry) {
|
if (!$entry) {
|
||||||
|
@ -472,7 +473,7 @@ class WallabagRestControllerTest extends WallabagApiTestCase
|
||||||
$this->assertEquals($tag['label'], $content['label']);
|
$this->assertEquals($tag['label'], $content['label']);
|
||||||
$this->assertEquals($tag['slug'], $content['slug']);
|
$this->assertEquals($tag['slug'], $content['slug']);
|
||||||
|
|
||||||
$entries = $entry = $this->client->getContainer()
|
$entries = $this->client->getContainer()
|
||||||
->get('doctrine.orm.entity_manager')
|
->get('doctrine.orm.entity_manager')
|
||||||
->getRepository('WallabagCoreBundle:Entry')
|
->getRepository('WallabagCoreBundle:Entry')
|
||||||
->findAllByTagId($this->user->getId(), $tag['id']);
|
->findAllByTagId($this->user->getId(), $tag['id']);
|
||||||
|
@ -480,6 +481,112 @@ class WallabagRestControllerTest extends WallabagApiTestCase
|
||||||
$this->assertCount(0, $entries);
|
$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()
|
public function testGetVersion()
|
||||||
{
|
{
|
||||||
$this->client->request('GET', '/api/version');
|
$this->client->request('GET', '/api/version');
|
||||||
|
|
Loading…
Reference in a new issue