summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjoern Schiessle <schiessle@owncloud.com>2014-03-12 11:00:30 +0100
committerBjoern Schiessle <schiessle@owncloud.com>2014-03-25 17:52:45 +0100
commit31681a3a27d1f36a980a044479a5948b4310ebe5 (patch)
tree2ca8d32d001f4941dbdefbe842ae417c7911d390
parent3653a51af2f21065f7afad40624e053f0dfaadb3 (diff)
downloadnextcloud-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.php85
-rw-r--r--lib/private/share/share.php6
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,