->getRepository('WallabagCoreBundle:Entry')
->removeTag($this->getUser()->getId(), $tag);
+ $this->cleanOrphanTag($tag);
+
$json = $this->get('serializer')->serialize($tag, 'json');
return (new JsonResponse())->setJson($json);
->getRepository('WallabagCoreBundle:Entry')
->removeTags($this->getUser()->getId(), $tags);
+ $this->cleanOrphanTag($tags);
+
$json = $this->get('serializer')->serialize($tags, 'json');
return (new JsonResponse())->setJson($json);
->getRepository('WallabagCoreBundle:Entry')
->removeTag($this->getUser()->getId(), $tag);
+ $this->cleanOrphanTag($tag);
+
$json = $this->get('serializer')->serialize($tag, 'json');
return (new JsonResponse())->setJson($json);
return (new JsonResponse())->setJson($json);
}
+ /**
+ * Remove orphan tag in case no entries are associated to it.
+ *
+ * @param Tag|array $tags
+ */
+ private function cleanOrphanTag($tags)
+ {
+ if (!is_array($tags)) {
+ $tags = [$tags];
+ }
+
+ $em = $this->getDoctrine()->getManager();
+
+ foreach ($tags as $tag) {
+ if (count($tag->getEntries()) === 0) {
+ $em->remove($tag);
+ }
+ }
+
+ $em->flush();
+ }
+
/**
* Validate that the first id is equal to the second one.
* If not, throw exception. It means a user try to access information from an other user.
$entry->removeTag($tag);
$em = $this->getDoctrine()->getManager();
$em->flush();
- if (count($tag->getEntries()) == 0) {
+
+ // remove orphan tag in case no entries are associated to it
+ if (count($tag->getEntries()) === 0) {
$em->remove($tag);
+ $em->flush();
}
- $em->flush();
$redirectUrl = $this->get('wallabag_core.helper.redirect')->to($request->headers->get('referer'));
arguments:
- "@doctrine"
- wallabag_core.table_prefix_subscriber:
+ wallabag_core.subscriber.table_prefix:
class: Wallabag\CoreBundle\Subscriber\TablePrefixSubscriber
arguments:
- "%database_table_prefix%"
*/
public function testDeleteUserTag($tag)
{
+ $tagName = $tag['label'];
+
$this->client->request('DELETE', '/api/tags/'.$tag['id'].'.json');
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
->findAllByTagId($this->user->getId(), $tag['id']);
$this->assertCount(0, $entries);
+
+ $tag = $this->client->getContainer()
+ ->get('doctrine.orm.entity_manager')
+ ->getRepository('WallabagCoreBundle:Tag')
+ ->findOneByLabel($tagName);
+
+ $this->assertNull($tag, $tagName.' was removed because it begun an orphan tag');
}
public function testDeleteTagByLabel()
$this->logInAs('admin');
$client = $this->getClient();
- $content = $client->getContainer()
- ->get('doctrine.orm.entity_manager')
+ $em = $client->getContainer()
+ ->get('doctrine.orm.entity_manager');
+
+ $content = $em
->getRepository('WallabagCoreBundle:Entry')
->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
// empty content
$content->setContent('');
- $client->getContainer()->get('doctrine.orm.entity_manager')->persist($content);
- $client->getContainer()->get('doctrine.orm.entity_manager')->flush();
+ $em->persist($content);
+ $em->flush();
$client->request('GET', '/reload/'.$content->getId());
$this->assertEquals(302, $client->getResponse()->getStatusCode());
- $content = $client->getContainer()
- ->get('doctrine.orm.entity_manager')
+ $content = $em
->getRepository('WallabagCoreBundle:Entry')
->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
$this->logInAs('admin');
$client = $this->getClient();
+ $em = $client->getContainer()
+ ->get('doctrine.orm.entity_manager');
+
// add a new content to be removed later
- $user = $client->getContainer()
- ->get('doctrine.orm.entity_manager')
+ $user = $em
->getRepository('WallabagUserBundle:User')
->findOneByUserName('admin');
$content->setArchived(true);
$content->setLanguage('fr');
- $client->getContainer()
- ->get('doctrine.orm.entity_manager')
- ->persist($content);
- $client->getContainer()
- ->get('doctrine.orm.entity_manager')
- ->flush();
+ $em->persist($content);
+ $em->flush();
$client->request('GET', '/view/'.$content->getId());
$this->assertEquals(200, $client->getResponse()->getStatusCode());
namespace Tests\Wallabag\CoreBundle\Controller;
use Tests\Wallabag\CoreBundle\WallabagCoreTestCase;
+use Wallabag\CoreBundle\Entity\Tag;
class TagControllerTest extends WallabagCoreTestCase
{
$client->request('GET', '/remove-tag/'.$entry->getId().'/'.$tag->getId());
$this->assertEquals(404, $client->getResponse()->getStatusCode());
+
+ $tag = $client->getContainer()
+ ->get('doctrine.orm.entity_manager')
+ ->getRepository('WallabagCoreBundle:Tag')
+ ->findOneByLabel($this->tagName);
+
+ $this->assertNull($tag, $this->tagName.' was removed because it begun an orphan tag');
}
public function testShowEntriesForTagAction()
{
$this->logInAs('admin');
$client = $this->getClient();
+ $em = $client->getContainer()
+ ->get('doctrine.orm.entity_manager');
+
+ $tag = new Tag();
+ $tag->setLabel($this->tagName);
$entry = $client->getContainer()
->get('doctrine.orm.entity_manager')
->getRepository('WallabagCoreBundle:Entry')
->findByUrlAndUserId('http://0.0.0.0/entry4', $this->getLoggedInUserId());
- $tag = $client->getContainer()
- ->get('doctrine.orm.entity_manager')
- ->getRepository('WallabagCoreBundle:Tag')
- ->findOneByEntryAndTagLabel($entry, 'foo');
-
- $crawler = $client->request('GET', '/tag/list/'.$tag->getSlug());
+ $tag->addEntry($entry);
- $this->assertEquals(200, $client->getResponse()->getStatusCode());
- $this->assertCount(2, $crawler->filter('div[class=entry]'));
+ $em->persist($entry);
+ $em->persist($tag);
+ $em->flush();
$tag = $client->getContainer()
->get('doctrine.orm.entity_manager')
->getRepository('WallabagCoreBundle:Tag')
- ->findOneByLabel('baz');
+ ->findOneByEntryAndTagLabel($entry, $this->tagName);
$crawler = $client->request('GET', '/tag/list/'.$tag->getSlug());
$this->assertEquals(200, $client->getResponse()->getStatusCode());
- $this->assertCount(1, $crawler->filter('div[class=entry]'));
+ $this->assertCount(1, $crawler->filter('[id*="entry-"]'));
+
+ $entry->removeTag($tag);
+ $em->remove($tag);
+ $em->flush();
}
}