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): Bookmark { static::assertSame($thumb, $bookmark->getThumbnail()); return $bookmark; }) ; $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()); } }