diff options
Diffstat (limited to 'apps/files_sharing/tests/share.php')
-rw-r--r-- | apps/files_sharing/tests/share.php | 160 |
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), |