unit tests for grouping of shares pointing to the same source
This commit is contained in:
parent
89c3b650e6
commit
9105e17307
|
@ -35,6 +35,8 @@ abstract class Test_Files_Sharing_Base extends \PHPUnit_Framework_TestCase {
|
|||
const TEST_FILES_SHARING_API_USER2 = "test-share-user2";
|
||||
const TEST_FILES_SHARING_API_USER3 = "test-share-user3";
|
||||
|
||||
const TEST_FILES_SHARING_API_GROUP1 = "test-share-group1";
|
||||
|
||||
public $stateFilesEncryption;
|
||||
public $filename;
|
||||
public $data;
|
||||
|
@ -60,6 +62,10 @@ abstract class Test_Files_Sharing_Base extends \PHPUnit_Framework_TestCase {
|
|||
self::loginHelper(self::TEST_FILES_SHARING_API_USER2, true);
|
||||
self::loginHelper(self::TEST_FILES_SHARING_API_USER3, true);
|
||||
|
||||
// create group
|
||||
\OC_Group::createGroup(self::TEST_FILES_SHARING_API_GROUP1);
|
||||
\OC_Group::addToGroup(self::TEST_FILES_SHARING_API_USER2, self::TEST_FILES_SHARING_API_GROUP1);
|
||||
|
||||
}
|
||||
|
||||
function setUp() {
|
||||
|
@ -94,6 +100,9 @@ abstract class Test_Files_Sharing_Base extends \PHPUnit_Framework_TestCase {
|
|||
\OC_User::deleteUser(self::TEST_FILES_SHARING_API_USER1);
|
||||
\OC_User::deleteUser(self::TEST_FILES_SHARING_API_USER2);
|
||||
\OC_User::deleteUser(self::TEST_FILES_SHARING_API_USER3);
|
||||
|
||||
// delete group
|
||||
\OC_Group::deleteGroup(self::TEST_FILES_SHARING_API_GROUP1);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
@ -70,8 +74,6 @@ class Test_Files_Sharing extends Test_Files_Sharing_Base {
|
|||
|
||||
$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 +86,86 @@ 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));
|
||||
|
||||
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));
|
||||
|
||||
//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');
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 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);
|
||||
|
||||
$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']);
|
||||
|
||||
self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
|
||||
|
||||
// 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']);
|
||||
|
||||
}
|
||||
|
||||
function testShareWithDifferentShareFolder() {
|
||||
|
||||
$fileinfo = $this->view->getFileInfo($this->filename);
|
||||
|
@ -146,12 +187,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 +208,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 +223,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),
|
||||
|
|
|
@ -1516,7 +1516,7 @@ class Share extends \OC\Share\Constants {
|
|||
* @param string $itemType
|
||||
* @return array of grouped items
|
||||
*/
|
||||
private static function groupItems($items, $itemType) {
|
||||
protected static function groupItems($items, $itemType) {
|
||||
|
||||
$fileSharing = ($itemType === 'file' || $itemType === 'folder') ? true : false;
|
||||
|
||||
|
|
|
@ -541,7 +541,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
|
|||
OC_User::setUserId($this->user2);
|
||||
$this->assertEquals(array(OCP\PERMISSION_READ | OCP\PERMISSION_UPDATE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
|
||||
OC_User::setUserId($this->user4);
|
||||
$this->assertEquals(array(), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET));
|
||||
$this->assertEquals(array('test.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET));
|
||||
|
||||
// Valid share with same person - group then user
|
||||
OC_User::setUserId($this->user1);
|
||||
|
@ -757,20 +757,88 @@ class Test_Share extends PHPUnit_Framework_TestCase {
|
|||
array(false, array('share_with' => '1234567890', 'share_type' => '3', 'id' => 101)),
|
||||
array(false, array('share_with' => '1234567890', 'share_type' => 3, 'id' => 101)),
|
||||
);
|
||||
}
|
||||
|
||||
/*
|
||||
if (!isset($linkItem['share_with'])) {
|
||||
return true;
|
||||
}
|
||||
/**
|
||||
* @dataProvider dataProviderTestGroupItems
|
||||
* @param type $ungrouped
|
||||
* @param type $grouped
|
||||
*/
|
||||
function testGroupItems($ungrouped, $grouped) {
|
||||
|
||||
if ($linkItem['share_type'] != \OCP\Share::SHARE_TYPE_LINK) {
|
||||
return true;
|
||||
}
|
||||
$result = DummyShareClass::groupItemsTest($ungrouped);
|
||||
|
||||
if ( \OC::$server->getSession()->exists('public_link_authenticated')
|
||||
&& \OC::$server->getSession()->get('public_link_authenticated') === $linkItem['id'] ) {
|
||||
return true;
|
||||
$this->compareArrays($grouped, $result);
|
||||
|
||||
}
|
||||
|
||||
function compareArrays($result, $expectedResult) {
|
||||
foreach ($expectedResult as $key => $value) {
|
||||
if (is_array($value)) {
|
||||
$this->compareArrays($result[$key], $value);
|
||||
} else {
|
||||
$this->assertSame($value, $result[$key]);
|
||||
}
|
||||
}
|
||||
* */
|
||||
}
|
||||
|
||||
function dataProviderTestGroupItems() {
|
||||
return array(
|
||||
// one array with one share
|
||||
array(
|
||||
array( // input
|
||||
array('item_source' => 1, 'permissions' => \OCP\PERMISSION_ALL, 'item_target' => 't1')),
|
||||
array( // expected result
|
||||
array('item_source' => 1, 'permissions' => \OCP\PERMISSION_ALL, 'item_target' => 't1'))),
|
||||
// two shares both point to the same source
|
||||
array(
|
||||
array( // input
|
||||
array('item_source' => 1, 'permissions' => \OCP\PERMISSION_READ, 'item_target' => 't1'),
|
||||
array('item_source' => 1, 'permissions' => \OCP\PERMISSION_UPDATE, 'item_target' => 't1'),
|
||||
),
|
||||
array( // expected result
|
||||
array('item_source' => 1, 'permissions' => \OCP\PERMISSION_READ | \OCP\PERMISSION_UPDATE, 'item_target' => 't1',
|
||||
'grouped' => array(
|
||||
array('item_source' => 1, 'permissions' => \OCP\PERMISSION_READ, 'item_target' => 't1'),
|
||||
array('item_source' => 1, 'permissions' => \OCP\PERMISSION_UPDATE, 'item_target' => 't1'),
|
||||
)
|
||||
),
|
||||
)
|
||||
),
|
||||
// two shares both point to the same source but with different targets
|
||||
array(
|
||||
array( // input
|
||||
array('item_source' => 1, 'permissions' => \OCP\PERMISSION_READ, 'item_target' => 't1'),
|
||||
array('item_source' => 1, 'permissions' => \OCP\PERMISSION_UPDATE, 'item_target' => 't2'),
|
||||
),
|
||||
array( // expected result
|
||||
array('item_source' => 1, 'permissions' => \OCP\PERMISSION_READ, 'item_target' => 't1'),
|
||||
array('item_source' => 1, 'permissions' => \OCP\PERMISSION_UPDATE, 'item_target' => 't2'),
|
||||
)
|
||||
),
|
||||
// three shares two point to the same source
|
||||
array(
|
||||
array( // input
|
||||
array('item_source' => 1, 'permissions' => \OCP\PERMISSION_READ, 'item_target' => 't1'),
|
||||
array('item_source' => 2, 'permissions' => \OCP\PERMISSION_CREATE, 'item_target' => 't2'),
|
||||
array('item_source' => 1, 'permissions' => \OCP\PERMISSION_UPDATE, 'item_target' => 't1'),
|
||||
),
|
||||
array( // expected result
|
||||
array('item_source' => 1, 'permissions' => \OCP\PERMISSION_READ | \OCP\PERMISSION_UPDATE, 'item_target' => 't1',
|
||||
'grouped' => array(
|
||||
array('item_source' => 1, 'permissions' => \OCP\PERMISSION_READ, 'item_target' => 't1'),
|
||||
array('item_source' => 1, 'permissions' => \OCP\PERMISSION_UPDATE, 'item_target' => 't1'),
|
||||
)
|
||||
),
|
||||
array('item_source' => 2, 'permissions' => \OCP\PERMISSION_CREATE, 'item_target' => 't2'),
|
||||
)
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class DummyShareClass extends \OC\Share\Share {
|
||||
public static function groupItemsTest($items) {
|
||||
return parent::groupItems($items, 'test');
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue