]> git.immae.eu Git - github/shaarli/Shaarli.git/blobdiff - tests/front/controller/admin/ThumbnailsControllerTest.php
Process thumbnail synchronize page through Slim controllers
[github/shaarli/Shaarli.git] / tests / front / controller / admin / ThumbnailsControllerTest.php
diff --git a/tests/front/controller/admin/ThumbnailsControllerTest.php b/tests/front/controller/admin/ThumbnailsControllerTest.php
new file mode 100644 (file)
index 0000000..0c0c8a8
--- /dev/null
@@ -0,0 +1,154 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Shaarli\Front\Controller\Admin;
+
+use PHPUnit\Framework\TestCase;
+use Shaarli\Bookmark\Bookmark;
+use Shaarli\Bookmark\Exception\BookmarkNotFoundException;
+use Shaarli\Thumbnailer;
+use Slim\Http\Request;
+use Slim\Http\Response;
+
+class ThumbnailsControllerTest extends TestCase
+{
+    use FrontAdminControllerMockHelper;
+
+    /** @var ThumbnailsController */
+    protected $controller;
+
+    public function setUp(): void
+    {
+        $this->createContainer();
+
+        $this->controller = new ThumbnailsController($this->container);
+    }
+
+    /**
+     * Test displaying the thumbnails update page
+     * Note that only non-note and HTTP bookmarks should be returned.
+     */
+    public function testIndex(): void
+    {
+        $assignedVariables = [];
+        $this->assignTemplateVars($assignedVariables);
+
+        $request = $this->createMock(Request::class);
+        $response = new Response();
+
+        $this->container->bookmarkService
+            ->expects(static::once())
+            ->method('search')
+            ->willReturn([
+                (new Bookmark())->setId(1)->setUrl('http://url1.tld')->setTitle('Title 1'),
+                (new Bookmark())->setId(2)->setUrl('?abcdef')->setTitle('Note 1'),
+                (new Bookmark())->setId(3)->setUrl('http://url2.tld')->setTitle('Title 2'),
+                (new Bookmark())->setId(4)->setUrl('ftp://domain.tld', ['ftp'])->setTitle('FTP'),
+            ])
+        ;
+
+        $result = $this->controller->index($request, $response);
+
+        static::assertSame(200, $result->getStatusCode());
+        static::assertSame('thumbnails', (string) $result->getBody());
+
+        static::assertSame('Thumbnails update - Shaarli', $assignedVariables['pagetitle']);
+        static::assertSame([1, 3], $assignedVariables['ids']);
+    }
+
+    /**
+     * Test updating a bookmark thumbnail with valid parameters
+     */
+    public function testAjaxUpdateValid(): void
+    {
+        $request = $this->createMock(Request::class);
+        $response = new Response();
+
+        $bookmark = (new Bookmark())
+            ->setId($id = 123)
+            ->setUrl($url = 'http://url1.tld')
+            ->setTitle('Title 1')
+            ->setThumbnail(false)
+        ;
+
+        $this->container->thumbnailer = $this->createMock(Thumbnailer::class);
+        $this->container->thumbnailer
+            ->expects(static::once())
+            ->method('get')
+            ->with($url)
+            ->willReturn($thumb = 'http://img.tld/pic.png')
+        ;
+
+        $this->container->bookmarkService
+            ->expects(static::once())
+            ->method('get')
+            ->with($id)
+            ->willReturn($bookmark)
+        ;
+        $this->container->bookmarkService
+            ->expects(static::once())
+            ->method('set')
+            ->willReturnCallback(function (Bookmark $bookmark) use ($thumb) {
+                static::assertSame($thumb, $bookmark->getThumbnail());
+            })
+        ;
+
+        $result = $this->controller->ajaxUpdate($request, $response, ['id' => (string) $id]);
+
+        static::assertSame(200, $result->getStatusCode());
+
+        $payload = json_decode((string) $result->getBody(), true);
+
+        static::assertSame($id, $payload['id']);
+        static::assertSame($url, $payload['url']);
+        static::assertSame($thumb, $payload['thumbnail']);
+    }
+
+    /**
+     * Test updating a bookmark thumbnail - Invalid ID
+     */
+    public function testAjaxUpdateInvalidId(): void
+    {
+        $request = $this->createMock(Request::class);
+        $response = new Response();
+
+        $result = $this->controller->ajaxUpdate($request, $response, ['id' => 'nope']);
+
+        static::assertSame(400, $result->getStatusCode());
+    }
+
+    /**
+     * Test updating a bookmark thumbnail - No ID
+     */
+    public function testAjaxUpdateNoId(): void
+    {
+        $request = $this->createMock(Request::class);
+        $response = new Response();
+
+        $result = $this->controller->ajaxUpdate($request, $response, []);
+
+        static::assertSame(400, $result->getStatusCode());
+    }
+
+    /**
+     * Test updating a bookmark thumbnail with valid parameters
+     */
+    public function testAjaxUpdateBookmarkNotFound(): void
+    {
+        $id = 123;
+        $request = $this->createMock(Request::class);
+        $response = new Response();
+
+        $this->container->bookmarkService
+            ->expects(static::once())
+            ->method('get')
+            ->with($id)
+            ->willThrowException(new BookmarkNotFoundException())
+        ;
+
+        $result = $this->controller->ajaxUpdate($request, $response, ['id' => (string) $id]);
+
+        static::assertSame(404, $result->getStatusCode());
+    }
+}