diff options
author | Joas Schilling <nickvergessen@owncloud.com> | 2016-05-17 11:42:03 +0200 |
---|---|---|
committer | Joas Schilling <nickvergessen@owncloud.com> | 2016-05-25 15:00:00 +0200 |
commit | 3f0b2d148d875a2a4961a5b27309d379b9de1329 (patch) | |
tree | 8f28fbc44579568bef4c429d6422a87a5c45c8ca /apps/files_sharing/tests/UpdaterTest.php | |
parent | b72706b450dd483bc25b0fd95266a8ac6c635ae6 (diff) | |
download | nextcloud-server-3f0b2d148d875a2a4961a5b27309d379b9de1329.tar.gz nextcloud-server-3f0b2d148d875a2a4961a5b27309d379b9de1329.zip |
Move tests to PSR-4
Diffstat (limited to 'apps/files_sharing/tests/UpdaterTest.php')
-rw-r--r-- | apps/files_sharing/tests/UpdaterTest.php | 233 |
1 files changed, 233 insertions, 0 deletions
diff --git a/apps/files_sharing/tests/UpdaterTest.php b/apps/files_sharing/tests/UpdaterTest.php new file mode 100644 index 00000000000..659c04ad987 --- /dev/null +++ b/apps/files_sharing/tests/UpdaterTest.php @@ -0,0 +1,233 @@ +<?php +/** + * @author Björn Schießle <schiessle@owncloud.com> + * @author Joas Schilling <nickvergessen@owncloud.com> + * @author Morris Jobke <hey@morrisjobke.de> + * @author Robin Appelman <icewind@owncloud.com> + * @author Thomas Müller <thomas.mueller@tmit.eu> + * @author Vincent Petry <pvince81@owncloud.com> + * + * @copyright Copyright (c) 2016, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OCA\Files_Sharing\Tests; + +/** + * Class UpdaterTest + * + * @group DB + */ +class UpdaterTest extends TestCase { + + const TEST_FOLDER_NAME = '/folder_share_updater_test'; + + public static function setUpBeforeClass() { + parent::setUpBeforeClass(); + \OCA\Files_Sharing\Helper::registerHooks(); + } + + protected function setUp() { + parent::setUp(); + + $this->folder = self::TEST_FOLDER_NAME; + + $this->filename = '/share-updater-test.txt'; + + // save file with content + $this->view->file_put_contents($this->filename, $this->data); + $this->view->mkdir($this->folder); + $this->view->file_put_contents($this->folder . '/' . $this->filename, $this->data); + } + + protected function tearDown() { + if ($this->view) { + $this->view->unlink($this->filename); + $this->view->deleteAll($this->folder); + } + + parent::tearDown(); + } + + /** + * test deletion of a folder which contains share mount points. Share mount + * points should be unshared before the folder gets deleted so + * that the mount point doesn't end up at the trash bin + */ + function testDeleteParentFolder() { + $status = \OC_App::isEnabled('files_trashbin'); + \OC_App::enable('files_trashbin'); + + \OCA\Files_Trashbin\Trashbin::registerHooks(); + + $fileinfo = \OC\Files\Filesystem::getFileInfo($this->folder); + $this->assertTrue($fileinfo instanceof \OC\Files\FileInfo); + + $this->share( + \OCP\Share::SHARE_TYPE_USER, + $this->folder, + self::TEST_FILES_SHARING_API_USER1, + self::TEST_FILES_SHARING_API_USER2, + \OCP\Constants::PERMISSION_ALL + ); + + $this->loginHelper(self::TEST_FILES_SHARING_API_USER2); + $view = new \OC\Files\View('/' . self::TEST_FILES_SHARING_API_USER2 . '/files'); + + // check if user2 can see the shared folder + $this->assertTrue($view->file_exists($this->folder)); + + $foldersShared = \OCP\Share::getItemsSharedWith('folder'); + $this->assertSame(1, count($foldersShared)); + + $view->mkdir("localFolder"); + $view->file_put_contents("localFolder/localFile.txt", "local file"); + + $view->rename($this->folder, 'localFolder/' . $this->folder); + + // share mount point should now be moved to the subfolder + $this->assertFalse($view->file_exists($this->folder)); + $this->assertTrue($view->file_exists('localFolder/' .$this->folder)); + + $view->unlink('localFolder'); + + $this->loginHelper(self::TEST_FILES_SHARING_API_USER2); + + // shared folder should be unshared + $foldersShared = \OCP\Share::getItemsSharedWith('folder'); + $this->assertTrue(empty($foldersShared)); + + // trashbin should contain the local file but not the mount point + $rootView = new \OC\Files\View('/' . self::TEST_FILES_SHARING_API_USER2); + $trashContent = \OCA\Files_Trashbin\Helper::getTrashFiles('/', self::TEST_FILES_SHARING_API_USER2); + $this->assertSame(1, count($trashContent)); + $firstElement = reset($trashContent); + $timestamp = $firstElement['mtime']; + $this->assertTrue($rootView->file_exists('files_trashbin/files/localFolder.d' . $timestamp . '/localFile.txt')); + $this->assertFalse($rootView->file_exists('files_trashbin/files/localFolder.d' . $timestamp . '/' . $this->folder)); + + //cleanup + $rootView->deleteAll('files_trashin'); + + if ($status === false) { + \OC_App::disable('files_trashbin'); + } + + \OC\Files\Filesystem::getLoader()->removeStorageWrapper('oc_trashbin'); + } + + public function shareFolderProvider() { + return [ + ['/'], + ['/my_shares'], + ]; + } + + /** + * if a file gets shared the etag for the recipients root should change + * + * @dataProvider shareFolderProvider + * + * @param string $shareFolder share folder to use + */ + public function testShareFile($shareFolder) { + $config = \OC::$server->getConfig(); + $oldShareFolder = $config->getSystemValue('share_folder'); + $config->setSystemValue('share_folder', $shareFolder); + + $this->loginHelper(self::TEST_FILES_SHARING_API_USER2); + + $beforeShareRoot = \OC\Files\Filesystem::getFileInfo(''); + $etagBeforeShareRoot = $beforeShareRoot->getEtag(); + + \OC\Files\Filesystem::mkdir($shareFolder); + + $beforeShareDir = \OC\Files\Filesystem::getFileInfo($shareFolder); + $etagBeforeShareDir = $beforeShareDir->getEtag(); + + $this->loginHelper(self::TEST_FILES_SHARING_API_USER1); + + $share = $this->share( + \OCP\Share::SHARE_TYPE_USER, + $this->folder, + self::TEST_FILES_SHARING_API_USER1, + self::TEST_FILES_SHARING_API_USER2, + \OCP\Constants::PERMISSION_ALL + ); + + $this->loginHelper(self::TEST_FILES_SHARING_API_USER2); + + $afterShareRoot = \OC\Files\Filesystem::getFileInfo(''); + $etagAfterShareRoot = $afterShareRoot->getEtag(); + + $afterShareDir = \OC\Files\Filesystem::getFileInfo($shareFolder); + $etagAfterShareDir = $afterShareDir->getEtag(); + + $this->assertTrue(is_string($etagBeforeShareRoot)); + $this->assertTrue(is_string($etagBeforeShareDir)); + $this->assertTrue(is_string($etagAfterShareRoot)); + $this->assertTrue(is_string($etagAfterShareDir)); + $this->assertTrue($etagBeforeShareRoot !== $etagAfterShareRoot); + $this->assertTrue($etagBeforeShareDir !== $etagAfterShareDir); + + // cleanup + $this->loginHelper(self::TEST_FILES_SHARING_API_USER1); + $this->shareManager->deleteShare($share); + + $config->setSystemValue('share_folder', $oldShareFolder); + } + + /** + * if a folder gets renamed all children mount points should be renamed too + */ + function testRename() { + + $fileinfo = \OC\Files\Filesystem::getFileInfo($this->folder); + + $share = $this->share( + \OCP\Share::SHARE_TYPE_USER, + $this->folder, + self::TEST_FILES_SHARING_API_USER1, + self::TEST_FILES_SHARING_API_USER2, + \OCP\Constants::PERMISSION_ALL + ); + + $this->loginHelper(self::TEST_FILES_SHARING_API_USER2); + + // make sure that the shared folder exists + $this->assertTrue(\OC\Files\Filesystem::file_exists($this->folder)); + + \OC\Files\Filesystem::mkdir('oldTarget'); + \OC\Files\Filesystem::mkdir('oldTarget/subfolder'); + \OC\Files\Filesystem::mkdir('newTarget'); + + \OC\Files\Filesystem::rename($this->folder, 'oldTarget/subfolder/' . $this->folder); + + // re-login to make sure that the new mount points are initialized + $this->loginHelper(self::TEST_FILES_SHARING_API_USER2); + + \OC\Files\Filesystem::rename('/oldTarget', '/newTarget/oldTarget'); + + // re-login to make sure that the new mount points are initialized + $this->loginHelper(self::TEST_FILES_SHARING_API_USER2); + + $this->assertTrue(\OC\Files\Filesystem::file_exists('/newTarget/oldTarget/subfolder/' . $this->folder)); + + // cleanup + $this->shareManager->deleteShare($share); + } + +} |