diff options
author | ArthurHoaro <arthur@hoa.ro> | 2020-10-15 11:46:24 +0200 |
---|---|---|
committer | ArthurHoaro <arthur@hoa.ro> | 2020-10-20 10:15:18 +0200 |
commit | 21e72da9ee34cec56b10c83ae0c75b4bf320dfcb (patch) | |
tree | b6c0b8208f004e1b2b37b1af54e8d4c40310d56e /tests/front/controller | |
parent | 9b3c1270bcbe4f8e30e0160da8badd43dd94871a (diff) | |
download | Shaarli-21e72da9ee34cec56b10c83ae0c75b4bf320dfcb.tar.gz Shaarli-21e72da9ee34cec56b10c83ae0c75b4bf320dfcb.tar.zst Shaarli-21e72da9ee34cec56b10c83ae0c75b4bf320dfcb.zip |
Asynchronous retrieval of bookmark's thumbnails
This feature is based general.enable_async_metadata setting and works with existing metadata.js file.
The script is compatible with any template:
- the thumbnail div bloc must have attribute
- the bookmark bloc must have attribute with the bookmark ID as value
Fixes #1564
Diffstat (limited to 'tests/front/controller')
3 files changed, 114 insertions, 8 deletions
diff --git a/tests/front/controller/admin/ManageShaareControllerTest/DisplayCreateFormTest.php b/tests/front/controller/admin/ManageShaareControllerTest/DisplayCreateFormTest.php index 4fd88480..eafa54eb 100644 --- a/tests/front/controller/admin/ManageShaareControllerTest/DisplayCreateFormTest.php +++ b/tests/front/controller/admin/ManageShaareControllerTest/DisplayCreateFormTest.php | |||
@@ -144,12 +144,14 @@ class DisplayCreateFormTest extends TestCase | |||
144 | 144 | ||
145 | // Make sure that PluginManager hook is triggered | 145 | // Make sure that PluginManager hook is triggered |
146 | $this->container->pluginManager | 146 | $this->container->pluginManager |
147 | ->expects(static::at(0)) | 147 | ->expects(static::atLeastOnce()) |
148 | ->method('executeHooks') | 148 | ->method('executeHooks') |
149 | ->withConsecutive(['render_editlink'], ['render_includes']) | ||
149 | ->willReturnCallback(function (string $hook, array $data): array { | 150 | ->willReturnCallback(function (string $hook, array $data): array { |
150 | static::assertSame('render_editlink', $hook); | 151 | if ('render_editlink' === $hook) { |
151 | static::assertSame('', $data['link']['title']); | 152 | static::assertSame('', $data['link']['title']); |
152 | static::assertSame('', $data['link']['description']); | 153 | static::assertSame('', $data['link']['description']); |
154 | } | ||
153 | 155 | ||
154 | return $data; | 156 | return $data; |
155 | }) | 157 | }) |
diff --git a/tests/front/controller/admin/ManageShaareControllerTest/SaveBookmarkTest.php b/tests/front/controller/admin/ManageShaareControllerTest/SaveBookmarkTest.php index 37542c26..1adeef5a 100644 --- a/tests/front/controller/admin/ManageShaareControllerTest/SaveBookmarkTest.php +++ b/tests/front/controller/admin/ManageShaareControllerTest/SaveBookmarkTest.php | |||
@@ -209,7 +209,7 @@ class SaveBookmarkTest extends TestCase | |||
209 | /** | 209 | /** |
210 | * Test save a bookmark - try to retrieve the thumbnail | 210 | * Test save a bookmark - try to retrieve the thumbnail |
211 | */ | 211 | */ |
212 | public function testSaveBookmarkWithThumbnail(): void | 212 | public function testSaveBookmarkWithThumbnailSync(): void |
213 | { | 213 | { |
214 | $parameters = ['lf_url' => 'http://url.tld/other?part=3#hash']; | 214 | $parameters = ['lf_url' => 'http://url.tld/other?part=3#hash']; |
215 | 215 | ||
@@ -224,7 +224,13 @@ class SaveBookmarkTest extends TestCase | |||
224 | 224 | ||
225 | $this->container->conf = $this->createMock(ConfigManager::class); | 225 | $this->container->conf = $this->createMock(ConfigManager::class); |
226 | $this->container->conf->method('get')->willReturnCallback(function (string $key, $default) { | 226 | $this->container->conf->method('get')->willReturnCallback(function (string $key, $default) { |
227 | return $key === 'thumbnails.mode' ? Thumbnailer::MODE_ALL : $default; | 227 | if ($key === 'thumbnails.mode') { |
228 | return Thumbnailer::MODE_ALL; | ||
229 | } elseif ($key === 'general.enable_async_metadata') { | ||
230 | return false; | ||
231 | } | ||
232 | |||
233 | return $default; | ||
228 | }); | 234 | }); |
229 | 235 | ||
230 | $this->container->thumbnailer = $this->createMock(Thumbnailer::class); | 236 | $this->container->thumbnailer = $this->createMock(Thumbnailer::class); |
@@ -275,6 +281,51 @@ class SaveBookmarkTest extends TestCase | |||
275 | } | 281 | } |
276 | 282 | ||
277 | /** | 283 | /** |
284 | * Test save a bookmark - do not attempt to retrieve thumbnails if async mode is enabled. | ||
285 | */ | ||
286 | public function testSaveBookmarkWithThumbnailAsync(): void | ||
287 | { | ||
288 | $parameters = ['lf_url' => 'http://url.tld/other?part=3#hash']; | ||
289 | |||
290 | $request = $this->createMock(Request::class); | ||
291 | $request | ||
292 | ->method('getParam') | ||
293 | ->willReturnCallback(function (string $key) use ($parameters): ?string { | ||
294 | return $parameters[$key] ?? null; | ||
295 | }) | ||
296 | ; | ||
297 | $response = new Response(); | ||
298 | |||
299 | $this->container->conf = $this->createMock(ConfigManager::class); | ||
300 | $this->container->conf->method('get')->willReturnCallback(function (string $key, $default) { | ||
301 | if ($key === 'thumbnails.mode') { | ||
302 | return Thumbnailer::MODE_ALL; | ||
303 | } elseif ($key === 'general.enable_async_metadata') { | ||
304 | return true; | ||
305 | } | ||
306 | |||
307 | return $default; | ||
308 | }); | ||
309 | |||
310 | $this->container->thumbnailer = $this->createMock(Thumbnailer::class); | ||
311 | $this->container->thumbnailer->expects(static::never())->method('get'); | ||
312 | |||
313 | $this->container->bookmarkService | ||
314 | ->expects(static::once()) | ||
315 | ->method('addOrSet') | ||
316 | ->willReturnCallback(function (Bookmark $bookmark): Bookmark { | ||
317 | static::assertNull($bookmark->getThumbnail()); | ||
318 | |||
319 | return $bookmark; | ||
320 | }) | ||
321 | ; | ||
322 | |||
323 | $result = $this->controller->save($request, $response); | ||
324 | |||
325 | static::assertSame(302, $result->getStatusCode()); | ||
326 | } | ||
327 | |||
328 | /** | ||
278 | * Change the password with a wrong existing password | 329 | * Change the password with a wrong existing password |
279 | */ | 330 | */ |
280 | public function testSaveBookmarkFromBookmarklet(): void | 331 | public function testSaveBookmarkFromBookmarklet(): void |
diff --git a/tests/front/controller/visitor/BookmarkListControllerTest.php b/tests/front/controller/visitor/BookmarkListControllerTest.php index 0c95df97..5ca92507 100644 --- a/tests/front/controller/visitor/BookmarkListControllerTest.php +++ b/tests/front/controller/visitor/BookmarkListControllerTest.php | |||
@@ -307,7 +307,13 @@ class BookmarkListControllerTest extends TestCase | |||
307 | $this->container->conf | 307 | $this->container->conf |
308 | ->method('get') | 308 | ->method('get') |
309 | ->willReturnCallback(function (string $key, $default) { | 309 | ->willReturnCallback(function (string $key, $default) { |
310 | return $key === 'thumbnails.mode' ? Thumbnailer::MODE_ALL : $default; | 310 | if ($key === 'thumbnails.mode') { |
311 | return Thumbnailer::MODE_ALL; | ||
312 | } elseif ($key === 'general.enable_async_metadata') { | ||
313 | return false; | ||
314 | } | ||
315 | |||
316 | return $default; | ||
311 | }) | 317 | }) |
312 | ; | 318 | ; |
313 | 319 | ||
@@ -357,7 +363,13 @@ class BookmarkListControllerTest extends TestCase | |||
357 | $this->container->conf | 363 | $this->container->conf |
358 | ->method('get') | 364 | ->method('get') |
359 | ->willReturnCallback(function (string $key, $default) { | 365 | ->willReturnCallback(function (string $key, $default) { |
360 | return $key === 'thumbnails.mode' ? Thumbnailer::MODE_ALL : $default; | 366 | if ($key === 'thumbnails.mode') { |
367 | return Thumbnailer::MODE_ALL; | ||
368 | } elseif ($key === 'general.enable_async_metadata') { | ||
369 | return false; | ||
370 | } | ||
371 | |||
372 | return $default; | ||
361 | }) | 373 | }) |
362 | ; | 374 | ; |
363 | 375 | ||
@@ -379,6 +391,47 @@ class BookmarkListControllerTest extends TestCase | |||
379 | } | 391 | } |
380 | 392 | ||
381 | /** | 393 | /** |
394 | * Test getting a permalink with thumbnail update with async setting: no update should run. | ||
395 | */ | ||
396 | public function testThumbnailUpdateFromPermalinkAsync(): void | ||
397 | { | ||
398 | $request = $this->createMock(Request::class); | ||
399 | $response = new Response(); | ||
400 | |||
401 | $this->container->loginManager = $this->createMock(LoginManager::class); | ||
402 | $this->container->loginManager->method('isLoggedIn')->willReturn(true); | ||
403 | |||
404 | $this->container->conf = $this->createMock(ConfigManager::class); | ||
405 | $this->container->conf | ||
406 | ->method('get') | ||
407 | ->willReturnCallback(function (string $key, $default) { | ||
408 | if ($key === 'thumbnails.mode') { | ||
409 | return Thumbnailer::MODE_ALL; | ||
410 | } elseif ($key === 'general.enable_async_metadata') { | ||
411 | return true; | ||
412 | } | ||
413 | |||
414 | return $default; | ||
415 | }) | ||
416 | ; | ||
417 | |||
418 | $this->container->thumbnailer = $this->createMock(Thumbnailer::class); | ||
419 | $this->container->thumbnailer->expects(static::never())->method('get'); | ||
420 | |||
421 | $this->container->bookmarkService | ||
422 | ->expects(static::once()) | ||
423 | ->method('findByHash') | ||
424 | ->willReturn((new Bookmark())->setId(2)->setUrl('https://url.tld')->setTitle('Title 1')) | ||
425 | ; | ||
426 | $this->container->bookmarkService->expects(static::never())->method('set'); | ||
427 | $this->container->bookmarkService->expects(static::never())->method('save'); | ||
428 | |||
429 | $result = $this->controller->permalink($request, $response, ['hash' => 'abc']); | ||
430 | |||
431 | static::assertSame(200, $result->getStatusCode()); | ||
432 | } | ||
433 | |||
434 | /** | ||
382 | * Trigger legacy controller in link list controller: permalink | 435 | * Trigger legacy controller in link list controller: permalink |
383 | */ | 436 | */ |
384 | public function testLegacyControllerPermalink(): void | 437 | public function testLegacyControllerPermalink(): void |