logInAs('admin'); $client = $this->getClient(); $client->request('GET', '/tag/list'); $this->assertEquals(200, $client->getResponse()->getStatusCode()); } public function testAddTagToEntry() { $this->logInAs('admin'); $client = $this->getClient(); $entry = new Entry($this->getLoggedInUser()); $entry->setUrl('http://0.0.0.0/foo'); $this->getEntityManager()->persist($entry); $this->getEntityManager()->flush(); $this->getEntityManager()->clear(); $crawler = $client->request('GET', '/view/'.$entry->getId()); $form = $crawler->filter('form[name=tag]')->form(); $data = [ 'tag[label]' => $this->tagName, ]; $client->submit($form, $data); $this->assertEquals(302, $client->getResponse()->getStatusCode()); // be sure to reload the entry $entry = $this->getEntityManager()->getRepository(Entry::class)->find($entry->getId()); $this->assertCount(1, $entry->getTags()); // tag already exists and already assigned $client->submit($form, $data); $this->assertEquals(302, $client->getResponse()->getStatusCode()); $entry = $this->getEntityManager()->getRepository(Entry::class)->find($entry->getId()); $this->assertCount(1, $entry->getTags()); // tag already exists but still not assigned to this entry $data = [ 'tag[label]' => 'foo bar', ]; $client->submit($form, $data); $this->assertEquals(302, $client->getResponse()->getStatusCode()); $entry = $this->getEntityManager()->getRepository(Entry::class)->find($entry->getId()); $this->assertCount(2, $entry->getTags()); } public function testAddMultipleTagToEntry() { $this->logInAs('admin'); $client = $this->getClient(); $entry = $client->getContainer() ->get('doctrine.orm.entity_manager') ->getRepository('WallabagCoreBundle:Entry') ->findByUrlAndUserId('http://0.0.0.0/entry2', $this->getLoggedInUserId()); $crawler = $client->request('GET', '/view/'.$entry->getId()); $form = $crawler->filter('form[name=tag]')->form(); $data = [ 'tag[label]' => 'foo2, bar2', ]; $client->submit($form, $data); $this->assertEquals(302, $client->getResponse()->getStatusCode()); $newEntry = $client->getContainer() ->get('doctrine.orm.entity_manager') ->getRepository('WallabagCoreBundle:Entry') ->find($entry->getId()); $tags = $newEntry->getTags()->toArray(); foreach ($tags as $key => $tag) { $tags[$key] = $tag->getLabel(); } $this->assertGreaterThanOrEqual(2, count($tags)); $this->assertNotFalse(array_search('foo2', $tags), 'Tag foo2 is assigned to the entry'); $this->assertNotFalse(array_search('bar2', $tags), 'Tag bar2 is assigned to the entry'); } public function testRemoveTagFromEntry() { $this->logInAs('admin'); $client = $this->getClient(); $tag = new Tag(); $tag->setLabel($this->tagName); $entry = new Entry($this->getLoggedInUser()); $entry->setUrl('http://0.0.0.0/foo'); $entry->addTag($tag); $this->getEntityManager()->persist($entry); $this->getEntityManager()->flush(); $this->getEntityManager()->clear(); // We make a first request to set an history and test redirection after tag deletion $client->request('GET', '/view/'.$entry->getId()); $entryUri = $client->getRequest()->getUri(); $client->request('GET', '/remove-tag/'.$entry->getId().'/'.$tag->getId()); $this->assertEquals(302, $client->getResponse()->getStatusCode()); $this->assertEquals($entryUri, $client->getResponse()->getTargetUrl()); // re-retrieve the entry to be sure to get fresh data from database (mostly for tags) $entry = $this->getEntityManager()->getRepository(Entry::class)->find($entry->getId()); $this->assertNotContains($this->tagName, $entry->getTags()); $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->addEntry($entry); $em->persist($entry); $em->persist($tag); $em->flush(); $tag = $client->getContainer() ->get('doctrine.orm.entity_manager') ->getRepository('WallabagCoreBundle:Tag') ->findOneByEntryAndTagLabel($entry, $this->tagName); $crawler = $client->request('GET', '/tag/list/'.$tag->getSlug()); $this->assertEquals(200, $client->getResponse()->getStatusCode()); $this->assertCount(1, $crawler->filter('[id*="entry-"]')); $entry->removeTag($tag); $em->remove($tag); $em->flush(); } }