]>
Commit | Line | Data |
---|---|---|
7f559418 JB |
1 | <?php |
2 | ||
3 | namespace Tests\Wallabag\CoreBundle\Helper; | |
4 | ||
7f559418 | 5 | use GuzzleHttp\Client; |
7f559418 JB |
6 | use GuzzleHttp\Message\Response; |
7 | use GuzzleHttp\Stream\Stream; | |
f808b016 JB |
8 | use GuzzleHttp\Subscriber\Mock; |
9 | use Monolog\Handler\TestHandler; | |
10 | use Monolog\Logger; | |
11 | use Wallabag\CoreBundle\Helper\DownloadImages; | |
7f559418 JB |
12 | |
13 | class 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&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 | } |