aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/Wallabag/CoreBundle/Tests/Helper
diff options
context:
space:
mode:
authorJeremy Benoist <j0k3r@users.noreply.github.com>2015-12-06 14:31:26 +0100
committerJeremy Benoist <j0k3r@users.noreply.github.com>2015-12-06 14:31:26 +0100
commita7f1921f7db312b5def3839393357f443dcbb52c (patch)
tree0522e03891433e9fdc9eb64d52b2d9651aadf1f7 /src/Wallabag/CoreBundle/Tests/Helper
parent2e15e30bf0e634bbbc3a9678904953d015490ed2 (diff)
parent752b90d1f2e279d3662d5431b09c7587df2937ca (diff)
downloadwallabag-a7f1921f7db312b5def3839393357f443dcbb52c.tar.gz
wallabag-a7f1921f7db312b5def3839393357f443dcbb52c.tar.zst
wallabag-a7f1921f7db312b5def3839393357f443dcbb52c.zip
Merge pull request #1478 from K-Phoen/rule-based-tags
Rule based tags
Diffstat (limited to 'src/Wallabag/CoreBundle/Tests/Helper')
-rw-r--r--src/Wallabag/CoreBundle/Tests/Helper/ContentProxyTest.php34
-rw-r--r--src/Wallabag/CoreBundle/Tests/Helper/RuleBasedTaggerTest.php167
2 files changed, 198 insertions, 3 deletions
diff --git a/src/Wallabag/CoreBundle/Tests/Helper/ContentProxyTest.php b/src/Wallabag/CoreBundle/Tests/Helper/ContentProxyTest.php
index 4bce4708..ef7cbd5b 100644
--- a/src/Wallabag/CoreBundle/Tests/Helper/ContentProxyTest.php
+++ b/src/Wallabag/CoreBundle/Tests/Helper/ContentProxyTest.php
@@ -2,6 +2,9 @@
2 2
3namespace Wallabag\CoreBundle\Tests\Helper; 3namespace Wallabag\CoreBundle\Tests\Helper;
4 4
5use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
6use Psr\Log\NullLogger;
7
5use Wallabag\CoreBundle\Entity\Entry; 8use Wallabag\CoreBundle\Entity\Entry;
6use Wallabag\UserBundle\Entity\User; 9use Wallabag\UserBundle\Entity\User;
7use Wallabag\CoreBundle\Helper\ContentProxy; 10use Wallabag\CoreBundle\Helper\ContentProxy;
@@ -10,6 +13,10 @@ class ContentProxyTest extends \PHPUnit_Framework_TestCase
10{ 13{
11 public function testWithEmptyContent() 14 public function testWithEmptyContent()
12 { 15 {
16 $tagger = $this->getTaggerMock();
17 $tagger->expects($this->once())
18 ->method('tag');
19
13 $graby = $this->getMockBuilder('Graby\Graby') 20 $graby = $this->getMockBuilder('Graby\Graby')
14 ->setMethods(array('fetchContent')) 21 ->setMethods(array('fetchContent'))
15 ->disableOriginalConstructor() 22 ->disableOriginalConstructor()
@@ -25,7 +32,7 @@ class ContentProxyTest extends \PHPUnit_Framework_TestCase
25 'language' => '', 32 'language' => '',
26 )); 33 ));
27 34
28 $proxy = new ContentProxy($graby); 35 $proxy = new ContentProxy($graby, $tagger, $this->getLogger());
29 $entry = $proxy->updateEntry(new Entry(new User()), 'http://0.0.0.0'); 36 $entry = $proxy->updateEntry(new Entry(new User()), 'http://0.0.0.0');
30 37
31 $this->assertEquals('http://0.0.0.0', $entry->getUrl()); 38 $this->assertEquals('http://0.0.0.0', $entry->getUrl());
@@ -40,6 +47,10 @@ class ContentProxyTest extends \PHPUnit_Framework_TestCase
40 47
41 public function testWithEmptyContentButOG() 48 public function testWithEmptyContentButOG()
42 { 49 {
50 $tagger = $this->getTaggerMock();
51 $tagger->expects($this->once())
52 ->method('tag');
53
43 $graby = $this->getMockBuilder('Graby\Graby') 54 $graby = $this->getMockBuilder('Graby\Graby')
44 ->setMethods(array('fetchContent')) 55 ->setMethods(array('fetchContent'))
45 ->disableOriginalConstructor() 56 ->disableOriginalConstructor()
@@ -59,7 +70,7 @@ class ContentProxyTest extends \PHPUnit_Framework_TestCase
59 ), 70 ),
60 )); 71 ));
61 72
62 $proxy = new ContentProxy($graby); 73 $proxy = new ContentProxy($graby, $tagger, $this->getLogger());
63 $entry = $proxy->updateEntry(new Entry(new User()), 'http://domain.io'); 74 $entry = $proxy->updateEntry(new Entry(new User()), 'http://domain.io');
64 75
65 $this->assertEquals('http://domain.io', $entry->getUrl()); 76 $this->assertEquals('http://domain.io', $entry->getUrl());
@@ -74,6 +85,10 @@ class ContentProxyTest extends \PHPUnit_Framework_TestCase
74 85
75 public function testWithContent() 86 public function testWithContent()
76 { 87 {
88 $tagger = $this->getTaggerMock();
89 $tagger->expects($this->once())
90 ->method('tag');
91
77 $graby = $this->getMockBuilder('Graby\Graby') 92 $graby = $this->getMockBuilder('Graby\Graby')
78 ->setMethods(array('fetchContent')) 93 ->setMethods(array('fetchContent'))
79 ->disableOriginalConstructor() 94 ->disableOriginalConstructor()
@@ -94,7 +109,7 @@ class ContentProxyTest extends \PHPUnit_Framework_TestCase
94 ), 109 ),
95 )); 110 ));
96 111
97 $proxy = new ContentProxy($graby); 112 $proxy = new ContentProxy($graby, $tagger, $this->getLogger());
98 $entry = $proxy->updateEntry(new Entry(new User()), 'http://0.0.0.0'); 113 $entry = $proxy->updateEntry(new Entry(new User()), 'http://0.0.0.0');
99 114
100 $this->assertEquals('http://1.1.1.1', $entry->getUrl()); 115 $this->assertEquals('http://1.1.1.1', $entry->getUrl());
@@ -106,4 +121,17 @@ class ContentProxyTest extends \PHPUnit_Framework_TestCase
106 $this->assertEquals(4.0, $entry->getReadingTime()); 121 $this->assertEquals(4.0, $entry->getReadingTime());
107 $this->assertEquals('1.1.1.1', $entry->getDomainName()); 122 $this->assertEquals('1.1.1.1', $entry->getDomainName());
108 } 123 }
124
125 private function getTaggerMock()
126 {
127 return $this->getMockBuilder('Wallabag\CoreBundle\Helper\RuleBasedTagger')
128 ->setMethods(array('tag'))
129 ->disableOriginalConstructor()
130 ->getMock();
131 }
132
133 private function getLogger()
134 {
135 return new NullLogger();
136 }
109} 137}
diff --git a/src/Wallabag/CoreBundle/Tests/Helper/RuleBasedTaggerTest.php b/src/Wallabag/CoreBundle/Tests/Helper/RuleBasedTaggerTest.php
new file mode 100644
index 00000000..5180f7dd
--- /dev/null
+++ b/src/Wallabag/CoreBundle/Tests/Helper/RuleBasedTaggerTest.php
@@ -0,0 +1,167 @@
1<?php
2
3namespace Wallabag\CoreBundle\Tests\Helper;
4
5use Wallabag\CoreBundle\Entity\Config;
6use Wallabag\CoreBundle\Entity\Entry;
7use Wallabag\CoreBundle\Entity\Tag;
8use Wallabag\CoreBundle\Entity\TaggingRule;
9use Wallabag\UserBundle\Entity\User;
10use Wallabag\CoreBundle\Helper\RuleBasedTagger;
11
12class RuleBasedTaggerTest extends \PHPUnit_Framework_TestCase
13{
14 private $rulerz;
15 private $tagRepository;
16 private $entryRepository;
17 private $tagger;
18
19 public function setUp()
20 {
21 $this->rulerz = $this->getRulerZMock();
22 $this->tagRepository = $this->getTagRepositoryMock();
23 $this->entryRepository = $this->getEntryRepositoryMock();
24
25 $this->tagger = new RuleBasedTagger($this->rulerz, $this->tagRepository, $this->entryRepository);
26 }
27
28 public function testTagWithNoRule()
29 {
30 $entry = new Entry($this->getUser());
31
32 $this->tagger->tag($entry);
33
34 $this->assertTrue($entry->getTags()->isEmpty());
35 }
36
37 public function testTagWithNoMatchingRule()
38 {
39 $taggingRule = $this->getTaggingRule('rule as string', array('foo', 'bar'));
40 $user = $this->getUser([$taggingRule]);
41 $entry = new Entry($user);
42
43 $this->rulerz
44 ->expects($this->once())
45 ->method('satisfies')
46 ->with($entry, 'rule as string')
47 ->willReturn(false);
48
49 $this->tagger->tag($entry);
50
51 $this->assertTrue($entry->getTags()->isEmpty());
52 }
53
54 public function testTagWithAMatchingRule()
55 {
56 $taggingRule = $this->getTaggingRule('rule as string', array('foo', 'bar'));
57 $user = $this->getUser([$taggingRule]);
58 $entry = new Entry($user);
59
60 $this->rulerz
61 ->expects($this->once())
62 ->method('satisfies')
63 ->with($entry, 'rule as string')
64 ->willReturn(true);
65
66 $this->tagger->tag($entry);
67
68 $this->assertFalse($entry->getTags()->isEmpty());
69
70 $tags = $entry->getTags();
71 $this->assertSame('foo', $tags[0]->getLabel());
72 $this->assertSame($user, $tags[0]->getUser());
73 $this->assertSame('bar', $tags[1]->getLabel());
74 $this->assertSame($user, $tags[1]->getUser());
75 }
76
77 public function testTagWithAMixOfMatchingRules()
78 {
79 $taggingRule = $this->getTaggingRule('bla bla', array('hey'));
80 $otherTaggingRule = $this->getTaggingRule('rule as string', array('foo'));
81
82 $user = $this->getUser([$taggingRule, $otherTaggingRule]);
83 $entry = new Entry($user);
84
85 $this->rulerz
86 ->method('satisfies')
87 ->will($this->onConsecutiveCalls(false, true));
88
89 $this->tagger->tag($entry);
90
91 $this->assertFalse($entry->getTags()->isEmpty());
92
93 $tags = $entry->getTags();
94 $this->assertSame('foo', $tags[0]->getLabel());
95 $this->assertSame($user, $tags[0]->getUser());
96 }
97
98 public function testWhenTheTagExists()
99 {
100 $taggingRule = $this->getTaggingRule('rule as string', array('foo'));
101 $user = $this->getUser([$taggingRule]);
102 $entry = new Entry($user);
103 $tag = new Tag($user);
104
105 $this->rulerz
106 ->expects($this->once())
107 ->method('satisfies')
108 ->with($entry, 'rule as string')
109 ->willReturn(true);
110
111 $this->tagRepository
112 ->expects($this->once())
113 ->method('findOneByLabelAndUserId')
114 ->willReturn($tag);
115
116 $this->tagger->tag($entry);
117
118 $this->assertFalse($entry->getTags()->isEmpty());
119
120 $tags = $entry->getTags();
121 $this->assertSame($tag, $tags[0]);
122 }
123
124 private function getUser(array $taggingRules = [])
125 {
126 $user = new User();
127 $config = new Config($user);
128
129 $user->setConfig($config);
130
131 foreach ($taggingRules as $rule) {
132 $config->addTaggingRule($rule);
133 }
134
135 return $user;
136 }
137
138 private function getTaggingRule($rule, array $tags)
139 {
140 $taggingRule = new TaggingRule();
141 $taggingRule->setRule($rule);
142 $taggingRule->setTags($tags);
143
144 return $taggingRule;
145 }
146
147 private function getRulerZMock()
148 {
149 return $this->getMockBuilder('RulerZ\RulerZ')
150 ->disableOriginalConstructor()
151 ->getMock();
152 }
153
154 private function getTagRepositoryMock()
155 {
156 return $this->getMockBuilder('Wallabag\CoreBundle\Repository\TagRepository')
157 ->disableOriginalConstructor()
158 ->getMock();
159 }
160
161 private function getEntryRepositoryMock()
162 {
163 return $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository')
164 ->disableOriginalConstructor()
165 ->getMock();
166 }
167}