]> git.immae.eu Git - github/wallabag/wallabag.git/blobdiff - src/Wallabag/CoreBundle/Tests/Helper/RuleBasedTaggerTest.php
Backport all icomoon from v1
[github/wallabag/wallabag.git] / src / Wallabag / CoreBundle / Tests / Helper / RuleBasedTaggerTest.php
index 56a1ed61e50762743e9146562f10acffc1794d8b..1de134b8a4bee5d0dc05101c54ae83acdda95d71 100644 (file)
@@ -12,15 +12,17 @@ use Wallabag\CoreBundle\Helper\RuleBasedTagger;
 class RuleBasedTaggerTest extends \PHPUnit_Framework_TestCase
 {
     private $rulerz;
-    private $repository;
+    private $tagRepository;
+    private $entryRepository;
     private $tagger;
 
     public function setUp()
     {
-        $this->rulerz     = $this->getRulerZMock();
-        $this->repository = $this->getTagRepositoryMock();
+        $this->rulerz = $this->getRulerZMock();
+        $this->tagRepository = $this->getTagRepositoryMock();
+        $this->entryRepository = $this->getEntryRepositoryMock();
 
-        $this->tagger     = new RuleBasedTagger($this->rulerz, $this->repository);
+        $this->tagger = new RuleBasedTagger($this->rulerz, $this->tagRepository, $this->entryRepository);
     }
 
     public function testTagWithNoRule()
@@ -35,8 +37,8 @@ class RuleBasedTaggerTest extends \PHPUnit_Framework_TestCase
     public function testTagWithNoMatchingRule()
     {
         $taggingRule = $this->getTaggingRule('rule as string', array('foo', 'bar'));
-        $user        = $this->getUser([$taggingRule]);
-        $entry       = new Entry($user);
+        $user = $this->getUser([$taggingRule]);
+        $entry = new Entry($user);
 
         $this->rulerz
             ->expects($this->once())
@@ -52,8 +54,8 @@ class RuleBasedTaggerTest extends \PHPUnit_Framework_TestCase
     public function testTagWithAMatchingRule()
     {
         $taggingRule = $this->getTaggingRule('rule as string', array('foo', 'bar'));
-        $user        = $this->getUser([$taggingRule]);
-        $entry       = new Entry($user);
+        $user = $this->getUser([$taggingRule]);
+        $entry = new Entry($user);
 
         $this->rulerz
             ->expects($this->once())
@@ -74,10 +76,10 @@ class RuleBasedTaggerTest extends \PHPUnit_Framework_TestCase
 
     public function testTagWithAMixOfMatchingRules()
     {
-        $taggingRule      = $this->getTaggingRule('bla bla', array('hey'));
+        $taggingRule = $this->getTaggingRule('bla bla', array('hey'));
         $otherTaggingRule = $this->getTaggingRule('rule as string', array('foo'));
 
-        $user  = $this->getUser([$taggingRule, $otherTaggingRule]);
+        $user = $this->getUser([$taggingRule, $otherTaggingRule]);
         $entry = new Entry($user);
 
         $this->rulerz
@@ -96,9 +98,9 @@ class RuleBasedTaggerTest extends \PHPUnit_Framework_TestCase
     public function testWhenTheTagExists()
     {
         $taggingRule = $this->getTaggingRule('rule as string', array('foo'));
-        $user        = $this->getUser([$taggingRule]);
-        $entry       = new Entry($user);
-        $tag         = new Tag($user);
+        $user = $this->getUser([$taggingRule]);
+        $entry = new Entry($user);
+        $tag = new Tag($user);
 
         $this->rulerz
             ->expects($this->once())
@@ -106,7 +108,7 @@ class RuleBasedTaggerTest extends \PHPUnit_Framework_TestCase
             ->with($entry, 'rule as string')
             ->willReturn(true);
 
-        $this->repository
+        $this->tagRepository
             ->expects($this->once())
             ->method('findOneByLabelAndUserId')
             ->willReturn($tag);
@@ -119,9 +121,55 @@ class RuleBasedTaggerTest extends \PHPUnit_Framework_TestCase
         $this->assertSame($tag, $tags[0]);
     }
 
+    public function testSameTagWithDifferentfMatchingRules()
+    {
+        $taggingRule = $this->getTaggingRule('bla bla', array('hey'));
+        $otherTaggingRule = $this->getTaggingRule('rule as string', array('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', array('hey'));
+
+        $user = $this->getUser([$taggingRule]);
+
+        $this->rulerz
+            ->method('satisfies')
+            ->willReturn(true);
+
+        $this->rulerz
+            ->method('filter')
+            ->willReturn(array(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();
+        $user = new User();
         $config = new Config($user);
 
         $user->setConfig($config);
@@ -155,4 +203,11 @@ class RuleBasedTaggerTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
     }
+
+    private function getEntryRepositoryMock()
+    {
+        return $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository')
+            ->disableOriginalConstructor()
+            ->getMock();
+    }
 }