]> git.immae.eu Git - github/wallabag/wallabag.git/blame - tests/Wallabag/CoreBundle/Helper/DownloadImagesTest.php
Add a real configuration for CS-Fixer
[github/wallabag/wallabag.git] / tests / Wallabag / CoreBundle / Helper / DownloadImagesTest.php
CommitLineData
7f559418
JB
1<?php
2
3namespace Tests\Wallabag\CoreBundle\Helper;
4
7f559418 5use GuzzleHttp\Client;
7f559418
JB
6use GuzzleHttp\Message\Response;
7use GuzzleHttp\Stream\Stream;
f808b016
JB
8use GuzzleHttp\Subscriber\Mock;
9use Monolog\Handler\TestHandler;
10use Monolog\Logger;
11use Wallabag\CoreBundle\Helper\DownloadImages;
7f559418
JB
12
13class DownloadImagesTest extends \PHPUnit_Framework_TestCase
14{
fcad69a4
JB
15 public function dataForSuccessImage()
16 {
17 return [
18 'imgur' => [
19 '<div><img src="http://i.imgur.com/T9qgcHc.jpg" /></div>',
20 'http://imgur.com/gallery/WxtWY',
21 ],
22 'image with &' => [
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&amp;ssl=1" /></div>',
24 'https://www.tvaddons.ag/realdebrid-kodi-jarvis/',
25 ],
26 ];
27 }
28
29 /**
30 * @dataProvider dataForSuccessImage
31 */
32 public function testProcessHtml($html, $url)
7f559418
JB
33 {
34 $client = new Client();
35
36 $mock = new Mock([
f808b016 37 new Response(200, ['content-type' => 'image/png'], Stream::factory(file_get_contents(__DIR__ . '/../fixtures/unnamed.png'))),
7f559418
JB
38 ]);
39
40 $client->getEmitter()->attach($mock);
41
42 $logHandler = new TestHandler();
f808b016 43 $logger = new Logger('test', [$logHandler]);
7f559418 44
f808b016 45 $download = new DownloadImages($client, sys_get_temp_dir() . '/wallabag_test', 'http://wallabag.io/', $logger);
41ada277 46
fcad69a4 47 $res = $download->processHtml(123, $html, $url);
7f559418 48
fcad69a4
JB
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);
7f559418
JB
51 }
52
53 public function testProcessHtmlWithBadImage()
54 {
55 $client = new Client();
56
57 $mock = new Mock([
58 new Response(200, ['content-type' => 'application/json'], Stream::factory('')),
59 ]);
60
61 $client->getEmitter()->attach($mock);
62
63 $logHandler = new TestHandler();
f808b016 64 $logger = new Logger('test', [$logHandler]);
7f559418 65
f808b016 66 $download = new DownloadImages($client, sys_get_temp_dir() . '/wallabag_test', 'http://wallabag.io/', $logger);
e0597476 67 $res = $download->processHtml(123, '<div><img src="http://i.imgur.com/T9qgcHc.jpg" /></div>', 'http://imgur.com/gallery/WxtWY');
7f559418
JB
68
69 $this->assertContains('http://i.imgur.com/T9qgcHc.jpg', $res, 'Image were not replace because of content-type');
70 }
71
72 public function singleImage()
73 {
74 return [
75 ['image/pjpeg', 'jpeg'],
76 ['image/jpeg', 'jpeg'],
77 ['image/png', 'png'],
78 ['image/gif', 'gif'],
79 ];
80 }
81
82 /**
83 * @dataProvider singleImage
84 */
85 public function testProcessSingleImage($header, $extension)
86 {
87 $client = new Client();
88
89 $mock = new Mock([
f808b016 90 new Response(200, ['content-type' => $header], Stream::factory(file_get_contents(__DIR__ . '/../fixtures/unnamed.png'))),
7f559418
JB
91 ]);
92
93 $client->getEmitter()->attach($mock);
94
95 $logHandler = new TestHandler();
f808b016 96 $logger = new Logger('test', [$logHandler]);
7f559418 97
f808b016 98 $download = new DownloadImages($client, sys_get_temp_dir() . '/wallabag_test', 'http://wallabag.io/', $logger);
e0597476 99 $res = $download->processSingleImage(123, 'T9qgcHc.jpg', 'http://imgur.com/gallery/WxtWY');
7f559418 100
f808b016 101 $this->assertContains('/assets/images/9/b/9b0ead26/ebe60399.' . $extension, $res);
7f559418
JB
102 }
103
48656e0e
JB
104 public function testProcessSingleImageWithBadUrl()
105 {
106 $client = new Client();
107
108 $mock = new Mock([
109 new Response(404, []),
110 ]);
111
112 $client->getEmitter()->attach($mock);
113
114 $logHandler = new TestHandler();
f808b016 115 $logger = new Logger('test', [$logHandler]);
48656e0e 116
f808b016 117 $download = new DownloadImages($client, sys_get_temp_dir() . '/wallabag_test', 'http://wallabag.io/', $logger);
e0597476 118 $res = $download->processSingleImage(123, 'T9qgcHc.jpg', 'http://imgur.com/gallery/WxtWY');
48656e0e
JB
119
120 $this->assertFalse($res, 'Image can not be found, so it will not be replaced');
121 }
122
7f559418
JB
123 public function testProcessSingleImageWithBadImage()
124 {
125 $client = new Client();
126
127 $mock = new Mock([
128 new Response(200, ['content-type' => 'image/png'], Stream::factory('')),
129 ]);
130
131 $client->getEmitter()->attach($mock);
132
133 $logHandler = new TestHandler();
f808b016 134 $logger = new Logger('test', [$logHandler]);
7f559418 135
f808b016 136 $download = new DownloadImages($client, sys_get_temp_dir() . '/wallabag_test', 'http://wallabag.io/', $logger);
e0597476 137 $res = $download->processSingleImage(123, 'http://i.imgur.com/T9qgcHc.jpg', 'http://imgur.com/gallery/WxtWY');
7f559418
JB
138
139 $this->assertFalse($res, 'Image can not be loaded, so it will not be replaced');
140 }
141
142 public function testProcessSingleImageFailAbsolute()
143 {
144 $client = new Client();
145
146 $mock = new Mock([
f808b016 147 new Response(200, ['content-type' => 'image/png'], Stream::factory(file_get_contents(__DIR__ . '/../fixtures/unnamed.png'))),
7f559418
JB
148 ]);
149
150 $client->getEmitter()->attach($mock);
151
152 $logHandler = new TestHandler();
f808b016 153 $logger = new Logger('test', [$logHandler]);
7f559418 154
f808b016 155 $download = new DownloadImages($client, sys_get_temp_dir() . '/wallabag_test', 'http://wallabag.io/', $logger);
e0597476 156 $res = $download->processSingleImage(123, '/i.imgur.com/T9qgcHc.jpg', 'imgur.com/gallery/WxtWY');
7f559418
JB
157
158 $this->assertFalse($res, 'Absolute image can not be determined, so it will not be replaced');
159 }
577c0b6d
JB
160
161 public function testProcessRealImage()
162 {
163 $client = new Client();
164
165 $mock = new Mock([
f808b016 166 new Response(200, ['content-type' => null], Stream::factory(file_get_contents(__DIR__ . '/../fixtures/image-no-content-type.jpg'))),
577c0b6d
JB
167 ]);
168
169 $client->getEmitter()->attach($mock);
170
171 $logHandler = new TestHandler();
f808b016 172 $logger = new Logger('test', [$logHandler]);
577c0b6d 173
f808b016 174 $download = new DownloadImages($client, sys_get_temp_dir() . '/wallabag_test', 'http://wallabag.io/', $logger);
577c0b6d
JB
175
176 $res = $download->processSingleImage(
177 123,
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'
180 );
181
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']);
184 }
7f559418 185}