From d2ed48f748f818fcf703b437aa0757f1e7dda2e7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Wed, 18 Apr 2018 11:27:05 +0200
Subject: [PATCH] Fix preview generation in files api controller and adding
 unit tests

---
 lib/private/PreviewManager.php   |  1 -
 tests/lib/PreviewManagerTest.php | 88 ++++++++++++++++++++++++++++++++
 2 files changed, 88 insertions(+), 1 deletion(-)
 create mode 100644 tests/lib/PreviewManagerTest.php

diff --git a/lib/private/PreviewManager.php b/lib/private/PreviewManager.php
index 7cdea6b668ba..979b91bb5bb4 100644
--- a/lib/private/PreviewManager.php
+++ b/lib/private/PreviewManager.php
@@ -139,7 +139,6 @@ public function createPreview($file, $maxX = 100, $maxY = 75, $scaleUp = false)
 		if ($user === null) {
 			throw new NotLoggedInException();
 		}
-		$file = $this->rootFolder->getUserFolder($user->getUID())->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..9851f89f4265
--- /dev/null
+++ b/tests/lib/PreviewManagerTest.php
@@ -0,0 +1,88 @@
+<?php
+/**
+ * @author Thomas Müller <thomas.mueller@tmit.eu>
+ *
+ * @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 <http://www.gnu.org/licenses/>
+ *
+ */
+
+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;
+
+	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 IRootFolder $rootFolder */
+		$rootFolder = $this->createMock(IRootFolder::class);
+		/** @var IUserSession | \PHPUnit_Framework_MockObject_MockObject $userSession */
+		$userSession = $this->createMock(IUserSession::class);
+
+		$userSession->method('getUser')->willReturn($this->user);
+
+		$previewManager = new PreviewManager($config, $rootFolder, $userSession);
+
+		$image = $previewManager->createPreview('files/testimage.jpg');
+		$this->assertInstanceOf(IImage::class, $image);
+		$this->assertTrue($image->valid());
+	}
+}