3 namespace Tests\Wallabag\CoreBundle\Helper
;
6 use GuzzleHttp\Message\Response
;
7 use GuzzleHttp\Stream\Stream
;
8 use GuzzleHttp\Subscriber\Mock
;
9 use Monolog\Handler\TestHandler
;
11 use Wallabag\CoreBundle\Helper\DownloadImages
;
13 class DownloadImagesTest
extends \PHPUnit_Framework_TestCase
15 public function dataForSuccessImage()
19 '<div><img src="http://i.imgur.com/T9qgcHc.jpg" /></div>',
20 'http://imgur.com/gallery/WxtWY',
23 '<div><img src="https://i2.wp.com/www.tvaddons.ag/wp-content/uploads/2017/01/Screen-Shot-2017-01-07-at-10.17.40-PM.jpg?w=640&ssl=1" /></div>',
24 'https://www.tvaddons.ag/realdebrid-kodi-jarvis/',
30 * @dataProvider dataForSuccessImage
32 public function testProcessHtml($html, $url)
34 $client = new Client();
37 new Response(200, ['content-type' => 'image/png'], Stream
::factory(file_get_contents(__DIR__
. '/../fixtures/unnamed.png'))),
40 $client->getEmitter()->attach($mock);
42 $logHandler = new TestHandler();
43 $logger = new Logger('test', [$logHandler]);
45 $download = new DownloadImages($client, sys_get_temp_dir() . '/wallabag_test', 'http://wallabag.io/', $logger);
47 $res = $download->processHtml(123, $html, $url);
49 // this the base path of all image (since it's calculated using the entry id: 123)
50 $this->assertContains('http://wallabag.io/assets/images/9/b/9b0ead26/', $res);
53 public function testProcessHtmlWithBadImage()
55 $client = new Client();
58 new Response(200, ['content-type' => 'application/json'], Stream
::factory('')),
61 $client->getEmitter()->attach($mock);
63 $logHandler = new TestHandler();
64 $logger = new Logger('test', [$logHandler]);
66 $download = new DownloadImages($client, sys_get_temp_dir() . '/wallabag_test', 'http://wallabag.io/', $logger);
67 $res = $download->processHtml(123, '<div><img src="http://i.imgur.com/T9qgcHc.jpg" /></div>', 'http://imgur.com/gallery/WxtWY');
69 $this->assertContains('http://i.imgur.com/T9qgcHc.jpg', $res, 'Image were not replace because of content-type');
72 public function singleImage()
75 ['image/pjpeg', 'jpeg'],
76 ['image/jpeg', 'jpeg'],
83 * @dataProvider singleImage
85 public function testProcessSingleImage($header, $extension)
87 $client = new Client();
90 new Response(200, ['content-type' => $header], Stream
::factory(file_get_contents(__DIR__
. '/../fixtures/unnamed.png'))),
93 $client->getEmitter()->attach($mock);
95 $logHandler = new TestHandler();
96 $logger = new Logger('test', [$logHandler]);
98 $download = new DownloadImages($client, sys_get_temp_dir() . '/wallabag_test', 'http://wallabag.io/', $logger);
99 $res = $download->processSingleImage(123, 'T9qgcHc.jpg', 'http://imgur.com/gallery/WxtWY');
101 $this->assertContains('/assets/images/9/b/9b0ead26/ebe60399.' . $extension, $res);
104 public function testProcessSingleImageWithBadUrl()
106 $client = new Client();
109 new Response(404, []),
112 $client->getEmitter()->attach($mock);
114 $logHandler = new TestHandler();
115 $logger = new Logger('test', [$logHandler]);
117 $download = new DownloadImages($client, sys_get_temp_dir() . '/wallabag_test', 'http://wallabag.io/', $logger);
118 $res = $download->processSingleImage(123, 'T9qgcHc.jpg', 'http://imgur.com/gallery/WxtWY');
120 $this->assertFalse($res, 'Image can not be found, so it will not be replaced');
123 public function testProcessSingleImageWithBadImage()
125 $client = new Client();
128 new Response(200, ['content-type' => 'image/png'], Stream
::factory('')),
131 $client->getEmitter()->attach($mock);
133 $logHandler = new TestHandler();
134 $logger = new Logger('test', [$logHandler]);
136 $download = new DownloadImages($client, sys_get_temp_dir() . '/wallabag_test', 'http://wallabag.io/', $logger);
137 $res = $download->processSingleImage(123, 'http://i.imgur.com/T9qgcHc.jpg', 'http://imgur.com/gallery/WxtWY');
139 $this->assertFalse($res, 'Image can not be loaded, so it will not be replaced');
142 public function testProcessSingleImageFailAbsolute()
144 $client = new Client();
147 new Response(200, ['content-type' => 'image/png'], Stream
::factory(file_get_contents(__DIR__
. '/../fixtures/unnamed.png'))),
150 $client->getEmitter()->attach($mock);
152 $logHandler = new TestHandler();
153 $logger = new Logger('test', [$logHandler]);
155 $download = new DownloadImages($client, sys_get_temp_dir() . '/wallabag_test', 'http://wallabag.io/', $logger);
156 $res = $download->processSingleImage(123, '/i.imgur.com/T9qgcHc.jpg', 'imgur.com/gallery/WxtWY');
158 $this->assertFalse($res, 'Absolute image can not be determined, so it will not be replaced');
161 public function testProcessRealImage()
163 $client = new Client();
166 new Response(200, ['content-type' => null], Stream
::factory(file_get_contents(__DIR__
. '/../fixtures/image-no-content-type.jpg'))),
169 $client->getEmitter()->attach($mock);
171 $logHandler = new TestHandler();
172 $logger = new Logger('test', [$logHandler]);
174 $download = new DownloadImages($client, sys_get_temp_dir() . '/wallabag_test', 'http://wallabag.io/', $logger);
176 $res = $download->processSingleImage(
178 'https://cdn.theconversation.com/files/157200/article/width926/gsj2rjp2-1487348607.jpg',
179 'https://theconversation.com/conversation-avec-gerald-bronner-ce-nest-pas-la-post-verite-qui-nous-menace-mais-lextension-de-notre-credulite-73089'
182 $this->assertContains('http://wallabag.io/assets/images/9/b/9b0ead26/', $res, 'Content-Type was empty but data is ok for an image');
183 $this->assertContains('DownloadImages: Checking extension (alternative)', $logHandler->getRecords()[3]['message']);