3 namespace Tests\Wallabag\CoreBundle\Controller
;
5 use Tests\Wallabag\CoreBundle\WallabagCoreTestCase
;
6 use Wallabag\CoreBundle\Entity\Entry
;
7 use Wallabag\CoreBundle\Entity\Tag
;
9 class TagControllerTest
extends WallabagCoreTestCase
11 public $tagName = 'opensource';
13 public function testList()
15 $this->logInAs('admin');
16 $client = $this->getClient();
18 $client->request('GET', '/tag/list');
20 $this->assertEquals(200, $client->getResponse()->getStatusCode());
23 public function testAddTagToEntry()
25 $this->logInAs('admin');
26 $client = $this->getClient();
28 $entry = new Entry($this->getLoggedInUser());
29 $entry->setUrl('http://0.0.0.0/foo');
30 $this->getEntityManager()->persist($entry);
31 $this->getEntityManager()->flush();
32 $this->getEntityManager()->clear();
34 $crawler = $client->request('GET', '/view/'.$entry->getId());
36 $form = $crawler->filter('form[name=tag]')->form();
39 'tag[label]' => $this->tagName
,
42 $client->submit($form, $data);
43 $this->assertEquals(302, $client->getResponse()->getStatusCode());
45 // be sure to reload the entry
46 $entry = $this->getEntityManager()->getRepository(Entry
::class)->find($entry->getId());
47 $this->assertCount(1, $entry->getTags());
49 // tag already exists and already assigned
50 $client->submit($form, $data);
51 $this->assertEquals(302, $client->getResponse()->getStatusCode());
53 $entry = $this->getEntityManager()->getRepository(Entry
::class)->find($entry->getId());
54 $this->assertCount(1, $entry->getTags());
56 // tag already exists but still not assigned to this entry
58 'tag[label]' => 'foo bar',
61 $client->submit($form, $data);
62 $this->assertEquals(302, $client->getResponse()->getStatusCode());
64 $entry = $this->getEntityManager()->getRepository(Entry
::class)->find($entry->getId());
65 $this->assertCount(2, $entry->getTags());
68 public function testAddMultipleTagToEntry()
70 $this->logInAs('admin');
71 $client = $this->getClient();
73 $entry = $client->getContainer()
74 ->get('doctrine.orm.entity_manager')
75 ->getRepository('WallabagCoreBundle:Entry')
76 ->findByUrlAndUserId('http://0.0.0.0/entry2', $this->getLoggedInUserId());
78 $crawler = $client->request('GET', '/view/'.$entry->getId());
80 $form = $crawler->filter('form[name=tag]')->form();
83 'tag[label]' => 'foo2, bar2',
86 $client->submit($form, $data);
87 $this->assertEquals(302, $client->getResponse()->getStatusCode());
89 $newEntry = $client->getContainer()
90 ->get('doctrine.orm.entity_manager')
91 ->getRepository('WallabagCoreBundle:Entry')
92 ->find($entry->getId());
94 $tags = $newEntry->getTags()->toArray();
95 foreach ($tags as $key => $tag) {
96 $tags[$key] = $tag->getLabel();
99 $this->assertGreaterThanOrEqual(2, count($tags));
100 $this->assertNotFalse(array_search('foo2', $tags), 'Tag foo2 is assigned to the entry');
101 $this->assertNotFalse(array_search('bar2', $tags), 'Tag bar2 is assigned to the entry');
104 public function testRemoveTagFromEntry()
106 $this->logInAs('admin');
107 $client = $this->getClient();
110 $tag->setLabel($this->tagName
);
111 $entry = new Entry($this->getLoggedInUser());
112 $entry->setUrl('http://0.0.0.0/foo');
113 $entry->addTag($tag);
114 $this->getEntityManager()->persist($entry);
115 $this->getEntityManager()->flush();
116 $this->getEntityManager()->clear();
118 // We make a first request to set an history and test redirection after tag deletion
119 $client->request('GET', '/view/'.$entry->getId());
120 $entryUri = $client->getRequest()->getUri();
121 $client->request('GET', '/remove-tag/'.$entry->getId().'/'.$tag->getId());
123 $this->assertEquals(302, $client->getResponse()->getStatusCode());
124 $this->assertEquals($entryUri, $client->getResponse()->getTargetUrl());
126 // re-retrieve the entry to be sure to get fresh data from database (mostly for tags)
127 $entry = $this->getEntityManager()->getRepository(Entry
::class)->find($entry->getId());
128 $this->assertNotContains($this->tagName
, $entry->getTags());
130 $client->request('GET', '/remove-tag/'.$entry->getId().'/'.$tag->getId());
132 $this->assertEquals(404, $client->getResponse()->getStatusCode());
134 $tag = $client->getContainer()
135 ->get('doctrine.orm.entity_manager')
136 ->getRepository('WallabagCoreBundle:Tag')
137 ->findOneByLabel($this->tagName
);
139 $this->assertNull($tag, $this->tagName
.' was removed because it begun an orphan tag');
142 public function testShowEntriesForTagAction()
144 $this->logInAs('admin');
145 $client = $this->getClient();
146 $em = $client->getContainer()
147 ->get('doctrine.orm.entity_manager');
150 $tag->setLabel($this->tagName
);
152 $entry = $client->getContainer()
153 ->get('doctrine.orm.entity_manager')
154 ->getRepository('WallabagCoreBundle:Entry')
155 ->findByUrlAndUserId('http://0.0.0.0/entry4', $this->getLoggedInUserId());
157 $tag->addEntry($entry);
159 $em->persist($entry);
163 $tag = $client->getContainer()
164 ->get('doctrine.orm.entity_manager')
165 ->getRepository('WallabagCoreBundle:Tag')
166 ->findOneByEntryAndTagLabel($entry, $this->tagName
);
168 $crawler = $client->request('GET', '/tag/list/'.$tag->getSlug());
170 $this->assertEquals(200, $client->getResponse()->getStatusCode());
171 $this->assertCount(1, $crawler->filter('[id*="entry-"]'));
173 $entry->removeTag($tag);