aboutsummaryrefslogtreecommitdiffstats
path: root/apps/files_versions/tests
diff options
context:
space:
mode:
Diffstat (limited to 'apps/files_versions/tests')
-rw-r--r--apps/files_versions/tests/BackgroundJob/ExpireVersionsTest.php17
-rw-r--r--apps/files_versions/tests/Command/CleanupTest.php55
-rw-r--r--apps/files_versions/tests/Command/ExpireTest.php2
-rw-r--r--apps/files_versions/tests/Controller/PreviewControllerTest.php43
-rw-r--r--apps/files_versions/tests/ExpirationTest.php28
-rw-r--r--apps/files_versions/tests/StorageTest.php11
-rw-r--r--apps/files_versions/tests/VersioningTest.php125
-rw-r--r--apps/files_versions/tests/Versions/VersionManagerTest.php83
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));
+ }
}