diff options
Diffstat (limited to 'apps/files_versions/tests')
-rw-r--r-- | apps/files_versions/tests/BackgroundJob/ExpireVersionsTest.php | 17 | ||||
-rw-r--r-- | apps/files_versions/tests/Command/CleanupTest.php | 55 | ||||
-rw-r--r-- | apps/files_versions/tests/Command/ExpireTest.php | 2 | ||||
-rw-r--r-- | apps/files_versions/tests/Controller/PreviewControllerTest.php | 43 | ||||
-rw-r--r-- | apps/files_versions/tests/ExpirationTest.php | 28 | ||||
-rw-r--r-- | apps/files_versions/tests/StorageTest.php | 11 | ||||
-rw-r--r-- | apps/files_versions/tests/VersioningTest.php | 125 | ||||
-rw-r--r-- | apps/files_versions/tests/Versions/VersionManagerTest.php | 83 |
8 files changed, 203 insertions, 161 deletions
diff --git a/apps/files_versions/tests/BackgroundJob/ExpireVersionsTest.php b/apps/files_versions/tests/BackgroundJob/ExpireVersionsTest.php index 7a35e9f5f39..21e88e86f90 100644 --- a/apps/files_versions/tests/BackgroundJob/ExpireVersionsTest.php +++ b/apps/files_versions/tests/BackgroundJob/ExpireVersionsTest.php @@ -1,4 +1,6 @@ <?php + +declare(strict_types=1); /** * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later @@ -16,17 +18,10 @@ use PHPUnit\Framework\MockObject\MockObject; use Test\TestCase; class ExpireVersionsTest extends TestCase { - /** @var IConfig|MockObject */ - private $config; - - /** @var IUserManager|MockObject */ - private $userManager; - - /** @var Expiration|MockObject */ - private $expiration; - - /** @var IJobList|MockObject */ - private $jobList; + private IConfig&MockObject $config; + private IUserManager&MockObject $userManager; + private Expiration&MockObject $expiration; + private IJobList&MockObject $jobList; protected function setUp(): void { parent::setUp(); diff --git a/apps/files_versions/tests/Command/CleanupTest.php b/apps/files_versions/tests/Command/CleanupTest.php index 62d9576e9c5..dd6665f5aef 100644 --- a/apps/files_versions/tests/Command/CleanupTest.php +++ b/apps/files_versions/tests/Command/CleanupTest.php @@ -1,4 +1,6 @@ <?php + +declare(strict_types=1); /** * SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors * SPDX-FileCopyrightText: 2016 ownCloud, Inc. @@ -8,11 +10,13 @@ namespace OCA\Files_Versions\Tests\Command; use OC\User\Manager; use OCA\Files_Versions\Command\CleanUp; +use OCA\Files_Versions\Db\VersionsMapper; use OCP\Files\Cache\ICache; use OCP\Files\Folder; use OCP\Files\IRootFolder; use OCP\Files\Storage\IStorage; use OCP\UserInterface; +use PHPUnit\Framework\MockObject\MockObject; use Test\TestCase; /** @@ -23,37 +27,26 @@ use Test\TestCase; * @package OCA\Files_Versions\Tests\Command */ class CleanupTest extends TestCase { - - /** @var CleanUp */ - protected $cleanup; - - /** @var \PHPUnit\Framework\MockObject\MockObject | Manager */ - protected $userManager; - - /** @var \PHPUnit\Framework\MockObject\MockObject | IRootFolder */ - protected $rootFolder; - - /** @var \PHPUnit\Framework\MockObject\MockObject | VersionsMapper */ - protected $versionMapper; + protected Manager&MockObject $userManager; + protected IRootFolder&MockObject $rootFolder; + protected VersionsMapper&MockObject $versionMapper; + protected CleanUp $cleanup; protected function setUp(): void { parent::setUp(); - $this->rootFolder = $this->getMockBuilder('OCP\Files\IRootFolder') - ->disableOriginalConstructor()->getMock(); - $this->userManager = $this->getMockBuilder('OC\User\Manager') - ->disableOriginalConstructor()->getMock(); - $this->versionMapper = $this->getMockBuilder('OCA\Files_Versions\Db\VersionsMapper') - ->disableOriginalConstructor()->getMock(); + $this->rootFolder = $this->createMock(IRootFolder::class); + $this->userManager = $this->createMock(Manager::class); + $this->versionMapper = $this->createMock(VersionsMapper::class); $this->cleanup = new CleanUp($this->rootFolder, $this->userManager, $this->versionMapper); } /** - * @dataProvider dataTestDeleteVersions * @param boolean $nodeExists */ - public function testDeleteVersions($nodeExists): void { + #[\PHPUnit\Framework\Attributes\DataProvider('dataTestDeleteVersions')] + public function testDeleteVersions(bool $nodeExists): void { $this->rootFolder->expects($this->once()) ->method('nodeExists') ->with('/testUser/files_versions') @@ -92,7 +85,7 @@ class CleanupTest extends TestCase { $this->invokePrivate($this->cleanup, 'deleteVersions', ['testUser']); } - public function dataTestDeleteVersions() { + public static function dataTestDeleteVersions(): array { return [ [true], [false] @@ -106,8 +99,8 @@ class CleanupTest extends TestCase { public function testExecuteDeleteListOfUsers(): void { $userIds = ['user1', 'user2', 'user3']; - $instance = $this->getMockBuilder('OCA\Files_Versions\Command\CleanUp') - ->setMethods(['deleteVersions']) + $instance = $this->getMockBuilder(CleanUp::class) + ->onlyMethods(['deleteVersions']) ->setConstructorArgs([$this->rootFolder, $this->userManager, $this->versionMapper]) ->getMock(); $instance->expects($this->exactly(count($userIds))) @@ -119,14 +112,12 @@ class CleanupTest extends TestCase { $this->userManager->expects($this->exactly(count($userIds))) ->method('userExists')->willReturn(true); - $inputInterface = $this->getMockBuilder('\Symfony\Component\Console\Input\InputInterface') - ->disableOriginalConstructor()->getMock(); + $inputInterface = $this->createMock(\Symfony\Component\Console\Input\InputInterface::class); $inputInterface->expects($this->once())->method('getArgument') ->with('user_id') ->willReturn($userIds); - $outputInterface = $this->getMockBuilder('\Symfony\Component\Console\Output\OutputInterface') - ->disableOriginalConstructor()->getMock(); + $outputInterface = $this->createMock(\Symfony\Component\Console\Output\OutputInterface::class); $this->invokePrivate($instance, 'execute', [$inputInterface, $outputInterface]); } @@ -138,8 +129,8 @@ class CleanupTest extends TestCase { $userIds = []; $backendUsers = ['user1', 'user2']; - $instance = $this->getMockBuilder('OCA\Files_Versions\Command\CleanUp') - ->setMethods(['deleteVersions']) + $instance = $this->getMockBuilder(CleanUp::class) + ->onlyMethods(['deleteVersions']) ->setConstructorArgs([$this->rootFolder, $this->userManager, $this->versionMapper]) ->getMock(); @@ -155,14 +146,12 @@ class CleanupTest extends TestCase { $this->assertTrue(in_array($user, $backendUsers)); }); - $inputInterface = $this->getMockBuilder('\Symfony\Component\Console\Input\InputInterface') - ->disableOriginalConstructor()->getMock(); + $inputInterface = $this->createMock(\Symfony\Component\Console\Input\InputInterface::class); $inputInterface->expects($this->once())->method('getArgument') ->with('user_id') ->willReturn($userIds); - $outputInterface = $this->getMockBuilder('\Symfony\Component\Console\Output\OutputInterface') - ->disableOriginalConstructor()->getMock(); + $outputInterface = $this->createMock(\Symfony\Component\Console\Output\OutputInterface::class); $this->userManager->expects($this->once()) ->method('getBackends') diff --git a/apps/files_versions/tests/Command/ExpireTest.php b/apps/files_versions/tests/Command/ExpireTest.php index 11f4eb2e2be..b74457a7fd6 100644 --- a/apps/files_versions/tests/Command/ExpireTest.php +++ b/apps/files_versions/tests/Command/ExpireTest.php @@ -1,4 +1,6 @@ <?php + +declare(strict_types=1); /** * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors * SPDX-FileCopyrightText: 2016 ownCloud, Inc. diff --git a/apps/files_versions/tests/Controller/PreviewControllerTest.php b/apps/files_versions/tests/Controller/PreviewControllerTest.php index 9899836bb88..542ea2b6b34 100644 --- a/apps/files_versions/tests/Controller/PreviewControllerTest.php +++ b/apps/files_versions/tests/Controller/PreviewControllerTest.php @@ -1,18 +1,19 @@ <?php + +declare(strict_types=1); /** * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ + namespace OCA\Files_Versions\Tests\Controller; use OCA\Files_Versions\Controller\PreviewController; use OCA\Files_Versions\Versions\IVersionManager; use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataResponse; -use OCP\AppFramework\Http\FileDisplayResponse; use OCP\Files\File; use OCP\Files\Folder; -use OCP\Files\IMimeTypeDetector; use OCP\Files\IRootFolder; use OCP\Files\NotFoundException; use OCP\Files\SimpleFS\ISimpleFile; @@ -20,30 +21,19 @@ use OCP\IPreview; use OCP\IRequest; use OCP\IUser; use OCP\IUserSession; +use OCP\Preview\IMimeIconProvider; +use PHPUnit\Framework\MockObject\MockObject; use Test\TestCase; class PreviewControllerTest extends TestCase { + private IRootFolder&MockObject $rootFolder; + private string $userId; + private IPreview&MockObject $previewManager; + private IUserSession&MockObject $userSession; + private IVersionManager&MockObject $versionManager; - /** @var IRootFolder|\PHPUnit\Framework\MockObject\MockObject */ - private $rootFolder; - - /** @var string */ - private $userId; - - /** @var IMimeTypeDetector|\PHPUnit\Framework\MockObject\MockObject */ - private $mimeTypeDetector; - - /** @var IPreview|\PHPUnit\Framework\MockObject\MockObject */ - private $previewManager; - - /** @var PreviewController|\PHPUnit\Framework\MockObject\MockObject */ - private $controller; - - /** @var IUserSession|\PHPUnit\Framework\MockObject\MockObject */ - private $userSession; - - /** @var IVersionManager|\PHPUnit\Framework\MockObject\MockObject */ - private $versionManager; + private IMimeIconProvider&MockObject $mimeIconProvider; + private PreviewController $controller; protected function setUp(): void { parent::setUp(); @@ -60,6 +50,7 @@ class PreviewControllerTest extends TestCase { ->method('getUser') ->willReturn($user); $this->versionManager = $this->createMock(IVersionManager::class); + $this->mimeIconProvider = $this->createMock(IMimeIconProvider::class); $this->controller = new PreviewController( 'files_versions', @@ -67,7 +58,8 @@ class PreviewControllerTest extends TestCase { $this->rootFolder, $this->userSession, $this->versionManager, - $this->previewManager + $this->previewManager, + $this->mimeIconProvider, ); } @@ -131,9 +123,10 @@ class PreviewControllerTest extends TestCase { ->willReturn('previewMime'); $res = $this->controller->getPreview('file', 10, 10, '42'); - $expected = new FileDisplayResponse($preview, Http::STATUS_OK, ['Content-Type' => 'previewMime']); - $this->assertEquals($expected, $res); + $this->assertEquals('previewMime', $res->getHeaders()['Content-Type']); + $this->assertEquals(Http::STATUS_OK, $res->getStatus()); + $this->assertEquals($preview, $this->invokePrivate($res, 'file')); } public function testVersionNotFound(): void { diff --git a/apps/files_versions/tests/ExpirationTest.php b/apps/files_versions/tests/ExpirationTest.php index ac8af7c093a..8cf412c3fe0 100644 --- a/apps/files_versions/tests/ExpirationTest.php +++ b/apps/files_versions/tests/ExpirationTest.php @@ -1,4 +1,6 @@ <?php + +declare(strict_types=1); /** * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors * SPDX-FileCopyrightText: 2016 ownCloud, Inc. @@ -15,7 +17,7 @@ use Psr\Log\LoggerInterface; class ExpirationTest extends \Test\TestCase { public const SECONDS_PER_DAY = 86400; //60*60*24 - public function expirationData() { + public static function expirationData(): array { $today = 100 * self::SECONDS_PER_DAY; $back10Days = (100 - 10) * self::SECONDS_PER_DAY; $back20Days = (100 - 20) * self::SECONDS_PER_DAY; @@ -79,16 +81,8 @@ class ExpirationTest extends \Test\TestCase { ]; } - /** - * @dataProvider expirationData - * - * @param string $retentionObligation - * @param int $timeNow - * @param int $timestamp - * @param bool $quotaExceeded - * @param string $expectedResult - */ - public function testExpiration($retentionObligation, $timeNow, $timestamp, $quotaExceeded, $expectedResult): void { + #[\PHPUnit\Framework\Attributes\DataProvider('expirationData')] + public function testExpiration(string $retentionObligation, int $timeNow, int $timestamp, bool $quotaExceeded, bool $expectedResult): void { $mockedConfig = $this->getMockedConfig($retentionObligation); $mockedTimeFactory = $this->getMockedTimeFactory($timeNow); $mockedLogger = $this->createMock(LoggerInterface::class); @@ -100,11 +94,7 @@ class ExpirationTest extends \Test\TestCase { } - /** - * @param int $time - * @return ITimeFactory|MockObject - */ - private function getMockedTimeFactory($time) { + private function getMockedTimeFactory(int $time): ITimeFactory&MockObject { $mockedTimeFactory = $this->createMock(ITimeFactory::class); $mockedTimeFactory->expects($this->any()) ->method('getTime') @@ -113,11 +103,7 @@ class ExpirationTest extends \Test\TestCase { return $mockedTimeFactory; } - /** - * @param string $returnValue - * @return IConfig|MockObject - */ - private function getMockedConfig($returnValue) { + private function getMockedConfig(string $returnValue): IConfig&MockObject { $mockedConfig = $this->createMock(IConfig::class); $mockedConfig->expects($this->any()) ->method('getSystemValue') diff --git a/apps/files_versions/tests/StorageTest.php b/apps/files_versions/tests/StorageTest.php index e085729eddd..443cff3ee06 100644 --- a/apps/files_versions/tests/StorageTest.php +++ b/apps/files_versions/tests/StorageTest.php @@ -12,6 +12,7 @@ use OCA\Files_Versions\Expiration; use OCA\Files_Versions\Storage; use OCP\Files\IRootFolder; use OCP\Files\NotFoundException; +use OCP\Server; use Test\TestCase; use Test\Traits\UserTrait; @@ -23,7 +24,7 @@ class StorageTest extends TestCase { private $versionsRoot; private $userFolder; - private $expireTimestamp = 10; + private int $expireTimestamp = 10; protected function setUp(): void { parent::setUp(); @@ -40,18 +41,18 @@ class StorageTest extends TestCase { $this->createUser('version_test', ''); $this->loginAsUser('version_test'); /** @var IRootFolder $root */ - $root = \OC::$server->get(IRootFolder::class); + $root = Server::get(IRootFolder::class); $this->userFolder = $root->getUserFolder('version_test'); } - protected function createPastFile(string $path, int $mtime) { + protected function createPastFile(string $path, int $mtime): void { try { $file = $this->userFolder->get($path); + $file->putContent((string)$mtime); } catch (NotFoundException $e) { - $file = $this->userFolder->newFile($path); + $file = $this->userFolder->newFile($path, (string)$mtime); } - $file->putContent((string)$mtime); $file->touch($mtime); } diff --git a/apps/files_versions/tests/VersioningTest.php b/apps/files_versions/tests/VersioningTest.php index 20a0a783ecc..c9f7d27d7ab 100644 --- a/apps/files_versions/tests/VersioningTest.php +++ b/apps/files_versions/tests/VersioningTest.php @@ -1,4 +1,6 @@ <?php + +declare(strict_types=1); /** * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors * SPDX-FileCopyrightText: 2016 ownCloud, Inc. @@ -11,16 +13,20 @@ 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; @@ -63,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(); } @@ -78,8 +84,11 @@ 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) { @@ -93,7 +102,7 @@ class VersioningTest extends \Test\TestCase { // 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); @@ -131,8 +140,8 @@ class VersioningTest extends \Test\TestCase { /** * @medium * test expire logic - * @dataProvider versionsProvider */ + #[\PHPUnit\Framework\Attributes\DataProvider('versionsProvider')] public function testGetExpireList($versions, $sizeOfAllDeletedFiles): void { // last interval end at 2592000 @@ -156,7 +165,7 @@ class VersioningTest extends \Test\TestCase { } } - public function versionsProvider() { + public static function versionsProvider(): array { return [ // first set of versions uniformly distributed versions [ @@ -329,14 +338,14 @@ 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(Constants::PERMISSION_ALL); - $share = \OC::$server->getShareManager()->createShare($share); - \OC::$server->getShareManager()->acceptShare($share, self::TEST_VERSIONS_USER2); + $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); @@ -355,7 +364,7 @@ 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(): void { @@ -396,14 +405,14 @@ class VersioningTest extends \Test\TestCase { $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(Constants::PERMISSION_ALL); - $share = \OC::$server->getShareManager()->createShare($share); - \OC::$server->getShareManager()->acceptShare($share, self::TEST_VERSIONS_USER2); + $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'; @@ -423,8 +432,9 @@ class VersioningTest extends \Test\TestCase { $this->rootView->file_put_contents($v2, 'version2'); // move file into the shared folder as recipient - 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)); @@ -438,21 +448,21 @@ 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(): 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(Constants::PERMISSION_ALL); - $share = \OC::$server->getShareManager()->createShare($share); - \OC::$server->getShareManager()->acceptShare($share, self::TEST_VERSIONS_USER2); + $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'; @@ -489,7 +499,7 @@ 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(): void { @@ -512,14 +522,14 @@ 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(Constants::PERMISSION_READ | Constants::PERMISSION_UPDATE | Constants::PERMISSION_SHARE); - $share = \OC::$server->getShareManager()->createShare($share); - \OC::$server->getShareManager()->acceptShare($share, self::TEST_VERSIONS_USER2); + $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); @@ -538,7 +548,7 @@ 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(): void { @@ -655,14 +665,14 @@ class VersioningTest extends \Test\TestCase { $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(Constants::PERMISSION_READ); - $share = \OC::$server->getShareManager()->createShare($share); - \OC::$server->getShareManager()->acceptShare($share, self::TEST_VERSIONS_USER2); + $share = Server::get(\OCP\Share\IManager::class)->createShare($share); + Server::get(\OCP\Share\IManager::class)->acceptShare($share, self::TEST_VERSIONS_USER2); $versions = $this->createAndCheckVersions( Filesystem::getView(), @@ -675,11 +685,11 @@ class VersioningTest extends \Test\TestCase { $firstVersion = current($versions); - $this->assertFalse(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'); } @@ -694,14 +704,14 @@ 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(Constants::PERMISSION_ALL); - $share = \OC::$server->getShareManager()->createShare($share); - $shareManager = \OC::$server->getShareManager(); + $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'); @@ -722,7 +732,7 @@ class VersioningTest extends \Test\TestCase { $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'); } @@ -735,8 +745,8 @@ 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()) @@ -755,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'); @@ -802,8 +812,13 @@ 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 = Server::get(IVersionManager::class); $versions = $versionManager->getVersionsForFile($this->user1, $info1); @@ -811,13 +826,8 @@ class VersioningTest extends \Test\TestCase { 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); @@ -893,14 +903,14 @@ class VersioningTest extends \Test\TestCase { 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(Constants::PERMISSION_ALL); - $share = \OC::$server->getShareManager()->createShare($share); - \OC::$server->getShareManager()->acceptShare($share, self::TEST_VERSIONS_USER2); + $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); @@ -909,7 +919,7 @@ class VersioningTest extends \Test\TestCase { 'folder/test.txt' ); - \OC::$server->getShareManager()->deleteShare($share); + Server::get(\OCP\Share\IManager::class)->deleteShare($share); } /** @@ -933,11 +943,7 @@ class VersioningTest extends \Test\TestCase { ); } - /** - * @param View $view - * @param string $path - */ - private function createAndCheckVersions(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'); @@ -959,15 +965,11 @@ 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(); @@ -979,6 +981,11 @@ class VersioningTest extends \Test\TestCase { } } +class DummyHookListener { + public function callback() { + } +} + // extend the original class to make it possible to test protected methods class VersionStorageToTest extends Storage { diff --git a/apps/files_versions/tests/Versions/VersionManagerTest.php b/apps/files_versions/tests/Versions/VersionManagerTest.php index a50781b899d..79caa65d5f1 100644 --- a/apps/files_versions/tests/Versions/VersionManagerTest.php +++ b/apps/files_versions/tests/Versions/VersionManagerTest.php @@ -6,12 +6,16 @@ declare(strict_types=1); * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ -namespace OCA\files_versions\tests\Versions; +namespace OCA\Files_Versions\Tests\Versions; use OC\Files\Storage\Local; +use OCA\Files_Versions\Events\VersionRestoredEvent; +use OCA\Files_Versions\Versions\IVersion; use OCA\Files_Versions\Versions\IVersionBackend; use OCA\Files_Versions\Versions\VersionManager; +use OCP\EventDispatcher\IEventDispatcher; use OCP\Files\Storage\IStorage; +use PHPUnit\Framework\MockObject\MockObject; use Test\TestCase; class VersionManagerTest extends TestCase { @@ -22,15 +26,16 @@ class VersionManagerTest extends TestCase { return $backend; } - private function getStorage(string $class): IStorage { + private function getStorage(string $class): IStorage&MockObject { return $this->getMockBuilder($class) ->disableOriginalConstructor() - ->setMethodsExcept(['instanceOfStorage']) + ->onlyMethods(array_diff(get_class_methods($class), ['instanceOfStorage'])) ->getMock(); } public function testGetBackendSingle(): void { - $manager = new VersionManager(); + $dispatcher = $this->createMock(IEventDispatcher::class); + $manager = new VersionManager($dispatcher); $backend = $this->getBackend(); $manager->registerBackend(IStorage::class, $backend); @@ -38,7 +43,8 @@ class VersionManagerTest extends TestCase { } public function testGetBackendMoreSpecific(): void { - $manager = new VersionManager(); + $dispatcher = $this->createMock(IEventDispatcher::class); + $manager = new VersionManager($dispatcher); $backend1 = $this->getBackend(); $backend2 = $this->getBackend(); $manager->registerBackend(IStorage::class, $backend1); @@ -48,7 +54,8 @@ class VersionManagerTest extends TestCase { } public function testGetBackendNoUse(): void { - $manager = new VersionManager(); + $dispatcher = $this->createMock(IEventDispatcher::class); + $manager = new VersionManager($dispatcher); $backend1 = $this->getBackend(); $backend2 = $this->getBackend(false); $manager->registerBackend(IStorage::class, $backend1); @@ -58,7 +65,8 @@ class VersionManagerTest extends TestCase { } public function testGetBackendMultiple(): void { - $manager = new VersionManager(); + $dispatcher = $this->createMock(IEventDispatcher::class); + $manager = new VersionManager($dispatcher); $backend1 = $this->getBackend(); $backend2 = $this->getBackend(false); $backend3 = $this->getBackend(); @@ -68,4 +76,65 @@ class VersionManagerTest extends TestCase { $this->assertEquals($backend3, $manager->getBackendForStorage($this->getStorage(Local::class))); } + + public function testRollbackSuccess(): void { + $versionMock = $this->createMock(IVersion::class); + $backendMock = $this->createMock(IVersionBackend::class); + + $backendMock->expects($this->once()) + ->method('rollback') + ->with($versionMock) + ->willReturn(true); + + $versionMock->method('getBackend')->willReturn($backendMock); + + $dispatcherMock = $this->createMock(IEventDispatcher::class); + $dispatcherMock->expects($this->once()) + ->method('dispatchTyped') + ->with($this->isInstanceOf(VersionRestoredEvent::class)); + + $manager = new VersionManager($dispatcherMock); + + $this->assertTrue($manager->rollback($versionMock)); + } + + public function testRollbackNull(): void { + $versionMock = $this->createMock(IVersion::class); + $backendMock = $this->createMock(IVersionBackend::class); + + $backendMock->expects($this->once()) + ->method('rollback') + ->with($versionMock) + ->willReturn(null); + + $versionMock->method('getBackend')->willReturn($backendMock); + + $dispatcherMock = $this->createMock(IEventDispatcher::class); + $dispatcherMock->expects($this->once()) + ->method('dispatchTyped') + ->with($this->isInstanceOf(VersionRestoredEvent::class)); + + $manager = new VersionManager($dispatcherMock); + + $this->assertNull($manager->rollback($versionMock)); + } + + public function testRollbackFailure(): void { + $versionMock = $this->createMock(IVersion::class); + $backendMock = $this->createMock(IVersionBackend::class); + + $backendMock->expects($this->once()) + ->method('rollback') + ->with($versionMock) + ->willReturn(false); + + $versionMock->method('getBackend')->willReturn($backendMock); + + $dispatcherMock = $this->createMock(IEventDispatcher::class); + $dispatcherMock->expects($this->never())->method('dispatchTyped'); + + $manager = new VersionManager($dispatcherMock); + + $this->assertFalse($manager->rollback($versionMock)); + } } |