]> git.immae.eu Git - github/wallabag/wallabag.git/blobdiff - tests/Wallabag/CoreBundle/Helper/ContentProxyTest.php
Merge pull request #4438 from wallabag/dependabot/composer/scheb/two-factor-bundle...
[github/wallabag/wallabag.git] / tests / Wallabag / CoreBundle / Helper / ContentProxyTest.php
index 508adb1b61f62a1723cf94f1c442ae77fc99e3ca..a65ac17cf81d8bbe781cc9366514051a3dac8991 100644 (file)
@@ -12,6 +12,7 @@ use Symfony\Component\Validator\ConstraintViolationList;
 use Symfony\Component\Validator\Validator\RecursiveValidator;
 use Wallabag\CoreBundle\Entity\Entry;
 use Wallabag\CoreBundle\Helper\ContentProxy;
+use Wallabag\CoreBundle\Helper\RuleBasedIgnoreOriginProcessor;
 use Wallabag\CoreBundle\Helper\RuleBasedTagger;
 use Wallabag\UserBundle\Entity\User;
 
@@ -25,6 +26,8 @@ class ContentProxyTest extends TestCase
         $tagger->expects($this->once())
             ->method('tag');
 
+        $ruleBasedIgnoreOriginProcessor = $this->getRuleBasedIgnoreOriginProcessorMock();
+
         $graby = $this->getMockBuilder('Graby\Graby')
             ->setMethods(['fetchContent'])
             ->disableOriginalConstructor()
@@ -36,11 +39,13 @@ class ContentProxyTest extends TestCase
                 'html' => false,
                 'title' => '',
                 'url' => '',
-                'content_type' => '',
+                'headers' => [
+                    'content-type' => '',
+                ],
                 'language' => '',
             ]);
 
-        $proxy = new ContentProxy($graby, $tagger, $this->getValidator(), $this->getLogger(), $this->fetchingErrorMessage);
+        $proxy = new ContentProxy($graby, $tagger, $ruleBasedIgnoreOriginProcessor, $this->getValidator(), $this->getLogger(), $this->fetchingErrorMessage);
         $entry = new Entry(new User());
         $proxy->updateEntry($entry, 'http://user@:80');
 
@@ -60,6 +65,8 @@ class ContentProxyTest extends TestCase
         $tagger->expects($this->once())
             ->method('tag');
 
+        $ruleBasedIgnoreOriginProcessor = $this->getRuleBasedIgnoreOriginProcessorMock();
+
         $graby = $this->getMockBuilder('Graby\Graby')
             ->setMethods(['fetchContent'])
             ->disableOriginalConstructor()
@@ -71,11 +78,13 @@ class ContentProxyTest extends TestCase
                 'html' => false,
                 'title' => '',
                 'url' => '',
-                'content_type' => '',
+                'headers' => [
+                    'content-type' => '',
+                ],
                 'language' => '',
             ]);
 
-        $proxy = new ContentProxy($graby, $tagger, $this->getValidator(), $this->getLogger(), $this->fetchingErrorMessage);
+        $proxy = new ContentProxy($graby, $tagger, $ruleBasedIgnoreOriginProcessor, $this->getValidator(), $this->getLogger(), $this->fetchingErrorMessage);
         $entry = new Entry(new User());
         $proxy->updateEntry($entry, 'http://0.0.0.0');
 
@@ -95,6 +104,8 @@ class ContentProxyTest extends TestCase
         $tagger->expects($this->once())
             ->method('tag');
 
+        $ruleBasedIgnoreOriginProcessor = $this->getRuleBasedIgnoreOriginProcessorMock();
+
         $graby = $this->getMockBuilder('Graby\Graby')
             ->setMethods(['fetchContent'])
             ->disableOriginalConstructor()
@@ -104,18 +115,17 @@ class ContentProxyTest extends TestCase
             ->method('fetchContent')
             ->willReturn([
                 'html' => false,
-                'title' => '',
+                'title' => 'my title',
                 'url' => '',
-                'content_type' => '',
+                'headers' => [
+                    'content-type' => '',
+                ],
                 'language' => '',
                 'status' => '',
-                'open_graph' => [
-                    'og_title' => 'my title',
-                    'og_description' => 'desc',
-                ],
+                'description' => 'desc',
             ]);
 
-        $proxy = new ContentProxy($graby, $tagger, $this->getValidator(), $this->getLogger(), $this->fetchingErrorMessage);
+        $proxy = new ContentProxy($graby, $tagger, $ruleBasedIgnoreOriginProcessor, $this->getValidator(), $this->getLogger(), $this->fetchingErrorMessage);
         $entry = new Entry(new User());
         $proxy->updateEntry($entry, 'http://domain.io');
 
@@ -136,6 +146,10 @@ class ContentProxyTest extends TestCase
         $tagger->expects($this->once())
             ->method('tag');
 
+        $ruleBasedIgnoreOriginProcessor = $this->getRuleBasedIgnoreOriginProcessorMock();
+        $ruleBasedIgnoreOriginProcessor->expects($this->once())
+            ->method('process');
+
         $graby = $this->getMockBuilder('Graby\Graby')
             ->setMethods(['fetchContent'])
             ->disableOriginalConstructor()
@@ -147,17 +161,16 @@ class ContentProxyTest extends TestCase
                 'html' => str_repeat('this is my content', 325),
                 'title' => 'this is my title',
                 'url' => 'http://1.1.1.1',
-                'content_type' => 'text/html',
                 'language' => 'fr',
                 'status' => '200',
-                'open_graph' => [
-                    'og_title' => 'my OG title',
-                    'og_description' => 'OG desc',
-                    'og_image' => 'http://3.3.3.3/cover.jpg',
+                'description' => 'OG desc',
+                'image' => 'http://3.3.3.3/cover.jpg',
+                'headers' => [
+                    'content-type' => 'text/html',
                 ],
             ]);
 
-        $proxy = new ContentProxy($graby, $tagger, $this->getValidator(), $this->getLogger(), $this->fetchingErrorMessage);
+        $proxy = new ContentProxy($graby, $tagger, $ruleBasedIgnoreOriginProcessor, $this->getValidator(), $this->getLogger(), $this->fetchingErrorMessage);
         $entry = new Entry(new User());
         $proxy->updateEntry($entry, 'http://0.0.0.0');
 
@@ -178,6 +191,10 @@ class ContentProxyTest extends TestCase
         $tagger->expects($this->once())
             ->method('tag');
 
+        $ruleBasedIgnoreOriginProcessor = $this->getRuleBasedIgnoreOriginProcessorMock();
+        $ruleBasedIgnoreOriginProcessor->expects($this->once())
+            ->method('process');
+
         $graby = $this->getMockBuilder('Graby\Graby')
             ->setMethods(['fetchContent'])
             ->disableOriginalConstructor()
@@ -189,17 +206,16 @@ class ContentProxyTest extends TestCase
                 'html' => str_repeat('this is my content', 325),
                 'title' => 'this is my title',
                 'url' => 'http://1.1.1.1',
-                'content_type' => 'text/html',
                 'language' => 'fr',
                 'status' => '200',
-                'open_graph' => [
-                    'og_title' => 'my OG title',
-                    'og_description' => 'OG desc',
-                    'og_image' => null,
+                'description' => 'OG desc',
+                'image' => null,
+                'headers' => [
+                    'content-type' => 'text/html',
                 ],
             ]);
 
-        $proxy = new ContentProxy($graby, $tagger, $this->getValidator(), $this->getLogger(), $this->fetchingErrorMessage);
+        $proxy = new ContentProxy($graby, $tagger, $ruleBasedIgnoreOriginProcessor, $this->getValidator(), $this->getLogger(), $this->fetchingErrorMessage);
         $entry = new Entry(new User());
         $proxy->updateEntry($entry, 'http://0.0.0.0');
 
@@ -214,12 +230,104 @@ class ContentProxyTest extends TestCase
         $this->assertSame('1.1.1.1', $entry->getDomainName());
     }
 
+    public function testWithContentAndContentImage()
+    {
+        $tagger = $this->getTaggerMock();
+        $tagger->expects($this->once())
+            ->method('tag');
+
+        $ruleBasedIgnoreOriginProcessor = $this->getRuleBasedIgnoreOriginProcessorMock();
+        $ruleBasedIgnoreOriginProcessor->expects($this->once())
+            ->method('process');
+
+        $graby = $this->getMockBuilder('Graby\Graby')
+            ->setMethods(['fetchContent'])
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $graby->expects($this->any())
+            ->method('fetchContent')
+            ->willReturn([
+                'html' => "<h1>Test</h1><p><img src='http://3.3.3.3/cover.jpg'/></p>",
+                'title' => 'this is my title',
+                'url' => 'http://1.1.1.1',
+                'headers' => [
+                    'content-type' => 'text/html',
+                ],
+                'language' => 'fr',
+                'status' => '200',
+                'image' => null,
+            ]);
+
+        $proxy = new ContentProxy($graby, $tagger, $ruleBasedIgnoreOriginProcessor, $this->getValidator(), $this->getLogger(), $this->fetchingErrorMessage);
+        $entry = new Entry(new User());
+        $proxy->updateEntry($entry, 'http://0.0.0.0');
+
+        $this->assertSame('http://1.1.1.1', $entry->getUrl());
+        $this->assertSame('this is my title', $entry->getTitle());
+        $this->assertSame("<h1>Test</h1><p><img src='http://3.3.3.3/cover.jpg'/></p>", $entry->getContent());
+        $this->assertSame('http://3.3.3.3/cover.jpg', $entry->getPreviewPicture());
+        $this->assertSame('text/html', $entry->getMimetype());
+        $this->assertSame('fr', $entry->getLanguage());
+        $this->assertSame('200', $entry->getHttpStatus());
+        $this->assertSame(0.0, $entry->getReadingTime());
+        $this->assertSame('1.1.1.1', $entry->getDomainName());
+    }
+
+    public function testWithContentImageAndOgImage()
+    {
+        $tagger = $this->getTaggerMock();
+        $tagger->expects($this->once())
+            ->method('tag');
+
+        $ruleBasedIgnoreOriginProcessor = $this->getRuleBasedIgnoreOriginProcessorMock();
+        $ruleBasedIgnoreOriginProcessor->expects($this->once())
+            ->method('process');
+
+        $graby = $this->getMockBuilder('Graby\Graby')
+            ->setMethods(['fetchContent'])
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $graby->expects($this->any())
+            ->method('fetchContent')
+            ->willReturn([
+                'html' => "<h1>Test</h1><p><img src='http://3.3.3.3/nevermind.jpg'/></p>",
+                'title' => 'this is my title',
+                'url' => 'http://1.1.1.1',
+                'headers' => [
+                    'content-type' => 'text/html',
+                ],
+                'language' => 'fr',
+                'status' => '200',
+                'image' => 'http://3.3.3.3/cover.jpg',
+            ]);
+
+        $proxy = new ContentProxy($graby, $tagger, $ruleBasedIgnoreOriginProcessor, $this->getValidator(), $this->getLogger(), $this->fetchingErrorMessage);
+        $entry = new Entry(new User());
+        $proxy->updateEntry($entry, 'http://0.0.0.0');
+
+        $this->assertSame('http://1.1.1.1', $entry->getUrl());
+        $this->assertSame('this is my title', $entry->getTitle());
+        $this->assertSame("<h1>Test</h1><p><img src='http://3.3.3.3/nevermind.jpg'/></p>", $entry->getContent());
+        $this->assertSame('http://3.3.3.3/cover.jpg', $entry->getPreviewPicture());
+        $this->assertSame('text/html', $entry->getMimetype());
+        $this->assertSame('fr', $entry->getLanguage());
+        $this->assertSame('200', $entry->getHttpStatus());
+        $this->assertSame(0.0, $entry->getReadingTime());
+        $this->assertSame('1.1.1.1', $entry->getDomainName());
+    }
+
     public function testWithContentAndBadLanguage()
     {
         $tagger = $this->getTaggerMock();
         $tagger->expects($this->once())
             ->method('tag');
 
+        $ruleBasedIgnoreOriginProcessor = $this->getRuleBasedIgnoreOriginProcessorMock();
+        $ruleBasedIgnoreOriginProcessor->expects($this->once())
+            ->method('process');
+
         $validator = $this->getValidator(false);
         $validator->expects($this->once())
             ->method('validate')
@@ -236,12 +344,14 @@ class ContentProxyTest extends TestCase
                 'html' => str_repeat('this is my content', 325),
                 'title' => 'this is my title',
                 'url' => 'http://1.1.1.1',
-                'content_type' => 'text/html',
                 'language' => 'dontexist',
                 'status' => '200',
+                'headers' => [
+                    'content-type' => 'text/html',
+                ],
             ]);
 
-        $proxy = new ContentProxy($graby, $tagger, $validator, $this->getLogger(), $this->fetchingErrorMessage);
+        $proxy = new ContentProxy($graby, $tagger, $ruleBasedIgnoreOriginProcessor, $validator, $this->getLogger(), $this->fetchingErrorMessage);
         $entry = new Entry(new User());
         $proxy->updateEntry($entry, 'http://0.0.0.0');
 
@@ -261,6 +371,10 @@ class ContentProxyTest extends TestCase
         $tagger->expects($this->once())
             ->method('tag');
 
+        $ruleBasedIgnoreOriginProcessor = $this->getRuleBasedIgnoreOriginProcessorMock();
+        $ruleBasedIgnoreOriginProcessor->expects($this->once())
+            ->method('process');
+
         $validator = $this->getValidator(false);
         $validator->expects($this->exactly(2))
             ->method('validate')
@@ -280,17 +394,16 @@ class ContentProxyTest extends TestCase
                 'html' => str_repeat('this is my content', 325),
                 'title' => 'this is my title',
                 'url' => 'http://1.1.1.1',
-                'content_type' => 'text/html',
+                'headers' => [
+                    'content-type' => 'text/html',
+                ],
                 'language' => 'fr',
                 'status' => '200',
-                'open_graph' => [
-                    'og_title' => 'my OG title',
-                    'og_description' => 'OG desc',
-                    'og_image' => 'https://',
-                ],
+                'description' => 'OG desc',
+                'image' => 'https://',
             ]);
 
-        $proxy = new ContentProxy($graby, $tagger, $validator, $this->getLogger(), $this->fetchingErrorMessage);
+        $proxy = new ContentProxy($graby, $tagger, $ruleBasedIgnoreOriginProcessor, $validator, $this->getLogger(), $this->fetchingErrorMessage);
         $entry = new Entry(new User());
         $proxy->updateEntry($entry, 'http://0.0.0.0');
 
@@ -311,7 +424,11 @@ class ContentProxyTest extends TestCase
         $tagger->expects($this->once())
             ->method('tag');
 
-        $proxy = new ContentProxy((new Graby()), $tagger, $this->getValidator(), $this->getLogger(), $this->fetchingErrorMessage, true);
+        $ruleBasedIgnoreOriginProcessor = $this->getRuleBasedIgnoreOriginProcessorMock();
+        $ruleBasedIgnoreOriginProcessor->expects($this->once())
+            ->method('process');
+
+        $proxy = new ContentProxy((new Graby()), $tagger, $ruleBasedIgnoreOriginProcessor, $this->getValidator(), $this->getLogger(), $this->fetchingErrorMessage, true);
         $entry = new Entry(new User());
         $proxy->updateEntry(
             $entry,
@@ -320,12 +437,12 @@ class ContentProxyTest extends TestCase
                 'html' => str_repeat('this is my content', 325),
                 'title' => 'this is my title',
                 'url' => 'http://1.1.1.1',
-                'content_type' => 'text/html',
                 'language' => 'fr',
                 'date' => '1395635872',
                 'authors' => ['Jeremy', 'Nico', 'Thomas'],
-                'all_headers' => [
-                    'Cache-Control' => 'no-cache',
+                'headers' => [
+                    'cache-control' => 'no-cache',
+                    'content-type' => 'text/html',
                 ],
             ]
         );
@@ -351,10 +468,12 @@ class ContentProxyTest extends TestCase
         $tagger->expects($this->once())
             ->method('tag');
 
+        $ruleBasedIgnoreOriginProcessor = $this->getRuleBasedIgnoreOriginProcessorMock();
+
         $logHandler = new TestHandler();
         $logger = new Logger('test', [$logHandler]);
 
-        $proxy = new ContentProxy((new Graby()), $tagger, $this->getValidator(), $logger, $this->fetchingErrorMessage);
+        $proxy = new ContentProxy((new Graby()), $tagger, $ruleBasedIgnoreOriginProcessor, $this->getValidator(), $logger, $this->fetchingErrorMessage);
         $entry = new Entry(new User());
         $proxy->updateEntry(
             $entry,
@@ -363,9 +482,11 @@ class ContentProxyTest extends TestCase
                 'html' => str_repeat('this is my content', 325),
                 'title' => 'this is my title',
                 'url' => 'http://1.1.1.1',
-                'content_type' => 'text/html',
                 'language' => 'fr',
                 'date' => '2016-09-08T11:55:58+0200',
+                'headers' => [
+                    'content-type' => 'text/html',
+                ],
             ]
         );
 
@@ -385,11 +506,13 @@ class ContentProxyTest extends TestCase
         $tagger->expects($this->once())
             ->method('tag');
 
+        $ruleBasedIgnoreOriginProcessor = $this->getRuleBasedIgnoreOriginProcessorMock();
+
         $logger = new Logger('foo');
         $handler = new TestHandler();
         $logger->pushHandler($handler);
 
-        $proxy = new ContentProxy((new Graby()), $tagger, $this->getValidator(), $logger, $this->fetchingErrorMessage);
+        $proxy = new ContentProxy((new Graby()), $tagger, $ruleBasedIgnoreOriginProcessor, $this->getValidator(), $logger, $this->fetchingErrorMessage);
         $entry = new Entry(new User());
         $proxy->updateEntry(
             $entry,
@@ -398,9 +521,11 @@ class ContentProxyTest extends TestCase
                 'html' => str_repeat('this is my content', 325),
                 'title' => 'this is my title',
                 'url' => 'http://1.1.1.1',
-                'content_type' => 'text/html',
                 'language' => 'fr',
                 'date' => '01 02 2012',
+                'headers' => [
+                    'content-type' => 'text/html',
+                ],
             ]
         );
 
@@ -415,7 +540,7 @@ class ContentProxyTest extends TestCase
 
         $records = $handler->getRecords();
 
-        $this->assertCount(1, $records);
+        $this->assertCount(3, $records);
         $this->assertContains('Error while defining date', $records[0]['message']);
     }
 
@@ -426,7 +551,9 @@ class ContentProxyTest extends TestCase
             ->method('tag')
             ->will($this->throwException(new \Exception()));
 
-        $proxy = new ContentProxy((new Graby()), $tagger, $this->getValidator(), $this->getLogger(), $this->fetchingErrorMessage);
+        $ruleBasedIgnoreOriginProcessor = $this->getRuleBasedIgnoreOriginProcessorMock();
+
+        $proxy = new ContentProxy((new Graby()), $tagger, $ruleBasedIgnoreOriginProcessor, $this->getValidator(), $this->getLogger(), $this->fetchingErrorMessage);
         $entry = new Entry(new User());
         $proxy->updateEntry(
             $entry,
@@ -435,8 +562,10 @@ class ContentProxyTest extends TestCase
                 'html' => str_repeat('this is my content', 325),
                 'title' => 'this is my title',
                 'url' => 'http://1.1.1.1',
-                'content_type' => 'text/html',
                 'language' => 'fr',
+                'headers' => [
+                    'content-type' => 'text/html',
+                ],
             ]
         );
 
@@ -466,7 +595,9 @@ class ContentProxyTest extends TestCase
         $tagger->expects($this->once())
             ->method('tag');
 
-        $proxy = new ContentProxy((new Graby()), $tagger, $this->getValidator(), $this->getLogger(), $this->fetchingErrorMessage);
+        $ruleBasedIgnoreOriginProcessor = $this->getRuleBasedIgnoreOriginProcessorMock();
+
+        $proxy = new ContentProxy((new Graby()), $tagger, $ruleBasedIgnoreOriginProcessor, $this->getValidator(), $this->getLogger(), $this->fetchingErrorMessage);
         $entry = new Entry(new User());
         $proxy->updateEntry(
             $entry,
@@ -475,13 +606,13 @@ class ContentProxyTest extends TestCase
                 'html' => $html,
                 'title' => 'this is my title',
                 'url' => 'http://1.1.1.1',
-                'content_type' => 'text/html',
                 'language' => 'fr',
                 'status' => '200',
-                'open_graph' => [
-                    'og_title' => 'my OG title',
-                    'og_description' => 'OG desc',
-                    'og_image' => 'http://3.3.3.3/cover.jpg',
+                //'og_title' => 'my OG title',
+                'description' => 'OG desc',
+                'image' => 'http://3.3.3.3/cover.jpg',
+                'headers' => [
+                    'content-type' => 'text/html',
                 ],
             ]
         );
@@ -502,6 +633,8 @@ class ContentProxyTest extends TestCase
         $tagger->expects($this->once())
             ->method('tag');
 
+        $ruleBasedIgnoreOriginProcessor = $this->getRuleBasedIgnoreOriginProcessorMock();
+
         $graby = $this->getMockBuilder('Graby\Graby')
             ->setMethods(['fetchContent'])
             ->disableOriginalConstructor()
@@ -513,12 +646,13 @@ class ContentProxyTest extends TestCase
                 'html' => '<p><img src="http://1.1.1.1/image.jpg" /></p>',
                 'title' => 'this is my title',
                 'url' => 'http://1.1.1.1/image.jpg',
-                'content_type' => 'image/jpeg',
                 'status' => '200',
-                'open_graph' => [],
+                'headers' => [
+                    'content-type' => 'image/jpeg',
+                ],
             ]);
 
-        $proxy = new ContentProxy($graby, $tagger, $this->getValidator(), $this->getLogger(), $this->fetchingErrorMessage);
+        $proxy = new ContentProxy($graby, $tagger, $ruleBasedIgnoreOriginProcessor, $this->getValidator(), $this->getLogger(), $this->fetchingErrorMessage);
         $entry = new Entry(new User());
         $proxy->updateEntry($entry, 'http://0.0.0.0');
 
@@ -542,6 +676,8 @@ class ContentProxyTest extends TestCase
         $tagger->expects($this->once())
             ->method('tag');
 
+        $ruleBasedIgnoreOriginProcessor = $this->getRuleBasedIgnoreOriginProcessorMock();
+
         $graby = $this->getMockBuilder('Graby\Graby')
             ->setMethods(['fetchContent'])
             ->disableOriginalConstructor()
@@ -553,11 +689,13 @@ class ContentProxyTest extends TestCase
                 'html' => false,
                 'title' => $actualTitle,
                 'url' => '',
-                'content_type' => 'text/html',
+                'headers' => [
+                    'content-type' => 'text/html',
+                ],
                 'language' => '',
             ]);
 
-        $proxy = new ContentProxy($graby, $tagger, $this->getValidator(), $this->getLogger(), $this->fetchingErrorMessage);
+        $proxy = new ContentProxy($graby, $tagger, $ruleBasedIgnoreOriginProcessor, $this->getValidator(), $this->getLogger(), $this->fetchingErrorMessage);
         $entry = new Entry(new User());
         $proxy->updateEntry($entry, 'http://0.0.0.0');
 
@@ -577,6 +715,8 @@ class ContentProxyTest extends TestCase
         $tagger->expects($this->once())
             ->method('tag');
 
+        $ruleBasedIgnoreOriginProcessor = $this->getRuleBasedIgnoreOriginProcessorMock();
+
         $graby = $this->getMockBuilder('Graby\Graby')
             ->setMethods(['fetchContent'])
             ->disableOriginalConstructor()
@@ -588,11 +728,13 @@ class ContentProxyTest extends TestCase
                 'html' => false,
                 'title' => $actualTitle,
                 'url' => '',
-                'content_type' => 'text/html',
+                'headers' => [
+                    'content-type' => 'text/html',
+                ],
                 'language' => '',
             ]);
 
-        $proxy = new ContentProxy($graby, $tagger, $this->getValidator(), $this->getLogger(), $this->fetchingErrorMessage);
+        $proxy = new ContentProxy($graby, $tagger, $ruleBasedIgnoreOriginProcessor, $this->getValidator(), $this->getLogger(), $this->fetchingErrorMessage);
         $entry = new Entry(new User());
         $proxy->updateEntry($entry, 'http://0.0.0.0');
 
@@ -611,6 +753,8 @@ class ContentProxyTest extends TestCase
         $tagger->expects($this->once())
             ->method('tag');
 
+        $ruleBasedIgnoreOriginProcessor = $this->getRuleBasedIgnoreOriginProcessorMock();
+
         $graby = $this->getMockBuilder('Graby\Graby')
             ->setMethods(['fetchContent'])
             ->disableOriginalConstructor()
@@ -622,11 +766,13 @@ class ContentProxyTest extends TestCase
                 'html' => false,
                 'title' => $actualTitle,
                 'url' => '',
-                'content_type' => 'application/pdf',
+                'headers' => [
+                    'content-type' => 'application/pdf',
+                ],
                 'language' => '',
             ]);
 
-        $proxy = new ContentProxy($graby, $tagger, $this->getValidator(), $this->getLogger(), $this->fetchingErrorMessage);
+        $proxy = new ContentProxy($graby, $tagger, $ruleBasedIgnoreOriginProcessor, $this->getValidator(), $this->getLogger(), $this->fetchingErrorMessage);
         $entry = new Entry(new User());
         $proxy->updateEntry($entry, 'http://0.0.0.0');
 
@@ -645,6 +791,8 @@ class ContentProxyTest extends TestCase
         $tagger->expects($this->once())
             ->method('tag');
 
+        $ruleBasedIgnoreOriginProcessor = $this->getRuleBasedIgnoreOriginProcessorMock();
+
         $graby = $this->getMockBuilder('Graby\Graby')
             ->setMethods(['fetchContent'])
             ->disableOriginalConstructor()
@@ -656,11 +804,13 @@ class ContentProxyTest extends TestCase
                 'html' => false,
                 'title' => $actualTitle,
                 'url' => '',
-                'content_type' => 'application/pdf',
+                'headers' => [
+                    'content-type' => 'application/pdf',
+                ],
                 'language' => '',
             ]);
 
-        $proxy = new ContentProxy($graby, $tagger, $this->getValidator(), $this->getLogger(), $this->fetchingErrorMessage);
+        $proxy = new ContentProxy($graby, $tagger, $ruleBasedIgnoreOriginProcessor, $this->getValidator(), $this->getLogger(), $this->fetchingErrorMessage);
         $entry = new Entry(new User());
         $proxy->updateEntry($entry, 'http://0.0.0.0');
 
@@ -679,6 +829,8 @@ class ContentProxyTest extends TestCase
         $tagger->expects($this->once())
             ->method('tag');
 
+        $ruleBasedIgnoreOriginProcessor = $this->getRuleBasedIgnoreOriginProcessorMock();
+
         $graby = $this->getMockBuilder('Graby\Graby')
             ->setMethods(['fetchContent'])
             ->disableOriginalConstructor()
@@ -690,11 +842,13 @@ class ContentProxyTest extends TestCase
                 'html' => false,
                 'title' => $actualTitle,
                 'url' => '',
-                'content_type' => 'application/pdf',
+                'headers' => [
+                    'content-type' => 'application/pdf',
+                ],
                 'language' => '',
             ]);
 
-        $proxy = new ContentProxy($graby, $tagger, $this->getValidator(), $this->getLogger(), $this->fetchingErrorMessage);
+        $proxy = new ContentProxy($graby, $tagger, $ruleBasedIgnoreOriginProcessor, $this->getValidator(), $this->getLogger(), $this->fetchingErrorMessage);
         $entry = new Entry(new User());
         $proxy->updateEntry($entry, 'http://0.0.0.0');
 
@@ -714,6 +868,8 @@ class ContentProxyTest extends TestCase
         $tagger->expects($this->once())
             ->method('tag');
 
+        $ruleBasedIgnoreOriginProcessor = $this->getRuleBasedIgnoreOriginProcessorMock();
+
         $graby = $this->getMockBuilder('Graby\Graby')
             ->setMethods(['fetchContent'])
             ->disableOriginalConstructor()
@@ -725,11 +881,13 @@ class ContentProxyTest extends TestCase
                 'html' => false,
                 'title' => $actualTitle,
                 'url' => '',
-                'content_type' => 'application/pdf',
+                'headers' => [
+                    'content-type' => 'application/pdf',
+                ],
                 'language' => '',
             ]);
 
-        $proxy = new ContentProxy($graby, $tagger, $this->getValidator(), $this->getLogger(), $this->fetchingErrorMessage);
+        $proxy = new ContentProxy($graby, $tagger, $ruleBasedIgnoreOriginProcessor, $this->getValidator(), $this->getLogger(), $this->fetchingErrorMessage);
         $entry = new Entry(new User());
         $proxy->updateEntry($entry, 'http://0.0.0.0');
 
@@ -749,6 +907,7 @@ class ContentProxyTest extends TestCase
      * $expected_entry_url
      * $expected_origin_url
      * $expected_domain
+     * $processor_result
      */
     public function dataForChangedUrl()
     {
@@ -760,6 +919,7 @@ class ContentProxyTest extends TestCase
                 'http://1.1.1.1',
                 'http://0.0.0.0',
                 '1.1.1.1',
+                false,
             ],
             'origin already set' => [
                 'http://0.0.0.0',
@@ -768,6 +928,7 @@ class ContentProxyTest extends TestCase
                 'http://1.1.1.1',
                 'http://hello',
                 '1.1.1.1',
+                false,
             ],
             'trailing slash' => [
                 'https://example.com/hello-world',
@@ -776,6 +937,7 @@ class ContentProxyTest extends TestCase
                 'https://example.com/hello-world/',
                 null,
                 'example.com',
+                false,
             ],
             'query string in fetched content' => [
                 'https://example.org/hello',
@@ -784,6 +946,7 @@ class ContentProxyTest extends TestCase
                 'https://example.org/hello?world=1',
                 'https://example.org/hello',
                 'example.org',
+                false,
             ],
             'fragment in fetched content' => [
                 'https://example.org/hello',
@@ -792,6 +955,7 @@ class ContentProxyTest extends TestCase
                 'https://example.org/hello',
                 null,
                 'example.org',
+                false,
             ],
             'fragment and query string in fetched content' => [
                 'https://example.org/hello',
@@ -800,6 +964,7 @@ class ContentProxyTest extends TestCase
                 'https://example.org/hello?foo#world',
                 'https://example.org/hello',
                 'example.org',
+                false,
             ],
             'different path and query string in fetch content' => [
                 'https://example.org/hello',
@@ -808,6 +973,7 @@ class ContentProxyTest extends TestCase
                 'https://example.org/world?foo',
                 'https://example.org/hello',
                 'example.org',
+                false,
             ],
             'feedproxy ignore list test' => [
                 'http://feedproxy.google.com/~r/Wallabag/~3/helloworld',
@@ -816,6 +982,7 @@ class ContentProxyTest extends TestCase
                 'https://example.org/hello-wallabag',
                 null,
                 'example.org',
+                true,
             ],
             'feedproxy ignore list test with origin url already set' => [
                 'http://feedproxy.google.com/~r/Wallabag/~3/helloworld',
@@ -824,6 +991,7 @@ class ContentProxyTest extends TestCase
                 'https://example.org/hello-wallabag',
                 'https://example.org/this-is-source',
                 'example.org',
+                true,
             ],
             'lemonde ignore pattern test' => [
                 'http://www.lemonde.fr/tiny/url',
@@ -832,6 +1000,7 @@ class ContentProxyTest extends TestCase
                 'http://example.com/hello-world',
                 null,
                 'example.com',
+                true,
             ],
         ];
     }
@@ -839,13 +1008,18 @@ class ContentProxyTest extends TestCase
     /**
      * @dataProvider dataForChangedUrl
      */
-    public function testWithChangedUrl($entry_url, $origin_url, $content_url, $expected_entry_url, $expected_origin_url, $expected_domain)
+    public function testWithChangedUrl($entry_url, $origin_url, $content_url, $expected_entry_url, $expected_origin_url, $expected_domain, $processor_result)
     {
         $tagger = $this->getTaggerMock();
         $tagger->expects($this->once())
             ->method('tag');
 
-        $proxy = new ContentProxy((new Graby()), $tagger, $this->getValidator(), $this->getLogger(), $this->fetchingErrorMessage, true);
+        $ruleBasedIgnoreOriginProcessor = $this->getRuleBasedIgnoreOriginProcessorMock();
+        $ruleBasedIgnoreOriginProcessor->expects($this->once())
+            ->method('process')
+            ->willReturn($processor_result);
+
+        $proxy = new ContentProxy((new Graby()), $tagger, $ruleBasedIgnoreOriginProcessor, $this->getValidator(), $this->getLogger(), $this->fetchingErrorMessage, true);
         $entry = new Entry(new User());
         $entry->setOriginUrl($origin_url);
         $proxy->updateEntry(
@@ -855,7 +1029,9 @@ class ContentProxyTest extends TestCase
                 'html' => false,
                 'title' => '',
                 'url' => $content_url,
-                'content_type' => '',
+                'headers' => [
+                    'content-type' => '',
+                ],
                 'language' => '',
             ],
             true
@@ -886,7 +1062,9 @@ class ContentProxyTest extends TestCase
     }
 
     /**
-     * https://stackoverflow.com/a/18506801.
+     * Convert hex to string.
+     *
+     * @see https://stackoverflow.com/a/18506801
      *
      * @param $hex
      *
@@ -910,6 +1088,14 @@ class ContentProxyTest extends TestCase
             ->getMock();
     }
 
+    private function getRuleBasedIgnoreOriginProcessorMock()
+    {
+        return $this->getMockBuilder(RuleBasedIgnoreOriginProcessor::class)
+            ->setMethods(['process'])
+            ->disableOriginalConstructor()
+            ->getMock();
+    }
+
     private function getLogger()
     {
         return new NullLogger();