));
}
+ /**
+ * Removes tag from entry.
+ *
+ * @Route("/remove-tag/{entry}/{tag}", requirements={"entry" = "\d+", "tag" = "\d+"}, name="remove_tag")
+ *
+ * @return \Symfony\Component\HttpFoundation\Response
+ */
+ public function removeTagFromEntry(Request $request, Entry $entry, Tag $tag)
+ {
+ $entry->removeTag($tag);
+ $em = $this->getDoctrine()->getManager();
+ $em->flush();
+ if (count($tag->getEntries()) == 0) {
+ $em->remove($tag);
+ }
+ $em->flush();
+
+ return $this->redirect($request->headers->get('referer'));
+ }
+
/**
* Shows tags for current user.
*
->getQuery()
->getResult();
}
+
+ /**
+ * Used only in test case to get a tag for our entry.
+ *
+ * @return Tag
+ */
+ public function findOnebyEntryAndLabel($entry, $label)
+ {
+ return $this->createQueryBuilder('t')
+ ->leftJoin('t.entries', 'e')
+ ->where('e.id = :entryId')->setParameter('entryId', $entry->getId())
+ ->andWhere('t.label = :label')->setParameter('label', $label)
+ ->setMaxResults(1)
+ ->getQuery()
+ ->getSingleResult();
+ }
}
class TagControllerTest extends WallabagCoreTestCase
{
+ public $tagName = 'opensource';
+
public function testList()
{
$this->logInAs('admin');
$form = $crawler->filter('button[id=tag_save]')->form();
$data = array(
- 'tag[label]' => 'opensource',
+ 'tag[label]' => $this->tagName,
);
$client->submit($form, $data);
$this->assertEquals(2, count($newEntry->getTags()));
}
+
+ public function testRemoveTagFromEntry()
+ {
+ $this->logInAs('admin');
+ $client = $this->getClient();
+
+ $entry = $client->getContainer()
+ ->get('doctrine.orm.entity_manager')
+ ->getRepository('WallabagCoreBundle:Entry')
+ ->findOneByUsernameAndNotArchived('admin');
+
+ $tag = $client->getContainer()
+ ->get('doctrine.orm.entity_manager')
+ ->getRepository('WallabagCoreBundle:Tag')
+ ->findOnebyEntryAndLabel($entry, $this->tagName);
+
+ $client->request('GET', '/remove-tag/'.$entry->getId().'/'.$tag->getId());
+
+ $this->assertEquals(302, $client->getResponse()->getStatusCode());
+
+ $client->request('GET', '/remove-tag/'.$entry->getId().'/'.$tag->getId());
+
+ $this->assertEquals(404, $client->getResponse()->getStatusCode());
+ }
}