diff options
author | Bjoern Schiessle <schiessle@owncloud.com> | 2014-04-30 12:49:16 +0200 |
---|---|---|
committer | Bjoern Schiessle <schiessle@owncloud.com> | 2014-04-30 12:49:16 +0200 |
commit | 20e4ad382b69d728c3044b2b96ef51413d5a4e8f (patch) | |
tree | 9e0c1f09d3eb41f13344673178049abdb9727fd5 | |
parent | 57b671ebecfc92388e1a90c9e29eca8427247d0e (diff) | |
download | nextcloud-server-20e4ad382b69d728c3044b2b96ef51413d5a4e8f.tar.gz nextcloud-server-20e4ad382b69d728c3044b2b96ef51413d5a4e8f.zip |
get the correct owner path for part files
-rw-r--r-- | apps/files_sharing/lib/sharedstorage.php | 10 | ||||
-rw-r--r-- | apps/files_sharing/tests/sharedstorage.php | 83 |
2 files changed, 92 insertions, 1 deletions
diff --git a/apps/files_sharing/lib/sharedstorage.php b/apps/files_sharing/lib/sharedstorage.php index 2252ec6a1a6..4733dff3d14 100644 --- a/apps/files_sharing/lib/sharedstorage.php +++ b/apps/files_sharing/lib/sharedstorage.php @@ -379,7 +379,15 @@ class Shared extends \OC\Files\Storage\Common { // otherwise DELETE and CREATE permissions required ($this->isDeletable($path1) && $this->isCreatable(dirname($path2)))) { - list($user1, $path1) = \OCA\Files_Sharing\Helper::getUidAndFilename($relPath1); + $pathinfo = pathinfo($relPath1); + // for part files we need to ask for the owner and path from the parent directory because + // the file cache doesn't return any results for part files + if ($pathinfo['extension'] === 'part') { + list($user1, $path1) = \OCA\Files_Sharing\Helper::getUidAndFilename($pathinfo['dirname']); + $path1 = $path1 . '/' . $pathinfo['basename']; + } else { + list($user1, $path1) = \OCA\Files_Sharing\Helper::getUidAndFilename($relPath1); + } $targetFilename = basename($relPath2); list($user2, $path2) = \OCA\Files_Sharing\Helper::getUidAndFilename(dirname($relPath2)); $rootView = new \OC\Files\View(''); diff --git a/apps/files_sharing/tests/sharedstorage.php b/apps/files_sharing/tests/sharedstorage.php new file mode 100644 index 00000000000..66518a2633f --- /dev/null +++ b/apps/files_sharing/tests/sharedstorage.php @@ -0,0 +1,83 @@ +<?php +/** + * ownCloud + * + * @author Bjoern Schiessle + * @copyright 2014 Bjoern Schiessle <schiessle@owncloud.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library 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 along with this library. If not, see <http://www.gnu.org/licenses/>. + * + */ + +require_once __DIR__ . '/base.php'; + +use OCA\Files\Share; + +/** + * Class Test_Files_Sharing_Api + */ +class Test_Files_Sharing_Storage extends Test_Files_Sharing_Base { + + function setUp() { + parent::setUp(); + + $this->folder = '/folder_share_storage_test'; + + $this->filename = '/share-api-storage.txt'; + + // save file with content + $this->view->mkdir($this->folder); + } + + function tearDown() { + $this->view->deleteAll($this->folder); + + parent::tearDown(); + } + + /** + * @medium + */ + function testRenamePartFile() { + + // share to user + $fileinfo = $this->view->getFileInfo($this->folder); + $result = \OCP\Share::shareItem('folder', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_USER, + self::TEST_FILES_SHARING_API_USER2, 31); + + $this->assertTrue($result); + + self::loginHelper(self::TEST_FILES_SHARING_API_USER2); + $user2View = new \OC\Files\View('/' . self::TEST_FILES_SHARING_API_USER2 . '/files'); + + $this->assertTrue($user2View->file_exists($this->folder)); + + // create part file + $result = $user2View->file_put_contents($this->folder. '/foo.txt.part', 'some test data'); + + $this->assertTrue(is_int($result)); + // rename part file to real file + $result = $user2View->rename($this->folder. '/foo.txt.part', $this->folder. '/foo.txt'); + + $this->assertTrue($result); + + // check if the new file really exists + $this->assertTrue($user2View->file_exists( $this->folder. '/foo.txt')); + + // check if the rename also affected the owner + self::loginHelper(self::TEST_FILES_SHARING_API_USER1); + + $this->assertTrue($this->view->file_exists( $this->folder. '/foo.txt')); + } +} |