diff options
Diffstat (limited to 'apps/files_versions/tests/VersioningTest.php')
-rw-r--r-- | apps/files_versions/tests/VersioningTest.php | 491 |
1 files changed, 240 insertions, 251 deletions
diff --git a/apps/files_versions/tests/VersioningTest.php b/apps/files_versions/tests/VersioningTest.php index f454ba30b86..c9f7d27d7ab 100644 --- a/apps/files_versions/tests/VersioningTest.php +++ b/apps/files_versions/tests/VersioningTest.php @@ -1,47 +1,35 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Björn Schießle <bjoern@schiessle.org> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Georg Ehrke <oc.list@georgehrke.com> - * @author Joas Schilling <coding@schilljs.com> - * @author Jörn Friedrich Dreyer <jfd@butonic.de> - * @author Liam JACK <liamjack@users.noreply.github.com> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Robin Appelman <robin@icewind.nl> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author Stefan Weil <sw@weilnetz.de> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * @author Vincent Petry <vincent@nextcloud.com> - * - * @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/> - * + * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ namespace OCA\Files_Versions\Tests; +use OC\AllConfig; +use OC\Files\Cache\Watcher; +use OC\Files\Filesystem; use OC\Files\Storage\Temporary; +use OC\Files\View; +use OC\SystemConfig; +use OC\User\NoUserException; +use OCA\Files_Sharing\AppInfo\Application; use OCA\Files_Versions\Db\VersionEntity; use OCA\Files_Versions\Db\VersionsMapper; +use OCA\Files_Versions\Events\VersionRestoredEvent; +use OCA\Files_Versions\Storage; use OCA\Files_Versions\Versions\IVersionManager; +use OCP\Constants; +use OCP\EventDispatcher\IEventDispatcher; use OCP\Files\IMimeTypeLoader; use OCP\IConfig; use OCP\IUser; +use OCP\IUserManager; +use OCP\Server; use OCP\Share\IShare; +use OCP\Util; /** * Class Test_Files_versions @@ -55,7 +43,7 @@ class VersioningTest extends \Test\TestCase { public const USERS_VERSIONS_ROOT = '/test-versions-user/files_versions'; /** - * @var \OC\Files\View + * @var View */ private $rootView; /** @@ -72,7 +60,7 @@ class VersioningTest extends \Test\TestCase { public static function setUpBeforeClass(): void { parent::setUpBeforeClass(); - $application = new \OCA\Files_Sharing\AppInfo\Application(); + $application = new Application(); // create test user self::loginHelper(self::TEST_VERSIONS_USER2, true); @@ -81,11 +69,11 @@ class VersioningTest extends \Test\TestCase { public static function tearDownAfterClass(): void { // cleanup test user - $user = \OC::$server->getUserManager()->get(self::TEST_VERSIONS_USER); + $user = Server::get(IUserManager::class)->get(self::TEST_VERSIONS_USER); if ($user !== null) { $user->delete(); } - $user = \OC::$server->getUserManager()->get(self::TEST_VERSIONS_USER2); + $user = Server::get(IUserManager::class)->get(self::TEST_VERSIONS_USER2); if ($user !== null) { $user->delete(); } @@ -96,32 +84,35 @@ class VersioningTest extends \Test\TestCase { protected function setUp(): void { parent::setUp(); - $config = \OC::$server->getConfig(); - $mockConfig = $this->createMock(IConfig::class); + $config = Server::get(IConfig::class); + $mockConfig = $this->getMockBuilder(AllConfig::class) + ->onlyMethods(['getSystemValue']) + ->setConstructorArgs([Server::get(SystemConfig::class)]) + ->getMock(); $mockConfig->expects($this->any()) ->method('getSystemValue') ->willReturnCallback(function ($key, $default) use ($config) { if ($key === 'filesystem_check_changes') { - return \OC\Files\Cache\Watcher::CHECK_ONCE; + return Watcher::CHECK_ONCE; } else { return $config->getSystemValue($key, $default); } }); - $this->overwriteService(\OC\AllConfig::class, $mockConfig); + $this->overwriteService(AllConfig::class, $mockConfig); // clear hooks \OC_Hook::clear(); - \OC::registerShareHooks(\OC::$server->getSystemConfig()); + \OC::registerShareHooks(Server::get(SystemConfig::class)); \OC::$server->boot(); self::loginHelper(self::TEST_VERSIONS_USER); - $this->rootView = new \OC\Files\View(); + $this->rootView = new View(); if (!$this->rootView->file_exists(self::USERS_VERSIONS_ROOT)) { $this->rootView->mkdir(self::USERS_VERSIONS_ROOT); } - $this->versionsMapper = \OCP\Server::get(VersionsMapper::class); - $this->mimeTypeLoader = \OCP\Server::get(IMimeTypeLoader::class); + $this->versionsMapper = Server::get(VersionsMapper::class); + $this->mimeTypeLoader = Server::get(IMimeTypeLoader::class); $this->user1 = $this->createMock(IUser::class); $this->user1->method('getUID') @@ -132,7 +123,7 @@ class VersioningTest extends \Test\TestCase { } protected function tearDown(): void { - $this->restoreService(\OC\AllConfig::class); + $this->restoreService(AllConfig::class); if ($this->rootView) { $this->rootView->deleteAll(self::TEST_VERSIONS_USER . '/files/'); @@ -149,9 +140,9 @@ class VersioningTest extends \Test\TestCase { /** * @medium * test expire logic - * @dataProvider versionsProvider */ - public function testGetExpireList($versions, $sizeOfAllDeletedFiles) { + #[\PHPUnit\Framework\Attributes\DataProvider('versionsProvider')] + public function testGetExpireList($versions, $sizeOfAllDeletedFiles): void { // last interval end at 2592000 $startTime = 5000000; @@ -165,61 +156,61 @@ class VersioningTest extends \Test\TestCase { // the deleted array should only contain versions which should be deleted foreach ($deleted as $key => $path) { unset($versions[$key]); - $this->assertEquals("delete", substr($path, 0, strlen("delete"))); + $this->assertEquals('delete', substr($path, 0, strlen('delete'))); } // the versions array should only contain versions which should be kept foreach ($versions as $version) { - $this->assertEquals("keep", $version['path']); + $this->assertEquals('keep', $version['path']); } } - public function versionsProvider() { + public static function versionsProvider(): array { return [ // first set of versions uniformly distributed versions [ [ // first slice (10sec) keep one version every 2 seconds - ["version" => 4999999, "path" => "keep", "size" => 1], - ["version" => 4999998, "path" => "delete", "size" => 1], - ["version" => 4999997, "path" => "keep", "size" => 1], - ["version" => 4999995, "path" => "keep", "size" => 1], - ["version" => 4999994, "path" => "delete", "size" => 1], + ['version' => 4999999, 'path' => 'keep', 'size' => 1], + ['version' => 4999998, 'path' => 'delete', 'size' => 1], + ['version' => 4999997, 'path' => 'keep', 'size' => 1], + ['version' => 4999995, 'path' => 'keep', 'size' => 1], + ['version' => 4999994, 'path' => 'delete', 'size' => 1], //next slice (60sec) starts at 4999990 keep one version every 10 secons - ["version" => 4999988, "path" => "keep", "size" => 1], - ["version" => 4999978, "path" => "keep", "size" => 1], - ["version" => 4999975, "path" => "delete", "size" => 1], - ["version" => 4999972, "path" => "delete", "size" => 1], - ["version" => 4999967, "path" => "keep", "size" => 1], - ["version" => 4999958, "path" => "delete", "size" => 1], - ["version" => 4999957, "path" => "keep", "size" => 1], + ['version' => 4999988, 'path' => 'keep', 'size' => 1], + ['version' => 4999978, 'path' => 'keep', 'size' => 1], + ['version' => 4999975, 'path' => 'delete', 'size' => 1], + ['version' => 4999972, 'path' => 'delete', 'size' => 1], + ['version' => 4999967, 'path' => 'keep', 'size' => 1], + ['version' => 4999958, 'path' => 'delete', 'size' => 1], + ['version' => 4999957, 'path' => 'keep', 'size' => 1], //next slice (3600sec) start at 4999940 keep one version every 60 seconds - ["version" => 4999900, "path" => "keep", "size" => 1], - ["version" => 4999841, "path" => "delete", "size" => 1], - ["version" => 4999840, "path" => "keep", "size" => 1], - ["version" => 4999780, "path" => "keep", "size" => 1], - ["version" => 4996401, "path" => "keep", "size" => 1], + ['version' => 4999900, 'path' => 'keep', 'size' => 1], + ['version' => 4999841, 'path' => 'delete', 'size' => 1], + ['version' => 4999840, 'path' => 'keep', 'size' => 1], + ['version' => 4999780, 'path' => 'keep', 'size' => 1], + ['version' => 4996401, 'path' => 'keep', 'size' => 1], // next slice (86400sec) start at 4996400 keep one version every 3600 seconds - ["version" => 4996350, "path" => "delete", "size" => 1], - ["version" => 4992800, "path" => "keep", "size" => 1], - ["version" => 4989800, "path" => "delete", "size" => 1], - ["version" => 4989700, "path" => "delete", "size" => 1], - ["version" => 4989200, "path" => "keep", "size" => 1], + ['version' => 4996350, 'path' => 'delete', 'size' => 1], + ['version' => 4992800, 'path' => 'keep', 'size' => 1], + ['version' => 4989800, 'path' => 'delete', 'size' => 1], + ['version' => 4989700, 'path' => 'delete', 'size' => 1], + ['version' => 4989200, 'path' => 'keep', 'size' => 1], // next slice (2592000sec) start at 4913600 keep one version every 86400 seconds - ["version" => 4913600, "path" => "keep", "size" => 1], - ["version" => 4852800, "path" => "delete", "size" => 1], - ["version" => 4827201, "path" => "delete", "size" => 1], - ["version" => 4827200, "path" => "keep", "size" => 1], - ["version" => 4777201, "path" => "delete", "size" => 1], - ["version" => 4777501, "path" => "delete", "size" => 1], - ["version" => 4740000, "path" => "keep", "size" => 1], + ['version' => 4913600, 'path' => 'keep', 'size' => 1], + ['version' => 4852800, 'path' => 'delete', 'size' => 1], + ['version' => 4827201, 'path' => 'delete', 'size' => 1], + ['version' => 4827200, 'path' => 'keep', 'size' => 1], + ['version' => 4777201, 'path' => 'delete', 'size' => 1], + ['version' => 4777501, 'path' => 'delete', 'size' => 1], + ['version' => 4740000, 'path' => 'keep', 'size' => 1], // final slice starts at 2408000 keep one version every 604800 secons - ["version" => 2408000, "path" => "keep", "size" => 1], - ["version" => 1803201, "path" => "delete", "size" => 1], - ["version" => 1803200, "path" => "keep", "size" => 1], - ["version" => 1800199, "path" => "delete", "size" => 1], - ["version" => 1800100, "path" => "delete", "size" => 1], - ["version" => 1198300, "path" => "keep", "size" => 1], + ['version' => 2408000, 'path' => 'keep', 'size' => 1], + ['version' => 1803201, 'path' => 'delete', 'size' => 1], + ['version' => 1803200, 'path' => 'keep', 'size' => 1], + ['version' => 1800199, 'path' => 'delete', 'size' => 1], + ['version' => 1800100, 'path' => 'delete', 'size' => 1], + ['version' => 1198300, 'path' => 'keep', 'size' => 1], ], 16 // size of all deleted files (every file has the size 1) ], @@ -230,28 +221,28 @@ class VersioningTest extends \Test\TestCase { // next slice (60sec) starts at 4999990 keep one version every 10 secons // next slice (3600sec) start at 4999940 keep one version every 60 seconds // next slice (86400sec) start at 4996400 keep one version every 3600 seconds - ["version" => 4996400, "path" => "keep", "size" => 1], - ["version" => 4996350, "path" => "delete", "size" => 1], - ["version" => 4996350, "path" => "delete", "size" => 1], - ["version" => 4992800, "path" => "keep", "size" => 1], - ["version" => 4989800, "path" => "delete", "size" => 1], - ["version" => 4989700, "path" => "delete", "size" => 1], - ["version" => 4989200, "path" => "keep", "size" => 1], + ['version' => 4996400, 'path' => 'keep', 'size' => 1], + ['version' => 4996350, 'path' => 'delete', 'size' => 1], + ['version' => 4996350, 'path' => 'delete', 'size' => 1], + ['version' => 4992800, 'path' => 'keep', 'size' => 1], + ['version' => 4989800, 'path' => 'delete', 'size' => 1], + ['version' => 4989700, 'path' => 'delete', 'size' => 1], + ['version' => 4989200, 'path' => 'keep', 'size' => 1], // next slice (2592000sec) start at 4913600 keep one version every 86400 seconds - ["version" => 4913600, "path" => "keep", "size" => 1], - ["version" => 4852800, "path" => "delete", "size" => 1], - ["version" => 4827201, "path" => "delete", "size" => 1], - ["version" => 4827200, "path" => "keep", "size" => 1], - ["version" => 4777201, "path" => "delete", "size" => 1], - ["version" => 4777501, "path" => "delete", "size" => 1], - ["version" => 4740000, "path" => "keep", "size" => 1], + ['version' => 4913600, 'path' => 'keep', 'size' => 1], + ['version' => 4852800, 'path' => 'delete', 'size' => 1], + ['version' => 4827201, 'path' => 'delete', 'size' => 1], + ['version' => 4827200, 'path' => 'keep', 'size' => 1], + ['version' => 4777201, 'path' => 'delete', 'size' => 1], + ['version' => 4777501, 'path' => 'delete', 'size' => 1], + ['version' => 4740000, 'path' => 'keep', 'size' => 1], // final slice starts at 2408000 keep one version every 604800 secons - ["version" => 2408000, "path" => "keep", "size" => 1], - ["version" => 1803201, "path" => "delete", "size" => 1], - ["version" => 1803200, "path" => "keep", "size" => 1], - ["version" => 1800199, "path" => "delete", "size" => 1], - ["version" => 1800100, "path" => "delete", "size" => 1], - ["version" => 1198300, "path" => "keep", "size" => 1], + ['version' => 2408000, 'path' => 'keep', 'size' => 1], + ['version' => 1803201, 'path' => 'delete', 'size' => 1], + ['version' => 1803200, 'path' => 'keep', 'size' => 1], + ['version' => 1800199, 'path' => 'delete', 'size' => 1], + ['version' => 1800100, 'path' => 'delete', 'size' => 1], + ['version' => 1198300, 'path' => 'keep', 'size' => 1], ], 11 // size of all deleted files (every file has the size 1) ], @@ -259,32 +250,32 @@ class VersioningTest extends \Test\TestCase { [ [ // first slice (10sec) keep one version every 2 seconds - ["version" => 4999999, "path" => "keep", "size" => 1], - ["version" => 4999998, "path" => "delete", "size" => 1], - ["version" => 4999997, "path" => "keep", "size" => 1], - ["version" => 4999995, "path" => "keep", "size" => 1], - ["version" => 4999994, "path" => "delete", "size" => 1], + ['version' => 4999999, 'path' => 'keep', 'size' => 1], + ['version' => 4999998, 'path' => 'delete', 'size' => 1], + ['version' => 4999997, 'path' => 'keep', 'size' => 1], + ['version' => 4999995, 'path' => 'keep', 'size' => 1], + ['version' => 4999994, 'path' => 'delete', 'size' => 1], //next slice (60sec) starts at 4999990 keep one version every 10 secons - ["version" => 4999988, "path" => "keep", "size" => 1], - ["version" => 4999978, "path" => "keep", "size" => 1], + ['version' => 4999988, 'path' => 'keep', 'size' => 1], + ['version' => 4999978, 'path' => 'keep', 'size' => 1], //next slice (3600sec) start at 4999940 keep one version every 60 seconds // next slice (86400sec) start at 4996400 keep one version every 3600 seconds - ["version" => 4989200, "path" => "keep", "size" => 1], + ['version' => 4989200, 'path' => 'keep', 'size' => 1], // next slice (2592000sec) start at 4913600 keep one version every 86400 seconds - ["version" => 4913600, "path" => "keep", "size" => 1], - ["version" => 4852800, "path" => "delete", "size" => 1], - ["version" => 4827201, "path" => "delete", "size" => 1], - ["version" => 4827200, "path" => "keep", "size" => 1], - ["version" => 4777201, "path" => "delete", "size" => 1], - ["version" => 4777501, "path" => "delete", "size" => 1], - ["version" => 4740000, "path" => "keep", "size" => 1], + ['version' => 4913600, 'path' => 'keep', 'size' => 1], + ['version' => 4852800, 'path' => 'delete', 'size' => 1], + ['version' => 4827201, 'path' => 'delete', 'size' => 1], + ['version' => 4827200, 'path' => 'keep', 'size' => 1], + ['version' => 4777201, 'path' => 'delete', 'size' => 1], + ['version' => 4777501, 'path' => 'delete', 'size' => 1], + ['version' => 4740000, 'path' => 'keep', 'size' => 1], // final slice starts at 2408000 keep one version every 604800 secons - ["version" => 2408000, "path" => "keep", "size" => 1], - ["version" => 1803201, "path" => "delete", "size" => 1], - ["version" => 1803200, "path" => "keep", "size" => 1], - ["version" => 1800199, "path" => "delete", "size" => 1], - ["version" => 1800100, "path" => "delete", "size" => 1], - ["version" => 1198300, "path" => "keep", "size" => 1], + ['version' => 2408000, 'path' => 'keep', 'size' => 1], + ['version' => 1803201, 'path' => 'delete', 'size' => 1], + ['version' => 1803200, 'path' => 'keep', 'size' => 1], + ['version' => 1800199, 'path' => 'delete', 'size' => 1], + ['version' => 1800100, 'path' => 'delete', 'size' => 1], + ['version' => 1198300, 'path' => 'keep', 'size' => 1], ], 9 // size of all deleted files (every file has the size 1) ], @@ -297,8 +288,8 @@ class VersioningTest extends \Test\TestCase { ]; } - public function testRename() { - \OC\Files\Filesystem::file_put_contents("test.txt", "test file"); + public function testRename(): void { + Filesystem::file_put_contents('test.txt', 'test file'); $t1 = time(); // second version is two weeks older, this way we make sure that no @@ -315,7 +306,7 @@ class VersioningTest extends \Test\TestCase { $this->rootView->file_put_contents($v2, 'version2'); // execute rename hook of versions app - \OC\Files\Filesystem::rename("test.txt", "test2.txt"); + Filesystem::rename('test.txt', 'test2.txt'); $this->runCommands(); @@ -326,10 +317,10 @@ class VersioningTest extends \Test\TestCase { $this->assertTrue($this->rootView->file_exists($v2Renamed), 'version 2 of renamed file exists'); } - public function testRenameInSharedFolder() { - \OC\Files\Filesystem::mkdir('folder1'); - \OC\Files\Filesystem::mkdir('folder1/folder2'); - \OC\Files\Filesystem::file_put_contents("folder1/test.txt", "test file"); + public function testRenameInSharedFolder(): void { + Filesystem::mkdir('folder1'); + Filesystem::mkdir('folder1/folder2'); + Filesystem::file_put_contents('folder1/test.txt', 'test file'); $t1 = time(); // second version is two weeks older, this way we make sure that no @@ -347,21 +338,21 @@ class VersioningTest extends \Test\TestCase { $this->rootView->file_put_contents($v2, 'version2'); $node = \OC::$server->getUserFolder(self::TEST_VERSIONS_USER)->get('folder1'); - $share = \OC::$server->getShareManager()->newShare(); + $share = Server::get(\OCP\Share\IManager::class)->newShare(); $share->setNode($node) ->setShareType(IShare::TYPE_USER) ->setSharedBy(self::TEST_VERSIONS_USER) ->setSharedWith(self::TEST_VERSIONS_USER2) - ->setPermissions(\OCP\Constants::PERMISSION_ALL); - $share = \OC::$server->getShareManager()->createShare($share); - \OC::$server->getShareManager()->acceptShare($share, self::TEST_VERSIONS_USER2); + ->setPermissions(Constants::PERMISSION_ALL); + $share = Server::get(\OCP\Share\IManager::class)->createShare($share); + Server::get(\OCP\Share\IManager::class)->acceptShare($share, self::TEST_VERSIONS_USER2); self::loginHelper(self::TEST_VERSIONS_USER2); - $this->assertTrue(\OC\Files\Filesystem::file_exists('folder1/test.txt')); + $this->assertTrue(Filesystem::file_exists('folder1/test.txt')); // execute rename hook of versions app - \OC\Files\Filesystem::rename('/folder1/test.txt', '/folder1/folder2/test.txt'); + Filesystem::rename('/folder1/test.txt', '/folder1/folder2/test.txt'); $this->runCommands(); @@ -373,13 +364,13 @@ class VersioningTest extends \Test\TestCase { $this->assertTrue($this->rootView->file_exists($v1Renamed), 'version 1 of renamed file exists'); $this->assertTrue($this->rootView->file_exists($v2Renamed), 'version 2 of renamed file exists'); - \OC::$server->getShareManager()->deleteShare($share); + Server::get(\OCP\Share\IManager::class)->deleteShare($share); } - public function testMoveFolder() { - \OC\Files\Filesystem::mkdir('folder1'); - \OC\Files\Filesystem::mkdir('folder2'); - \OC\Files\Filesystem::file_put_contents('folder1/test.txt', 'test file'); + public function testMoveFolder(): void { + Filesystem::mkdir('folder1'); + Filesystem::mkdir('folder2'); + Filesystem::file_put_contents('folder1/test.txt', 'test file'); $t1 = time(); // second version is two weeks older, this way we make sure that no @@ -397,7 +388,7 @@ class VersioningTest extends \Test\TestCase { $this->rootView->file_put_contents($v2, 'version2'); // execute rename hook of versions app - \OC\Files\Filesystem::rename('folder1', 'folder2/folder1'); + Filesystem::rename('folder1', 'folder2/folder1'); $this->runCommands(); @@ -409,23 +400,23 @@ class VersioningTest extends \Test\TestCase { } - public function testMoveFileIntoSharedFolderAsRecipient() { - \OC\Files\Filesystem::mkdir('folder1'); - $fileInfo = \OC\Files\Filesystem::getFileInfo('folder1'); + public function testMoveFileIntoSharedFolderAsRecipient(): void { + Filesystem::mkdir('folder1'); + $fileInfo = Filesystem::getFileInfo('folder1'); $node = \OC::$server->getUserFolder(self::TEST_VERSIONS_USER)->get('folder1'); - $share = \OC::$server->getShareManager()->newShare(); + $share = Server::get(\OCP\Share\IManager::class)->newShare(); $share->setNode($node) ->setShareType(IShare::TYPE_USER) ->setSharedBy(self::TEST_VERSIONS_USER) ->setSharedWith(self::TEST_VERSIONS_USER2) - ->setPermissions(\OCP\Constants::PERMISSION_ALL); - $share = \OC::$server->getShareManager()->createShare($share); - \OC::$server->getShareManager()->acceptShare($share, self::TEST_VERSIONS_USER2); + ->setPermissions(Constants::PERMISSION_ALL); + $share = Server::get(\OCP\Share\IManager::class)->createShare($share); + Server::get(\OCP\Share\IManager::class)->acceptShare($share, self::TEST_VERSIONS_USER2); self::loginHelper(self::TEST_VERSIONS_USER2); $versionsFolder2 = '/' . self::TEST_VERSIONS_USER2 . '/files_versions'; - \OC\Files\Filesystem::file_put_contents('test.txt', 'test file'); + Filesystem::file_put_contents('test.txt', 'test file'); $t1 = time(); // second version is two weeks older, this way we make sure that no @@ -441,8 +432,9 @@ class VersioningTest extends \Test\TestCase { $this->rootView->file_put_contents($v2, 'version2'); // move file into the shared folder as recipient - \OC\Files\Filesystem::rename('/test.txt', '/folder1/test.txt'); + $success = Filesystem::rename('/test.txt', '/folder1/test.txt'); + $this->assertTrue($success); $this->assertFalse($this->rootView->file_exists($v1)); $this->assertFalse($this->rootView->file_exists($v2)); @@ -456,26 +448,26 @@ class VersioningTest extends \Test\TestCase { $this->assertTrue($this->rootView->file_exists($v1Renamed)); $this->assertTrue($this->rootView->file_exists($v2Renamed)); - \OC::$server->getShareManager()->deleteShare($share); + Server::get(\OCP\Share\IManager::class)->deleteShare($share); } - public function testMoveFolderIntoSharedFolderAsRecipient() { - \OC\Files\Filesystem::mkdir('folder1'); + public function testMoveFolderIntoSharedFolderAsRecipient(): void { + Filesystem::mkdir('folder1'); $node = \OC::$server->getUserFolder(self::TEST_VERSIONS_USER)->get('folder1'); - $share = \OC::$server->getShareManager()->newShare(); + $share = Server::get(\OCP\Share\IManager::class)->newShare(); $share->setNode($node) ->setShareType(IShare::TYPE_USER) ->setSharedBy(self::TEST_VERSIONS_USER) ->setSharedWith(self::TEST_VERSIONS_USER2) - ->setPermissions(\OCP\Constants::PERMISSION_ALL); - $share = \OC::$server->getShareManager()->createShare($share); - \OC::$server->getShareManager()->acceptShare($share, self::TEST_VERSIONS_USER2); + ->setPermissions(Constants::PERMISSION_ALL); + $share = Server::get(\OCP\Share\IManager::class)->createShare($share); + Server::get(\OCP\Share\IManager::class)->acceptShare($share, self::TEST_VERSIONS_USER2); self::loginHelper(self::TEST_VERSIONS_USER2); $versionsFolder2 = '/' . self::TEST_VERSIONS_USER2 . '/files_versions'; - \OC\Files\Filesystem::mkdir('folder2'); - \OC\Files\Filesystem::file_put_contents('folder2/test.txt', 'test file'); + Filesystem::mkdir('folder2'); + Filesystem::file_put_contents('folder2/test.txt', 'test file'); $t1 = time(); // second version is two weeks older, this way we make sure that no @@ -492,7 +484,7 @@ class VersioningTest extends \Test\TestCase { $this->rootView->file_put_contents($v2, 'version2'); // move file into the shared folder as recipient - \OC\Files\Filesystem::rename('/folder2', '/folder1/folder2'); + Filesystem::rename('/folder2', '/folder1/folder2'); $this->assertFalse($this->rootView->file_exists($v1)); $this->assertFalse($this->rootView->file_exists($v2)); @@ -507,11 +499,11 @@ class VersioningTest extends \Test\TestCase { $this->assertTrue($this->rootView->file_exists($v1Renamed)); $this->assertTrue($this->rootView->file_exists($v2Renamed)); - \OC::$server->getShareManager()->deleteShare($share); + Server::get(\OCP\Share\IManager::class)->deleteShare($share); } - public function testRenameSharedFile() { - \OC\Files\Filesystem::file_put_contents("test.txt", "test file"); + public function testRenameSharedFile(): void { + Filesystem::file_put_contents('test.txt', 'test file'); $t1 = time(); // second version is two weeks older, this way we make sure that no @@ -530,21 +522,21 @@ class VersioningTest extends \Test\TestCase { $this->rootView->file_put_contents($v2, 'version2'); $node = \OC::$server->getUserFolder(self::TEST_VERSIONS_USER)->get('test.txt'); - $share = \OC::$server->getShareManager()->newShare(); + $share = Server::get(\OCP\Share\IManager::class)->newShare(); $share->setNode($node) ->setShareType(IShare::TYPE_USER) ->setSharedBy(self::TEST_VERSIONS_USER) ->setSharedWith(self::TEST_VERSIONS_USER2) - ->setPermissions(\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_SHARE); - $share = \OC::$server->getShareManager()->createShare($share); - \OC::$server->getShareManager()->acceptShare($share, self::TEST_VERSIONS_USER2); + ->setPermissions(Constants::PERMISSION_READ | Constants::PERMISSION_UPDATE | Constants::PERMISSION_SHARE); + $share = Server::get(\OCP\Share\IManager::class)->createShare($share); + Server::get(\OCP\Share\IManager::class)->acceptShare($share, self::TEST_VERSIONS_USER2); self::loginHelper(self::TEST_VERSIONS_USER2); - $this->assertTrue(\OC\Files\Filesystem::file_exists('test.txt')); + $this->assertTrue(Filesystem::file_exists('test.txt')); // execute rename hook of versions app - \OC\Files\Filesystem::rename('test.txt', 'test2.txt'); + Filesystem::rename('test.txt', 'test2.txt'); self::loginHelper(self::TEST_VERSIONS_USER); @@ -556,11 +548,11 @@ class VersioningTest extends \Test\TestCase { $this->assertFalse($this->rootView->file_exists($v1Renamed)); $this->assertFalse($this->rootView->file_exists($v2Renamed)); - \OC::$server->getShareManager()->deleteShare($share); + Server::get(\OCP\Share\IManager::class)->deleteShare($share); } - public function testCopy() { - \OC\Files\Filesystem::file_put_contents("test.txt", "test file"); + public function testCopy(): void { + Filesystem::file_put_contents('test.txt', 'test file'); $t1 = time(); // second version is two weeks older, this way we make sure that no @@ -577,7 +569,7 @@ class VersioningTest extends \Test\TestCase { $this->rootView->file_put_contents($v2, 'version2'); // execute copy hook of versions app - \OC\Files\Filesystem::copy("test.txt", "test2.txt"); + Filesystem::copy('test.txt', 'test2.txt'); $this->runCommands(); @@ -592,7 +584,7 @@ class VersioningTest extends \Test\TestCase { * test if we find all versions and if the versions array contain * the correct 'path' and 'name' */ - public function testGetVersions() { + public function testGetVersions(): void { $t1 = time(); // second version is two weeks older, this way we make sure that no // version will be expired @@ -608,7 +600,7 @@ class VersioningTest extends \Test\TestCase { $this->rootView->file_put_contents($v2, 'version2'); // execute copy hook of versions app - $versions = \OCA\Files_Versions\Storage::getVersions(self::TEST_VERSIONS_USER, '/subfolder/test.txt'); + $versions = Storage::getVersions(self::TEST_VERSIONS_USER, '/subfolder/test.txt'); $this->assertCount(2, $versions); @@ -625,65 +617,65 @@ class VersioningTest extends \Test\TestCase { * test if we find all versions and if the versions array contain * the correct 'path' and 'name' */ - public function testGetVersionsEmptyFile() { + public function testGetVersionsEmptyFile(): void { // execute copy hook of versions app - $versions = \OCA\Files_Versions\Storage::getVersions(self::TEST_VERSIONS_USER, ''); + $versions = Storage::getVersions(self::TEST_VERSIONS_USER, ''); $this->assertCount(0, $versions); - $versions = \OCA\Files_Versions\Storage::getVersions(self::TEST_VERSIONS_USER, null); + $versions = Storage::getVersions(self::TEST_VERSIONS_USER, null); $this->assertCount(0, $versions); } - public function testExpireNonexistingFile() { + public function testExpireNonexistingFile(): void { $this->logout(); // needed to have a FS setup (the background job does this) \OC_Util::setupFS(self::TEST_VERSIONS_USER); - $this->assertFalse(\OCA\Files_Versions\Storage::expire('/void/unexist.txt', self::TEST_VERSIONS_USER)); + $this->assertFalse(Storage::expire('/void/unexist.txt', self::TEST_VERSIONS_USER)); } - public function testExpireNonexistingUser() { - $this->expectException(\OC\User\NoUserException::class); + public function testExpireNonexistingUser(): void { + $this->expectException(NoUserException::class); $this->logout(); // needed to have a FS setup (the background job does this) \OC_Util::setupFS(self::TEST_VERSIONS_USER); - \OC\Files\Filesystem::file_put_contents("test.txt", "test file"); + Filesystem::file_put_contents('test.txt', 'test file'); - $this->assertFalse(\OCA\Files_Versions\Storage::expire('test.txt', 'unexist')); + $this->assertFalse(Storage::expire('test.txt', 'unexist')); } - public function testRestoreSameStorage() { - \OC\Files\Filesystem::mkdir('sub'); + public function testRestoreSameStorage(): void { + Filesystem::mkdir('sub'); $this->doTestRestore(); } - public function testRestoreCrossStorage() { + public function testRestoreCrossStorage(): void { $storage2 = new Temporary([]); - \OC\Files\Filesystem::mount($storage2, [], self::TEST_VERSIONS_USER . '/files/sub'); + Filesystem::mount($storage2, [], self::TEST_VERSIONS_USER . '/files/sub'); $this->doTestRestore(); } - public function testRestoreNoPermission() { + public function testRestoreNoPermission(): void { $this->loginAsUser(self::TEST_VERSIONS_USER); $userHome = \OC::$server->getUserFolder(self::TEST_VERSIONS_USER); $node = $userHome->newFolder('folder'); $file = $node->newFile('test.txt'); - $share = \OC::$server->getShareManager()->newShare(); + $share = Server::get(\OCP\Share\IManager::class)->newShare(); $share->setNode($node) ->setShareType(IShare::TYPE_USER) ->setSharedBy(self::TEST_VERSIONS_USER) ->setSharedWith(self::TEST_VERSIONS_USER2) - ->setPermissions(\OCP\Constants::PERMISSION_READ); - $share = \OC::$server->getShareManager()->createShare($share); - \OC::$server->getShareManager()->acceptShare($share, self::TEST_VERSIONS_USER2); + ->setPermissions(Constants::PERMISSION_READ); + $share = Server::get(\OCP\Share\IManager::class)->createShare($share); + Server::get(\OCP\Share\IManager::class)->acceptShare($share, self::TEST_VERSIONS_USER2); $versions = $this->createAndCheckVersions( - \OC\Files\Filesystem::getView(), + Filesystem::getView(), 'folder/test.txt' ); @@ -693,15 +685,15 @@ class VersioningTest extends \Test\TestCase { $firstVersion = current($versions); - $this->assertFalse(\OCA\Files_Versions\Storage::rollback('folder/test.txt', $firstVersion['version'], $this->user2), 'Revert did not happen'); + $this->assertFalse(Storage::rollback('folder/test.txt', (int)$firstVersion['version'], $this->user2), 'Revert did not happen'); $this->loginAsUser(self::TEST_VERSIONS_USER); - \OC::$server->getShareManager()->deleteShare($share); + Server::get(\OCP\Share\IManager::class)->deleteShare($share); $this->assertEquals('test file', $file->getContent(), 'File content has not changed'); } - public function testRestoreMovedShare() { + public function testRestoreMovedShare(): void { $this->markTestSkipped('Unreliable test'); $this->loginAsUser(self::TEST_VERSIONS_USER); @@ -712,21 +704,21 @@ class VersioningTest extends \Test\TestCase { $userHome2 = \OC::$server->getUserFolder(self::TEST_VERSIONS_USER2); $userHome2->newFolder('subfolder'); - $share = \OC::$server->getShareManager()->newShare(); + $share = Server::get(\OCP\Share\IManager::class)->newShare(); $share->setNode($node) ->setShareType(IShare::TYPE_USER) ->setSharedBy(self::TEST_VERSIONS_USER) ->setSharedWith(self::TEST_VERSIONS_USER2) - ->setPermissions(\OCP\Constants::PERMISSION_ALL); - $share = \OC::$server->getShareManager()->createShare($share); - $shareManager = \OC::$server->getShareManager(); + ->setPermissions(Constants::PERMISSION_ALL); + $share = Server::get(\OCP\Share\IManager::class)->createShare($share); + $shareManager = Server::get(\OCP\Share\IManager::class); $shareManager->acceptShare($share, self::TEST_VERSIONS_USER2); - $share->setTarget("subfolder/folder"); + $share->setTarget('subfolder/folder'); $shareManager->moveShare($share, self::TEST_VERSIONS_USER2); $versions = $this->createAndCheckVersions( - \OC\Files\Filesystem::getView(), + Filesystem::getView(), 'folder/test.txt' ); @@ -736,11 +728,11 @@ class VersioningTest extends \Test\TestCase { $firstVersion = current($versions); - $this->assertTrue(\OCA\Files_Versions\Storage::rollback('folder/test.txt', $firstVersion['version'], $this->user1)); + $this->assertTrue(Storage::rollback('folder/test.txt', $firstVersion['version'], $this->user1)); $this->loginAsUser(self::TEST_VERSIONS_USER); - \OC::$server->getShareManager()->deleteShare($share); + Server::get(\OCP\Share\IManager::class)->deleteShare($share); $this->assertEquals('version 2', $file->getContent(), 'File content has not changed'); } @@ -753,19 +745,19 @@ class VersioningTest extends \Test\TestCase { return; } - $eventHandler = $this->getMockBuilder(\stdclass::class) - ->setMethods(['callback']) + $eventHandler = $this->getMockBuilder(DummyHookListener::class) + ->onlyMethods(['callback']) ->getMock(); $eventHandler->expects($this->any()) ->method('callback') ->willReturnCallback( - function ($p) use (&$params) { + function ($p) use (&$params): void { $params = $p; } ); - \OCP\Util::connectHook( + Util::connectHook( '\OCP\Versions', $hookName, $eventHandler, @@ -773,7 +765,7 @@ class VersioningTest extends \Test\TestCase { ); } - private function doTestRestore() { + private function doTestRestore(): void { $filePath = self::TEST_VERSIONS_USER . '/files/sub/test.txt'; $this->rootView->file_put_contents($filePath, 'test file'); @@ -811,7 +803,7 @@ class VersioningTest extends \Test\TestCase { $versionEntity->setMetadata([]); $this->versionsMapper->insert($versionEntity); - $oldVersions = \OCA\Files_Versions\Storage::getVersions( + $oldVersions = Storage::getVersions( self::TEST_VERSIONS_USER, '/sub/test.txt' ); @@ -820,22 +812,22 @@ class VersioningTest extends \Test\TestCase { $this->assertEquals('test file', $this->rootView->file_get_contents($filePath)); $info1 = $this->rootView->getFileInfo($filePath); - $params = []; - $this->connectMockHooks('rollback', $params); + $eventDispatcher = Server::get(IEventDispatcher::class); + $eventFired = false; + $eventDispatcher->addListener(VersionRestoredEvent::class, function ($event) use (&$eventFired, $t2): void { + $eventFired = true; + $this->assertEquals('/sub/test.txt', $event->getVersion()->getVersionPath()); + $this->assertTrue($event->getVersion()->getRevisionId() > 0); + }); - $versionManager = \OCP\Server::get(IVersionManager::class); + $versionManager = Server::get(IVersionManager::class); $versions = $versionManager->getVersionsForFile($this->user1, $info1); $version = array_filter($versions, function ($version) use ($t2) { return $version->getRevisionId() === $t2; }); $this->assertTrue($versionManager->rollback(current($version))); - $expectedParams = [ - 'path' => '/sub/test.txt', - ]; - $this->assertEquals($expectedParams['path'], $params['path']); - $this->assertTrue(array_key_exists('revision', $params)); - $this->assertTrue($params['revision'] > 0); + $this->assertTrue($eventFired, 'VersionRestoredEvent was not fired'); $this->assertEquals('version2', $this->rootView->file_get_contents($filePath)); $info2 = $this->rootView->getFileInfo($filePath); @@ -856,7 +848,7 @@ class VersioningTest extends \Test\TestCase { 'Restored file has mtime from version' ); - $newVersions = \OCA\Files_Versions\Storage::getVersions( + $newVersions = Storage::getVersions( self::TEST_VERSIONS_USER, '/sub/test.txt' ); @@ -892,11 +884,11 @@ class VersioningTest extends \Test\TestCase { /** * Test whether versions are created when overwriting as owner */ - public function testStoreVersionAsOwner() { + public function testStoreVersionAsOwner(): void { $this->loginAsUser(self::TEST_VERSIONS_USER); $this->createAndCheckVersions( - \OC\Files\Filesystem::getView(), + Filesystem::getView(), 'test.txt' ); } @@ -904,30 +896,30 @@ class VersioningTest extends \Test\TestCase { /** * Test whether versions are created when overwriting as share recipient */ - public function testStoreVersionAsRecipient() { + public function testStoreVersionAsRecipient(): void { $this->loginAsUser(self::TEST_VERSIONS_USER); - \OC\Files\Filesystem::mkdir('folder'); - \OC\Files\Filesystem::file_put_contents('folder/test.txt', 'test file'); + Filesystem::mkdir('folder'); + Filesystem::file_put_contents('folder/test.txt', 'test file'); $node = \OC::$server->getUserFolder(self::TEST_VERSIONS_USER)->get('folder'); - $share = \OC::$server->getShareManager()->newShare(); + $share = Server::get(\OCP\Share\IManager::class)->newShare(); $share->setNode($node) ->setShareType(IShare::TYPE_USER) ->setSharedBy(self::TEST_VERSIONS_USER) ->setSharedWith(self::TEST_VERSIONS_USER2) - ->setPermissions(\OCP\Constants::PERMISSION_ALL); - $share = \OC::$server->getShareManager()->createShare($share); - \OC::$server->getShareManager()->acceptShare($share, self::TEST_VERSIONS_USER2); + ->setPermissions(Constants::PERMISSION_ALL); + $share = Server::get(\OCP\Share\IManager::class)->createShare($share); + Server::get(\OCP\Share\IManager::class)->acceptShare($share, self::TEST_VERSIONS_USER2); $this->loginAsUser(self::TEST_VERSIONS_USER2); $this->createAndCheckVersions( - \OC\Files\Filesystem::getView(), + Filesystem::getView(), 'folder/test.txt' ); - \OC::$server->getShareManager()->deleteShare($share); + Server::get(\OCP\Share\IManager::class)->deleteShare($share); } /** @@ -937,25 +929,21 @@ class VersioningTest extends \Test\TestCase { * is logged in. File modification must still be able to find * the owner and create versions. */ - public function testStoreVersionAsAnonymous() { + public function testStoreVersionAsAnonymous(): void { $this->logout(); // note: public link upload does this, // needed to make the hooks fire \OC_Util::setupFS(self::TEST_VERSIONS_USER); - $userView = new \OC\Files\View('/' . self::TEST_VERSIONS_USER . '/files'); + $userView = new View('/' . self::TEST_VERSIONS_USER . '/files'); $this->createAndCheckVersions( $userView, 'test.txt' ); } - /** - * @param \OC\Files\View $view - * @param string $path - */ - private function createAndCheckVersions(\OC\Files\View $view, $path) { + private function createAndCheckVersions(View $view, string $path): array { $view->file_put_contents($path, 'test file'); $view->file_put_contents($path, 'version 1'); $view->file_put_contents($path, 'version 2'); @@ -966,7 +954,7 @@ class VersioningTest extends \Test\TestCase { [$rootStorage,] = $this->rootView->resolvePath(self::TEST_VERSIONS_USER . '/files_versions'); $rootStorage->getScanner()->scan('files_versions'); - $versions = \OCA\Files_Versions\Storage::getVersions( + $versions = Storage::getVersions( self::TEST_VERSIONS_USER, '/' . $path ); @@ -977,28 +965,29 @@ class VersioningTest extends \Test\TestCase { return $versions; } - /** - * @param string $user - * @param bool $create - */ - public static function loginHelper($user, $create = false) { + public static function loginHelper(string $user, bool $create = false) { if ($create) { $backend = new \Test\Util\User\Dummy(); $backend->createUser($user, $user); - \OC::$server->getUserManager()->registerBackend($backend); + Server::get(IUserManager::class)->registerBackend($backend); } \OC_Util::tearDownFS(); \OC_User::setUserId(''); - \OC\Files\Filesystem::tearDown(); + Filesystem::tearDown(); \OC_User::setUserId($user); \OC_Util::setupFS($user); \OC::$server->getUserFolder($user); } } +class DummyHookListener { + public function callback() { + } +} + // extend the original class to make it possible to test protected methods -class VersionStorageToTest extends \OCA\Files_Versions\Storage { +class VersionStorageToTest extends Storage { /** * @param integer $time |