From fb621f1155f3e1515b5ac7549982ad6924f7d270 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Wed, 18 Apr 2018 11:55:03 +0200 Subject: [PATCH] Fix preview generation in files api controller and adding unit tests --- lib/private/PreviewManager.php | 2 +- tests/lib/PreviewManagerTest.php | 86 ++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 tests/lib/PreviewManagerTest.php diff --git a/lib/private/PreviewManager.php b/lib/private/PreviewManager.php index 7cdea6b668ba..cbd452d88900 100644 --- a/lib/private/PreviewManager.php +++ b/lib/private/PreviewManager.php @@ -139,7 +139,7 @@ public function createPreview($file, $maxX = 100, $maxY = 75, $scaleUp = false) if ($user === null) { throw new NotLoggedInException(); } - $file = $this->rootFolder->getUserFolder($user->getUID())->get($file); + $file = $this->rootFolder->getUserFolder($user->getUID())->getParent()->get($file); $preview = new Preview('', '/', $file, $maxX, $maxY, $scaleUp); return $preview->getPreview(); } diff --git a/tests/lib/PreviewManagerTest.php b/tests/lib/PreviewManagerTest.php new file mode 100644 index 000000000000..5b882ca08753 --- /dev/null +++ b/tests/lib/PreviewManagerTest.php @@ -0,0 +1,86 @@ + + * + * @copyright Copyright (c) 2018, ownCloud GmbH + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see + * + */ + +namespace Test; + +use OC\Files\Filesystem; +use OC\Files\Storage\Temporary; +use OC\Files\View; +use OC\PreviewManager; +use OCP\Files\IRootFolder; +use OCP\IConfig; +use OCP\IImage; +use OCP\IUser; +use OCP\IUserSession; +use Test\Traits\MountProviderTrait; +use Test\Traits\UserTrait; + +/** + * Class PreviewManagerTest + * + * @group DB + * + * @package Test + */ +class PreviewManagerTest extends TestCase { + use UserTrait; + use MountProviderTrait; + + public const TEST_PREVIEW_USER1 = 'test-preview-user1'; + + /** @var IUser */ + private $user; + /** @var View */ + private $rootView; + + protected function setUp() { + parent::setUp(); + + $this->user = $this->createUser(self::TEST_PREVIEW_USER1, self::TEST_PREVIEW_USER1); + static::loginAsUser(self::TEST_PREVIEW_USER1); + + $storage = new Temporary([]); + Filesystem::mount($storage, [], '/' . self::TEST_PREVIEW_USER1 . '/'); + + $this->rootView = new View(''); + $this->rootView->mkdir('/' . self::TEST_PREVIEW_USER1); + $this->rootView->mkdir('/' . self::TEST_PREVIEW_USER1 . '/files'); + + $imgData = file_get_contents(\OC::$SERVERROOT . '/tests/data/testimage.jpg'); + $imgPath = '/' . self::TEST_PREVIEW_USER1 . '/files/testimage.jpg'; + $this->rootView->file_put_contents($imgPath, $imgData); + } + + public function testCreatePreview() { + /** @var IConfig $config */ + $config = $this->createMock(IConfig::class); + /** @var IUserSession | \PHPUnit_Framework_MockObject_MockObject $userSession */ + $userSession = $this->createMock(IUserSession::class); + $userSession->method('getUser')->willReturn($this->user); + + $rootFolder = \OC::$server->getLazyRootFolder(); + $previewManager = new PreviewManager($config, $rootFolder, $userSession); + + $image = $previewManager->createPreview('files/testimage.jpg'); + $this->assertInstanceOf(IImage::class, $image); + $this->assertTrue($image->valid()); + } +}