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()
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())
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())
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
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())
->with($entry, 'rule as string')
->willReturn(true);
- $this->repository
+ $this->tagRepository
->expects($this->once())
->method('findOneByLabelAndUserId')
->willReturn($tag);
$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);
->disableOriginalConstructor()
->getMock();
}
+
+ private function getEntryRepositoryMock()
+ {
+ return $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository')
+ ->disableOriginalConstructor()
+ ->getMock();
+ }
}