3 namespace Tests\Wallabag\CoreBundle\Helper
;
5 use Psr\Log\NullLogger
;
6 use Wallabag\CoreBundle\Helper\ContentProxy
;
7 use Wallabag\CoreBundle\Entity\Entry
;
8 use Wallabag\CoreBundle\Entity\Tag
;
9 use Wallabag\UserBundle\Entity\User
;
11 class ContentProxyTest
extends \PHPUnit_Framework_TestCase
13 public function testWithBadUrl()
15 $tagger = $this->getTaggerMock();
16 $tagger->expects($this->once())
19 $graby = $this->getMockBuilder('Graby\Graby')
20 ->setMethods(['fetchContent'])
21 ->disableOriginalConstructor()
24 $graby->expects($this->any())
25 ->method('fetchContent')
34 $proxy = new ContentProxy($graby, $tagger, $this->getTagRepositoryMock(), $this->getLogger());
35 $entry = $proxy->updateEntry(new Entry(new User()), 'http://user@:80');
37 $this->assertEquals('http://user@:80', $entry->getUrl());
38 $this->assertEmpty($entry->getTitle());
39 $this->assertEquals('<p>Unable to retrieve readable content.</p>', $entry->getContent());
40 $this->assertEmpty($entry->getPreviewPicture());
41 $this->assertEmpty($entry->getMimetype());
42 $this->assertEmpty($entry->getLanguage());
43 $this->assertEquals(0.0, $entry->getReadingTime());
44 $this->assertEquals(false, $entry->getDomainName());
47 public function testWithEmptyContent()
49 $tagger = $this->getTaggerMock();
50 $tagger->expects($this->once())
53 $graby = $this->getMockBuilder('Graby\Graby')
54 ->setMethods(['fetchContent'])
55 ->disableOriginalConstructor()
58 $graby->expects($this->any())
59 ->method('fetchContent')
68 $proxy = new ContentProxy($graby, $tagger, $this->getTagRepositoryMock(), $this->getLogger());
69 $entry = $proxy->updateEntry(new Entry(new User()), 'http://0.0.0.0');
71 $this->assertEquals('http://0.0.0.0', $entry->getUrl());
72 $this->assertEmpty($entry->getTitle());
73 $this->assertEquals('<p>Unable to retrieve readable content.</p>', $entry->getContent());
74 $this->assertEmpty($entry->getPreviewPicture());
75 $this->assertEmpty($entry->getMimetype());
76 $this->assertEmpty($entry->getLanguage());
77 $this->assertEquals(0.0, $entry->getReadingTime());
78 $this->assertEquals('0.0.0.0', $entry->getDomainName());
81 public function testWithEmptyContentButOG()
83 $tagger = $this->getTaggerMock();
84 $tagger->expects($this->once())
87 $graby = $this->getMockBuilder('Graby\Graby')
88 ->setMethods(['fetchContent'])
89 ->disableOriginalConstructor()
92 $graby->expects($this->any())
93 ->method('fetchContent')
102 'og_title' => 'my title',
103 'og_description' => 'desc',
107 $proxy = new ContentProxy($graby, $tagger, $this->getTagRepositoryMock(), $this->getLogger());
108 $entry = $proxy->updateEntry(new Entry(new User()), 'http://domain.io');
110 $this->assertEquals('http://domain.io', $entry->getUrl());
111 $this->assertEquals('my title', $entry->getTitle());
112 $this->assertEquals('<p>Unable to retrieve readable content.</p><p><i>But we found a short description: </i></p>desc', $entry->getContent());
113 $this->assertEmpty($entry->getPreviewPicture());
114 $this->assertEmpty($entry->getLanguage());
115 $this->assertEmpty($entry->getHttpStatus());
116 $this->assertEmpty($entry->getMimetype());
117 $this->assertEquals(0.0, $entry->getReadingTime());
118 $this->assertEquals('domain.io', $entry->getDomainName());
121 public function testWithContent()
123 $tagger = $this->getTaggerMock();
124 $tagger->expects($this->once())
127 $graby = $this->getMockBuilder('Graby\Graby')
128 ->setMethods(['fetchContent'])
129 ->disableOriginalConstructor()
132 $graby->expects($this->any())
133 ->method('fetchContent')
135 'html' => str_repeat('this is my content', 325),
136 'title' => 'this is my title',
137 'url' => 'http://1.1.1.1',
138 'content_type' => 'text/html',
142 'og_title' => 'my OG title',
143 'og_description' => 'OG desc',
144 'og_image' => 'http://3.3.3.3/cover.jpg',
148 $proxy = new ContentProxy($graby, $tagger, $this->getTagRepositoryMock(), $this->getLogger());
149 $entry = $proxy->updateEntry(new Entry(new User()), 'http://0.0.0.0');
151 $this->assertEquals('http://1.1.1.1', $entry->getUrl());
152 $this->assertEquals('this is my title', $entry->getTitle());
153 $this->assertContains('this is my content', $entry->getContent());
154 $this->assertEquals('http://3.3.3.3/cover.jpg', $entry->getPreviewPicture());
155 $this->assertEquals('text/html', $entry->getMimetype());
156 $this->assertEquals('fr', $entry->getLanguage());
157 $this->assertEquals('200', $entry->getHttpStatus());
158 $this->assertEquals(4.0, $entry->getReadingTime());
159 $this->assertEquals('1.1.1.1', $entry->getDomainName());
162 public function testWithForcedContent()
164 $tagger = $this->getTaggerMock();
165 $tagger->expects($this->once())
168 $graby = $this->getMockBuilder('Graby\Graby')->getMock();
170 $proxy = new ContentProxy($graby, $tagger, $this->getTagRepositoryMock(), $this->getLogger());
171 $entry = $proxy->updateEntry(new Entry(new User()), 'http://0.0.0.0', [
172 'html' => str_repeat('this is my content', 325),
173 'title' => 'this is my title',
174 'url' => 'http://1.1.1.1',
175 'content_type' => 'text/html',
179 $this->assertEquals('http://1.1.1.1', $entry->getUrl());
180 $this->assertEquals('this is my title', $entry->getTitle());
181 $this->assertContains('this is my content', $entry->getContent());
182 $this->assertEquals('text/html', $entry->getMimetype());
183 $this->assertEquals('fr', $entry->getLanguage());
184 $this->assertEquals(4.0, $entry->getReadingTime());
185 $this->assertEquals('1.1.1.1', $entry->getDomainName());
188 public function testTaggerThrowException()
190 $graby = $this->getMockBuilder('Graby\Graby')
191 ->disableOriginalConstructor()
194 $tagger = $this->getTaggerMock();
195 $tagger->expects($this->once())
197 ->will($this->throwException(new \
Exception()));
199 $tagRepo = $this->getTagRepositoryMock();
200 $proxy = new ContentProxy($graby, $tagger, $tagRepo, $this->getLogger());
202 $entry = $proxy->updateEntry(new Entry(new User()), 'http://0.0.0.0', [
203 'html' => str_repeat('this is my content', 325),
204 'title' => 'this is my title',
205 'url' => 'http://1.1.1.1',
206 'content_type' => 'text/html',
210 $this->assertCount(0, $entry->getTags());
213 public function testAssignTagsWithArrayAndExtraSpaces()
215 $graby = $this->getMockBuilder('Graby\Graby')
216 ->disableOriginalConstructor()
219 $tagRepo = $this->getTagRepositoryMock();
220 $proxy = new ContentProxy($graby, $this->getTaggerMock(), $tagRepo, $this->getLogger());
222 $entry = new Entry(new User());
224 $proxy->assignTagsToEntry($entry, [' tag1', 'tag2 ']);
226 $this->assertCount(2, $entry->getTags());
227 $this->assertEquals('tag1', $entry->getTags()[0]->getLabel());
228 $this->assertEquals('tag2', $entry->getTags()[1]->getLabel());
231 public function testAssignTagsWithString()
233 $graby = $this->getMockBuilder('Graby\Graby')
234 ->disableOriginalConstructor()
237 $tagRepo = $this->getTagRepositoryMock();
238 $proxy = new ContentProxy($graby, $this->getTaggerMock(), $tagRepo, $this->getLogger());
240 $entry = new Entry(new User());
242 $proxy->assignTagsToEntry($entry, 'tag1, tag2');
244 $this->assertCount(2, $entry->getTags());
245 $this->assertEquals('tag1', $entry->getTags()[0]->getLabel());
246 $this->assertEquals('tag2', $entry->getTags()[1]->getLabel());
249 public function testAssignTagsWithEmptyArray()
251 $graby = $this->getMockBuilder('Graby\Graby')
252 ->disableOriginalConstructor()
255 $tagRepo = $this->getTagRepositoryMock();
256 $proxy = new ContentProxy($graby, $this->getTaggerMock(), $tagRepo, $this->getLogger());
258 $entry = new Entry(new User());
260 $proxy->assignTagsToEntry($entry, []);
262 $this->assertCount(0, $entry->getTags());
265 public function testAssignTagsWithEmptyString()
267 $graby = $this->getMockBuilder('Graby\Graby')
268 ->disableOriginalConstructor()
271 $tagRepo = $this->getTagRepositoryMock();
272 $proxy = new ContentProxy($graby, $this->getTaggerMock(), $tagRepo, $this->getLogger());
274 $entry = new Entry(new User());
276 $proxy->assignTagsToEntry($entry, '');
278 $this->assertCount(0, $entry->getTags());
281 public function testAssignTagsAlreadyAssigned()
283 $graby = $this->getMockBuilder('Graby\Graby')
284 ->disableOriginalConstructor()
287 $tagRepo = $this->getTagRepositoryMock();
288 $proxy = new ContentProxy($graby, $this->getTaggerMock(), $tagRepo, $this->getLogger());
290 $tagEntity = new Tag();
291 $tagEntity->setLabel('tag1');
293 $entry = new Entry(new User());
294 $entry->addTag($tagEntity);
296 $proxy->assignTagsToEntry($entry, 'tag1, tag2');
298 $this->assertCount(2, $entry->getTags());
299 $this->assertEquals('tag1', $entry->getTags()[0]->getLabel());
300 $this->assertEquals('tag2', $entry->getTags()[1]->getLabel());
303 public function testAssignTagsNotFlushed()
305 $graby = $this->getMockBuilder('Graby\Graby')
306 ->disableOriginalConstructor()
309 $tagRepo = $this->getTagRepositoryMock();
310 $tagRepo->expects($this->never())
313 $proxy = new ContentProxy($graby, $this->getTaggerMock(), $tagRepo, $this->getLogger());
315 $tagEntity = new Tag();
316 $tagEntity->setLabel('tag1');
318 $entry = new Entry(new User());
320 $proxy->assignTagsToEntry($entry, 'tag1', [$tagEntity]);
322 $this->assertCount(1, $entry->getTags());
323 $this->assertEquals('tag1', $entry->getTags()[0]->getLabel());
326 private function getTaggerMock()
328 return $this->getMockBuilder('Wallabag\CoreBundle\Helper\RuleBasedTagger')
329 ->setMethods(['tag'])
330 ->disableOriginalConstructor()
334 private function getTagRepositoryMock()
336 return $this->getMockBuilder('Wallabag\CoreBundle\Repository\TagRepository')
337 ->disableOriginalConstructor()
341 private function getLogger()
343 return new NullLogger();