diff options
author | Bjoern Schiessle <schiessle@owncloud.com> | 2014-03-12 11:00:30 +0100 |
---|---|---|
committer | Bjoern Schiessle <schiessle@owncloud.com> | 2014-03-25 17:52:45 +0100 |
commit | 31681a3a27d1f36a980a044479a5948b4310ebe5 (patch) | |
tree | 2ca8d32d001f4941dbdefbe842ae417c7911d390 | |
parent | 3653a51af2f21065f7afad40624e053f0dfaadb3 (diff) | |
download | nextcloud-server-31681a3a27d1f36a980a044479a5948b4310ebe5.tar.gz nextcloud-server-31681a3a27d1f36a980a044479a5948b4310ebe5.zip |
finally fix the paths for the OCS Share API
-rw-r--r-- | apps/files_sharing/tests/api.php | 85 | ||||
-rw-r--r-- | lib/private/share/share.php | 6 |
2 files changed, 88 insertions, 3 deletions
diff --git a/apps/files_sharing/tests/api.php b/apps/files_sharing/tests/api.php index 4ada0118d37..e3c5b6e4315 100644 --- a/apps/files_sharing/tests/api.php +++ b/apps/files_sharing/tests/api.php @@ -478,6 +478,89 @@ class Test_Files_Sharing_Api extends Test_Files_Sharing_Base { } /** + * @brief test multiple shared folder if the path gets constructed correctly + * @medium + */ + function testGetShareMultipleSharedFolder() { + + self::loginHelper(self::TEST_FILES_SHARING_API_USER1); + + $fileInfo1 = $this->view->getFileInfo($this->folder); + $fileInfo2 = $this->view->getFileInfo($this->folder . $this->subfolder); + + + // share sub-folder to user2 + $result = \OCP\Share::shareItem('folder', $fileInfo2['fileid'], \OCP\Share::SHARE_TYPE_USER, + \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2, 31); + + // share was successful? + $this->assertTrue($result); + + // share folder to user2 + $result = \OCP\Share::shareItem('folder', $fileInfo1['fileid'], \OCP\Share::SHARE_TYPE_USER, + \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2, 31); + + // share was successful? + $this->assertTrue($result); + + + // login as user2 + self::loginHelper(self::TEST_FILES_SHARING_API_USER2); + + $result = \OCP\Share::shareItem('folder', $fileInfo2['fileid'], \OCP\Share::SHARE_TYPE_LINK, null, 1); + // share was successful? + $this->assertTrue(is_string($result)); + + + // ask for shared/subfolder + $expectedPath1 = '/Shared' . $this->subfolder; + $_GET['path'] = $expectedPath1; + + $result1 = Share\Api::getAllShares(array()); + + $this->assertTrue($result1->succeeded()); + + // test should return one share within $this->folder + $data1 = $result1->getData(); + $share1 = reset($data1); + + // ask for shared/folder/subfolder + $expectedPath2 = '/Shared' . $this->folder . $this->subfolder; + $_GET['path'] = $expectedPath2; + + $result2 = Share\Api::getAllShares(array()); + + $this->assertTrue($result2->succeeded()); + + // test should return one share within $this->folder + $data2 = $result2->getData(); + $share2 = reset($data2); + + + // validate results + // we should get exactly one result each time + $this->assertEquals(1, count($data1)); + $this->assertEquals(1, count($data2)); + + $this->assertEquals($expectedPath1, $share1['path']); + $this->assertEquals($expectedPath2, $share2['path']); + + + // cleanup + $result = \OCP\Share::unshare('folder', $fileInfo2['fileid'], \OCP\Share::SHARE_TYPE_LINK, null); + $this->assertTrue($result); + + self::loginHelper(self::TEST_FILES_SHARING_API_USER1); + $result = \OCP\Share::unshare('folder', $fileInfo1['fileid'], \OCP\Share::SHARE_TYPE_USER, + \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2); + $this->assertTrue($result); + $result = \OCP\Share::unshare('folder', $fileInfo2['fileid'], \OCP\Share::SHARE_TYPE_USER, + \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2); + $this->assertTrue($result); + + } + + /** * @brief test re-re-share of folder if the path gets constructed correctly * @medium */ @@ -803,5 +886,5 @@ class Test_Files_Sharing_Api extends Test_Files_Sharing_Base { class TestShareApi extends \OCA\Files\Share\Api { public function correctPathTest($path, $folder) { return self::correctPath($path, $folder); -} + } } diff --git a/lib/private/share/share.php b/lib/private/share/share.php index e4886abd2b5..a385328edc1 100644 --- a/lib/private/share/share.php +++ b/lib/private/share/share.php @@ -1085,10 +1085,12 @@ class Share extends \OC\Share\Constants { // Remove root from file source paths if retrieving own shared items if (isset($uidOwner) && isset($row['path'])) { if (isset($row['parent'])) { + // FIXME: Doesn't always construct the correct path, example: + // Folder '/a/b', share '/a' and '/a/b' to user2 + // user2 reshares /Shared/b and ask for share status of /Shared/a/b + // expected result: path=/Shared/a/b; actual result /Shared/b because of the parent $query = \OC_DB::prepare('SELECT `file_target` FROM `*PREFIX*share` WHERE `id` = ?'); $parentResult = $query->execute(array($row['parent'])); - //$query = \OC_DB::prepare('SELECT `file_target` FROM `*PREFIX*share` WHERE `id` = ?'); - //$parentResult = $query->execute(array($row['id'])); if (\OC_DB::isError($result)) { \OC_Log::write('OCP\Share', 'Can\'t select parent: ' . \OC_DB::getErrorMessage($result) . ', select=' . $select . ' where=' . $where, |