diff options
Diffstat (limited to 'apps/files_versions/tests/StorageTest.php')
-rw-r--r-- | apps/files_versions/tests/StorageTest.php | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/apps/files_versions/tests/StorageTest.php b/apps/files_versions/tests/StorageTest.php new file mode 100644 index 00000000000..443cff3ee06 --- /dev/null +++ b/apps/files_versions/tests/StorageTest.php @@ -0,0 +1,101 @@ +<?php + +declare(strict_types=1); +/** + * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace OCA\files_versions\tests; + +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; + +/** + * @group DB + */ +class StorageTest extends TestCase { + use UserTrait; + + private $versionsRoot; + private $userFolder; + private int $expireTimestamp = 10; + + protected function setUp(): void { + parent::setUp(); + + $expiration = $this->createMock(Expiration::class); + $expiration->method('getMaxAgeAsTimestamp') + ->willReturnCallback(function () { + return $this->expireTimestamp; + }); + $this->overwriteService(Expiration::class, $expiration); + + \OC::$server->boot(); + + $this->createUser('version_test', ''); + $this->loginAsUser('version_test'); + /** @var IRootFolder $root */ + $root = Server::get(IRootFolder::class); + $this->userFolder = $root->getUserFolder('version_test'); + } + + + 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, (string)$mtime); + } + $file->touch($mtime); + } + + public function testExpireMaxAge(): void { + $this->userFolder->newFolder('folder1'); + $this->userFolder->newFolder('folder1/sub1'); + $this->userFolder->newFolder('folder2'); + + $this->createPastFile('file1', 100); + $this->createPastFile('file1', 500); + $this->createPastFile('file1', 900); + + $this->createPastFile('folder1/file2', 100); + $this->createPastFile('folder1/file2', 200); + $this->createPastFile('folder1/file2', 300); + + $this->createPastFile('folder1/sub1/file3', 400); + $this->createPastFile('folder1/sub1/file3', 500); + $this->createPastFile('folder1/sub1/file3', 600); + + $this->createPastFile('folder2/file4', 100); + $this->createPastFile('folder2/file4', 600); + $this->createPastFile('folder2/file4', 800); + + $this->assertCount(2, Storage::getVersions('version_test', 'file1')); + $this->assertCount(2, Storage::getVersions('version_test', 'folder1/file2')); + $this->assertCount(2, Storage::getVersions('version_test', 'folder1/sub1/file3')); + $this->assertCount(2, Storage::getVersions('version_test', 'folder2/file4')); + + $this->expireTimestamp = 150; + Storage::expireOlderThanMaxForUser('version_test'); + + $this->assertCount(1, Storage::getVersions('version_test', 'file1')); + $this->assertCount(1, Storage::getVersions('version_test', 'folder1/file2')); + $this->assertCount(2, Storage::getVersions('version_test', 'folder1/sub1/file3')); + $this->assertCount(1, Storage::getVersions('version_test', 'folder2/file4')); + + $this->expireTimestamp = 550; + Storage::expireOlderThanMaxForUser('version_test'); + + $this->assertCount(0, Storage::getVersions('version_test', 'file1')); + $this->assertCount(0, Storage::getVersions('version_test', 'folder1/file2')); + $this->assertCount(0, Storage::getVersions('version_test', 'folder1/sub1/file3')); + $this->assertCount(1, Storage::getVersions('version_test', 'folder2/file4')); + } +} |