]> git.immae.eu Git - github/wallabag/wallabag.git/blobdiff - src/Wallabag/CoreBundle/Tests/Helper/RuleBasedTaggerTest.php
Convert array + phpDoc
[github/wallabag/wallabag.git] / src / Wallabag / CoreBundle / Tests / Helper / RuleBasedTaggerTest.php
index 37e137bfce42227bfc066a4586cfb8a2f06025e8..e9025b450df58b16b1cf97010ae561e0ef96cdce 100644 (file)
@@ -6,8 +6,8 @@ use Wallabag\CoreBundle\Entity\Config;
 use Wallabag\CoreBundle\Entity\Entry;
 use Wallabag\CoreBundle\Entity\Tag;
 use Wallabag\CoreBundle\Entity\TaggingRule;
-use Wallabag\UserBundle\Entity\User;
 use Wallabag\CoreBundle\Helper\RuleBasedTagger;
+use Wallabag\UserBundle\Entity\User;
 
 class RuleBasedTaggerTest extends \PHPUnit_Framework_TestCase
 {
@@ -36,7 +36,7 @@ class RuleBasedTaggerTest extends \PHPUnit_Framework_TestCase
 
     public function testTagWithNoMatchingRule()
     {
-        $taggingRule = $this->getTaggingRule('rule as string', array('foo', 'bar'));
+        $taggingRule = $this->getTaggingRule('rule as string', ['foo', 'bar']);
         $user = $this->getUser([$taggingRule]);
         $entry = new Entry($user);
 
@@ -53,7 +53,7 @@ class RuleBasedTaggerTest extends \PHPUnit_Framework_TestCase
 
     public function testTagWithAMatchingRule()
     {
-        $taggingRule = $this->getTaggingRule('rule as string', array('foo', 'bar'));
+        $taggingRule = $this->getTaggingRule('rule as string', ['foo', 'bar']);
         $user = $this->getUser([$taggingRule]);
         $entry = new Entry($user);
 
@@ -69,15 +69,13 @@ class RuleBasedTaggerTest extends \PHPUnit_Framework_TestCase
 
         $tags = $entry->getTags();
         $this->assertSame('foo', $tags[0]->getLabel());
-        $this->assertSame($user, $tags[0]->getUser());
         $this->assertSame('bar', $tags[1]->getLabel());
-        $this->assertSame($user, $tags[1]->getUser());
     }
 
     public function testTagWithAMixOfMatchingRules()
     {
-        $taggingRule = $this->getTaggingRule('bla bla', array('hey'));
-        $otherTaggingRule = $this->getTaggingRule('rule as string', array('foo'));
+        $taggingRule = $this->getTaggingRule('bla bla', ['hey']);
+        $otherTaggingRule = $this->getTaggingRule('rule as string', ['foo']);
 
         $user = $this->getUser([$taggingRule, $otherTaggingRule]);
         $entry = new Entry($user);
@@ -92,15 +90,14 @@ class RuleBasedTaggerTest extends \PHPUnit_Framework_TestCase
 
         $tags = $entry->getTags();
         $this->assertSame('foo', $tags[0]->getLabel());
-        $this->assertSame($user, $tags[0]->getUser());
     }
 
     public function testWhenTheTagExists()
     {
-        $taggingRule = $this->getTaggingRule('rule as string', array('foo'));
+        $taggingRule = $this->getTaggingRule('rule as string', ['foo']);
         $user = $this->getUser([$taggingRule]);
         $entry = new Entry($user);
-        $tag = new Tag($user);
+        $tag = new Tag();
 
         $this->rulerz
             ->expects($this->once())
@@ -110,7 +107,9 @@ class RuleBasedTaggerTest extends \PHPUnit_Framework_TestCase
 
         $this->tagRepository
             ->expects($this->once())
-            ->method('findOneByLabelAndUserId')
+            // the method `findOneByLabel` doesn't exist, EntityRepository will then call `_call` method
+            // to magically call the `findOneBy` with ['label' => 'foo']
+            ->method('__call')
             ->willReturn($tag);
 
         $this->tagger->tag($entry);
@@ -121,6 +120,52 @@ class RuleBasedTaggerTest extends \PHPUnit_Framework_TestCase
         $this->assertSame($tag, $tags[0]);
     }
 
+    public function testSameTagWithDifferentfMatchingRules()
+    {
+        $taggingRule = $this->getTaggingRule('bla bla', ['hey']);
+        $otherTaggingRule = $this->getTaggingRule('rule as string', ['hey']);
+
+        $user = $this->getUser([$taggingRule, $otherTaggingRule]);
+        $entry = new Entry($user);
+
+        $this->rulerz
+            ->method('satisfies')
+            ->willReturn(true);
+
+        $this->tagger->tag($entry);
+
+        $this->assertFalse($entry->getTags()->isEmpty());
+
+        $tags = $entry->getTags();
+        $this->assertCount(1, $tags);
+    }
+
+    public function testTagAllEntriesForAUser()
+    {
+        $taggingRule = $this->getTaggingRule('bla bla', ['hey']);
+
+        $user = $this->getUser([$taggingRule]);
+
+        $this->rulerz
+            ->method('satisfies')
+            ->willReturn(true);
+
+        $this->rulerz
+            ->method('filter')
+            ->willReturn([new Entry($user), new Entry($user)]);
+
+        $entries = $this->tagger->tagAllForUser($user);
+
+        $this->assertCount(2, $entries);
+
+        foreach ($entries as $entry) {
+            $tags = $entry->getTags();
+
+            $this->assertCount(1, $tags);
+            $this->assertEquals('hey', $tags[0]->getLabel());
+        }
+    }
+
     private function getUser(array $taggingRules = [])
     {
         $user = new User();