Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'apps/files_sharing/tests/share.php')
-rw-r--r--apps/files_sharing/tests/share.php160
1 files changed, 124 insertions, 36 deletions
diff --git a/apps/files_sharing/tests/share.php b/apps/files_sharing/tests/share.php
index 31246c5df44..fe80cfca781 100644
--- a/apps/files_sharing/tests/share.php
+++ b/apps/files_sharing/tests/share.php
@@ -57,6 +57,10 @@ class Test_Files_Sharing extends Test_Files_Sharing_Base {
self::$tempStorage = null;
+ // clear database table
+ $query = \OCP\DB::prepare('DELETE FROM `*PREFIX*share`');
+ $query->execute();
+
parent::tearDown();
}
@@ -68,10 +72,6 @@ class Test_Files_Sharing extends Test_Files_Sharing_Base {
$fileinfo = $this->view->getFileInfo($this->filename);
- $pathinfo = pathinfo($this->filename);
-
- $duplicate = '/' . $pathinfo['filename'] . ' (2).' . $pathinfo['extension'];
-
$result = \OCP\Share::shareItem('file', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_USER,
\Test_Files_Sharing::TEST_FILES_SHARING_API_USER2, 31);
@@ -84,47 +84,146 @@ class Test_Files_Sharing extends Test_Files_Sharing_Base {
self::loginHelper(self::TEST_FILES_SHARING_API_USER2);
$this->assertTrue(\OC\Files\Filesystem::file_exists($this->filename));
- $this->assertTrue(\OC\Files\Filesystem::file_exists($duplicate));
self::loginHelper(self::TEST_FILES_SHARING_API_USER3);
$this->assertTrue(\OC\Files\Filesystem::file_exists($this->filename));
- $this->assertFalse(\OC\Files\Filesystem::file_exists($duplicate));
self::loginHelper(self::TEST_FILES_SHARING_API_USER2);
\OC\Files\Filesystem::unlink($this->filename);
self::loginHelper(self::TEST_FILES_SHARING_API_USER2);
+ // both group share and user share should be gone
$this->assertFalse(\OC\Files\Filesystem::file_exists($this->filename));
- $this->assertTrue(\OC\Files\Filesystem::file_exists($duplicate));
// for user3 nothing should change
self::loginHelper(self::TEST_FILES_SHARING_API_USER3);
$this->assertTrue(\OC\Files\Filesystem::file_exists($this->filename));
- $this->assertFalse(\OC\Files\Filesystem::file_exists($duplicate));
+ }
+
+ /**
+ * if a file was shared as group share and as individual share they should be grouped
+ */
+ function testGroupingOfShares() {
+
+ $fileinfo = $this->view->getFileInfo($this->filename);
+
+ $result = \OCP\Share::shareItem('file', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP,
+ \Test_Files_Sharing::TEST_FILES_SHARING_API_GROUP1, \OCP\PERMISSION_READ);
+
+ $this->assertTrue($result);
+
+ $result = \OCP\Share::shareItem('file', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_USER,
+ \Test_Files_Sharing::TEST_FILES_SHARING_API_USER2, \OCP\PERMISSION_UPDATE);
+
+ $this->assertTrue($result);
self::loginHelper(self::TEST_FILES_SHARING_API_USER2);
- \OC\Files\Filesystem::unlink($duplicate);
- self::loginHelper(self::TEST_FILES_SHARING_API_USER2);
- $this->assertFalse(\OC\Files\Filesystem::file_exists($this->filename));
- $this->assertFalse(\OC\Files\Filesystem::file_exists($duplicate));
- // for user3 nothing should change
- self::loginHelper(self::TEST_FILES_SHARING_API_USER3);
- $this->assertTrue(\OC\Files\Filesystem::file_exists($this->filename));
- $this->assertFalse(\OC\Files\Filesystem::file_exists($duplicate));
+ $result = \OCP\Share::getItemSharedWith('file', null);
+
+ $this->assertTrue(is_array($result));
+
+ // test should return exactly one shares created from testCreateShare()
+ $this->assertSame(1, count($result));
+
+ $share = reset($result);
+ $this->assertSame(\OCP\PERMISSION_READ | \OCP\PERMISSION_UPDATE, $share['permissions']);
+
+ \OC\Files\Filesystem::rename($this->filename, $this->filename . '-renamed');
+
+ $result = \OCP\Share::getItemSharedWith('file', null);
+
+ $this->assertTrue(is_array($result));
+
+ // test should return exactly one shares created from testCreateShare()
+ $this->assertSame(1, count($result));
+
+ $share = reset($result);
+ $this->assertSame(\OCP\PERMISSION_READ | \OCP\PERMISSION_UPDATE, $share['permissions']);
+ $this->assertSame($this->filename . '-renamed', $share['file_target']);
- //cleanup
self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
- \OCP\Share::unshare('file', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP,
- 'testGroup');
- \OCP\Share::unshare('file', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_USER,
- self::TEST_FILES_SHARING_API_USER2);
- \OC_Group::removeFromGroup(self::TEST_FILES_SHARING_API_USER2, 'testGroup');
- \OC_Group::removeFromGroup(self::TEST_FILES_SHARING_API_USER2, 'testGroup');
- \OC_Group::deleteGroup('testGroup');
+ // unshare user share
+ $result = \OCP\Share::unshare('file', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_USER,
+ \Test_Files_Sharing::TEST_FILES_SHARING_API_USER2);
+ $this->assertTrue($result);
+
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER2);
+
+ $result = \OCP\Share::getItemSharedWith('file', null);
+
+ $this->assertTrue(is_array($result));
+
+ // test should return the remaining group share
+ $this->assertSame(1, count($result));
+
+ $share = reset($result);
+ // only the group share permissions should be available now
+ $this->assertSame(\OCP\PERMISSION_READ, $share['permissions']);
+ $this->assertSame($this->filename . '-renamed', $share['file_target']);
}
+ /**
+ * user1 share file to a group and to a user2 in the same group. Then user2
+ * unshares the file from self. Afterwards user1 should no longer see the
+ * single user share to user2. If he re-shares the file to user2 the same target
+ * then the group share should be used to group the item
+ */
+ function testShareAndUnshareFromSelf() {
+ $fileinfo = $this->view->getFileInfo($this->filename);
+
+ // share the file to group1 (user2 is a member of this group) and explicitely to user2
+ \OCP\Share::shareItem('file', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, self::TEST_FILES_SHARING_API_GROUP1, \OCP\PERMISSION_ALL);
+ \OCP\Share::shareItem('file', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2, \OCP\PERMISSION_ALL);
+
+ // user1 should have to shared files
+ $shares = \OCP\Share::getItemsShared('file');
+ $this->assertSame(2, count($shares));
+
+ // user2 should have two files "welcome.txt" and the shared file,
+ // both the group share and the single share of the same file should be
+ // grouped to one file
+ \Test_Files_Sharing::loginHelper(self::TEST_FILES_SHARING_API_USER2);
+ $dirContent = \OC\Files\Filesystem::getDirectoryContent('/');
+ $this->assertSame(2, count($dirContent));
+ $this->verifyDirContent($dirContent, array('welcome.txt', ltrim($this->filename, '/')));
+
+ // now user2 deletes the share (= unshare from self)
+ \OC\Files\Filesystem::unlink($this->filename);
+
+ // only welcome.txt should exists
+ $dirContent = \OC\Files\Filesystem::getDirectoryContent('/');
+ $this->assertSame(1, count($dirContent));
+ $this->verifyDirContent($dirContent, array('welcome.txt'));
+
+ // login as user1...
+ \Test_Files_Sharing::loginHelper(self::TEST_FILES_SHARING_API_USER1);
+
+ // ... now user1 should have only one shared file, the group share
+ $shares = \OCP\Share::getItemsShared('file');
+ $this->assertSame(1, count($shares));
+
+ // user1 shares a gain the file directly to user2
+ \OCP\Share::shareItem('file', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2, \OCP\PERMISSION_ALL);
+
+ // user2 should see again welcome.txt and the shared file
+ \Test_Files_Sharing::loginHelper(self::TEST_FILES_SHARING_API_USER2);
+ $dirContent = \OC\Files\Filesystem::getDirectoryContent('/');
+ $this->assertSame(2, count($dirContent));
+ $this->verifyDirContent($dirContent, array('welcome.txt', ltrim($this->filename, '/')));
+
+
+ }
+
+ function verifyDirContent($content, $expected) {
+ foreach ($content as $c) {
+ if (!in_array($c['name'], $expected)) {
+ $this->assertTrue(false, "folder should only contain '" . implode(',', $expected) . "', found: " .$c['name']);
+ }
+ }
+ }
+
function testShareWithDifferentShareFolder() {
$fileinfo = $this->view->getFileInfo($this->filename);
@@ -146,12 +245,6 @@ class Test_Files_Sharing extends Test_Files_Sharing_Base {
$this->assertTrue(\OC\Files\Filesystem::file_exists('/Shared/subfolder/' . $this->folder));
//cleanup
- self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
- \OCP\Share::unshare('file', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_USER,
- self::TEST_FILES_SHARING_API_USER2);
- \OCP\Share::unshare('folder', $folderinfo['fileid'], \OCP\Share::SHARE_TYPE_USER,
- self::TEST_FILES_SHARING_API_USER2);
-
\OCP\Config::deleteSystemValue('share_folder');
}
@@ -173,18 +266,14 @@ class Test_Files_Sharing extends Test_Files_Sharing_Base {
$this->assertTrue(is_array($result));
// test should return exactly one shares created from testCreateShare()
- $this->assertTrue(count($result) === 1);
+ $this->assertSame(1, count($result), 'more then one share found');
$share = reset($result);
$this->assertSame($expectedPermissions, $share['permissions']);
-
- \OCP\Share::unshare('file', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_USER,
- \Test_Files_Sharing::TEST_FILES_SHARING_API_USER2);
}
function DataProviderTestFileSharePermissions() {
$permission1 = \OCP\PERMISSION_ALL;
- $permission2 = \OCP\PERMISSION_DELETE;
$permission3 = \OCP\PERMISSION_READ;
$permission4 = \OCP\PERMISSION_READ | \OCP\PERMISSION_UPDATE;
$permission5 = \OCP\PERMISSION_READ | \OCP\PERMISSION_DELETE;
@@ -192,7 +281,6 @@ class Test_Files_Sharing extends Test_Files_Sharing_Base {
return array(
array($permission1, \OCP\PERMISSION_ALL & ~\OCP\PERMISSION_DELETE),
- array($permission2, 0),
array($permission3, $permission3),
array($permission4, $permission4),
array($permission5, $permission3),