]> git.immae.eu Git - github/wallabag/wallabag.git/blobdiff - tests/Wallabag/CoreBundle/Controller/TagControllerTest.php
TagController: fix duplicated tags when renaming them
[github/wallabag/wallabag.git] / tests / Wallabag / CoreBundle / Controller / TagControllerTest.php
index 5a973a7e0409988ff306e9ee1848ccf2c1c26a81..20e60c324197de90c913437c3444e4844d95260c 100644 (file)
@@ -98,7 +98,7 @@ class TagControllerTest extends WallabagCoreTestCase
             $tags[$key] = $tag->getLabel();
         }
 
-        $this->assertGreaterThanOrEqual(2, count($tags));
+        $this->assertGreaterThanOrEqual(2, \count($tags));
         $this->assertNotFalse(array_search('foo2', $tags, true), 'Tag foo2 is assigned to the entry');
         $this->assertNotFalse(array_search('bar2', $tags, true), 'Tag bar2 is assigned to the entry');
     }
@@ -176,4 +176,119 @@ class TagControllerTest extends WallabagCoreTestCase
         $em->remove($tag);
         $em->flush();
     }
+
+    public function testRenameTagUsingTheFormInsideTagList()
+    {
+        $newTagLabel = 'rename label';
+
+        $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);
+
+        $entry2 = new Entry($this->getLoggedInUser());
+        $entry2->setUrl('http://0.0.0.0/bar');
+        $entry2->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
+        $crawler = $client->request('GET', '/tag/list');
+        $form = $crawler->filter('#tag-' . $tag->getId() . ' form')->form();
+
+        $data = [
+            'tag[label]' => $newTagLabel,
+        ];
+
+        $client->submit($form, $data);
+        $this->assertSame(302, $client->getResponse()->getStatusCode());
+
+        $freshEntry = $client->getContainer()
+            ->get('doctrine.orm.entity_manager')
+            ->getRepository('WallabagCoreBundle:Entry')
+            ->find($entry->getId());
+
+        $freshEntry2 = $client->getContainer()
+            ->get('doctrine.orm.entity_manager')
+            ->getRepository('WallabagCoreBundle:Entry')
+            ->find($entry2->getId());
+
+        $tags = [];
+
+        $tagsFromEntry = $freshEntry->getTags()->toArray();
+        foreach ($tagsFromEntry as $key => $item) {
+            $tags[$key] = $item->getLabel();
+        }
+
+        $tagsFromEntry2 = $freshEntry2->getTags()->toArray();
+        foreach ($tagsFromEntry2 as $key => $item) {
+            $tags[$key] = $item->getLabel();
+        }
+
+        $this->assertFalse(array_search($tag->getLabel(), $tags, true), 'Previous tag is not attach to entries anymore.');
+
+        $newTag = $client->getContainer()
+            ->get('doctrine.orm.entity_manager')
+            ->getRepository('WallabagCoreBundle:Tag')
+            ->findByLabel($newTagLabel);
+
+        $this->assertCount(1, $newTag, 'New tag exists.');
+
+        $this->assertTrue($newTag[0]->hasEntry($freshEntry), 'New tag is assigned to the entry.');
+        $this->assertTrue($newTag[0]->hasEntry($freshEntry2), 'New tag is assigned to the entry2.');
+    }
+
+    public function testAddUnicodeTagLabel()
+    {
+        $this->logInAs('admin');
+        $client = $this->getClient();
+
+        $entry = new Entry($this->getLoggedInUser());
+        $entry->setUrl('http://0.0.0.0/tag-caché');
+        $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]' => 'cache',
+        ];
+
+        $client->submit($form, $data);
+
+        $crawler = $client->request('GET', '/view/' . $entry->getId());
+
+        $form = $crawler->filter('form[name=tag]')->form();
+
+        $data = [
+            'tag[label]' => 'caché',
+        ];
+
+        $client->submit($form, $data);
+
+        $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('cache', $tags, true), 'Tag cache is assigned to the entry');
+        $this->assertNotFalse(array_search('caché', $tags, true), 'Tag caché is assigned to the entry');
+    }
 }