Browse Source
The new sharing code now handles deletion
The new sharing code now handles deletion
OCS -> ShareManager -> DefaultShareProviderremotes/origin/exclude_directories_III
12 changed files with 1469 additions and 106 deletions
-
13apps/files_sharing/api/ocssharewrapper.php
-
73apps/files_sharing/api/share20ocs.php
-
113apps/files_sharing/tests/api/share20ocstest.php
-
248lib/private/share20/defaultshareprovider.php
-
25lib/private/share20/exception/backenderror.php
-
25lib/private/share20/exception/sharenotfound.php
-
149lib/private/share20/ishare.php
-
8lib/private/share20/ishareprovider.php
-
74lib/private/share20/manager.php
-
106lib/private/share20/share.php
-
543tests/lib/share20/defaultshareprovidertest.php
-
198tests/lib/share20/managertest.php
@ -0,0 +1,73 @@ |
|||
<?php |
|||
/** |
|||
* @author Roeland Jago Douma <rullzer@owncloud.com> |
|||
* |
|||
* @copyright Copyright (c) 2015, ownCloud, Inc. |
|||
* @license AGPL-3.0 |
|||
* |
|||
* This code is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU Affero General Public License, version 3, |
|||
* as published by the Free Software Foundation. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU Affero General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU Affero General Public License, version 3, |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/> |
|||
* |
|||
*/ |
|||
namespace OCA\Files_Sharing\API; |
|||
|
|||
class Share20OCS { |
|||
|
|||
/** @var OC\Share20\Manager */ |
|||
private $shareManager; |
|||
|
|||
/** @var OCP\IGroupManager */ |
|||
private $groupManager; |
|||
|
|||
/** @var OCP\IUserManager */ |
|||
private $userManager; |
|||
|
|||
/** @var OCP\IRequest */ |
|||
private $request; |
|||
|
|||
/** @var OCP\Files\Folder */ |
|||
private $userFolder; |
|||
|
|||
public function __construct(\OC\Share20\Manager $shareManager, |
|||
\OCP\IGroupManager $groupManager, |
|||
\OCP\IUserManager $userManager, |
|||
\OCP\IRequest $request, |
|||
\OCP\Files\Folder $userFolder) { |
|||
$this->shareManager = $shareManager; |
|||
$this->userManager = $userManager; |
|||
$this->groupManager = $groupManager; |
|||
$this->request = $request; |
|||
$this->userFolder = $userFolder; |
|||
} |
|||
|
|||
/** |
|||
* Delete a share |
|||
* |
|||
* @param int $id |
|||
* @return \OC_OCS_Result |
|||
*/ |
|||
public function deleteShare($id) { |
|||
try { |
|||
$share = $this->shareManager->getShareById($id); |
|||
} catch (\OC\Share20\Exception\ShareNotFound $e) { |
|||
return new \OC_OCS_Result(null, 404, 'wrong share ID, share doesn\'t exist.'); |
|||
} |
|||
|
|||
try { |
|||
$this->shareManager->deleteShare($share); |
|||
} catch (\OC\Share20\Exception\BackendError $e) { |
|||
return new \OC_OCS_Result(null, 404, 'could not delete share'); |
|||
} |
|||
|
|||
return new \OC_OCS_Result(); |
|||
} |
|||
} |
@ -0,0 +1,113 @@ |
|||
<?php |
|||
/** |
|||
* @author Roeland Jago Douma <rullzer@owncloud.com> |
|||
* |
|||
* @copyright Copyright (c) 2015, ownCloud, Inc. |
|||
* @license AGPL-3.0 |
|||
* |
|||
* This code is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU Affero General Public License, version 3, |
|||
* as published by the Free Software Foundation. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU Affero General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU Affero General Public License, version 3, |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/> |
|||
* |
|||
*/ |
|||
namespace OCA\Files_Sharing\Tests\API; |
|||
|
|||
use OCA\Files_Sharing\API\Share20OCS; |
|||
|
|||
class Share20OCSTest extends \Test\TestCase { |
|||
|
|||
/** @var OC\Share20\Manager */ |
|||
private $shareManager; |
|||
|
|||
/** @var OCP\IGroupManager */ |
|||
private $groupManager; |
|||
|
|||
/** @var OCP\IUserManager */ |
|||
private $userManager; |
|||
|
|||
/** @var OCP\IRequest */ |
|||
private $request; |
|||
|
|||
/** @var OCP\Files\Folder */ |
|||
private $userFolder; |
|||
|
|||
/** @var OCS */ |
|||
private $ocs; |
|||
|
|||
protected function setUp() { |
|||
$this->shareManager = $this->getMockBuilder('OC\Share20\Manager') |
|||
->disableOriginalConstructor() |
|||
->getMock(); |
|||
$this->groupManager = $this->getMockBuilder('OCP\IGroupManager') |
|||
->disableOriginalConstructor() |
|||
->getMock(); |
|||
$this->userManager = $this->getMockBuilder('OCP\IUserManager') |
|||
->disableOriginalConstructor() |
|||
->getMock(); |
|||
$this->request = $this->getMockBuilder('OCP\IRequest') |
|||
->disableOriginalConstructor() |
|||
->getMock(); |
|||
$this->userFolder = $this->getMockBuilder('OCP\Files\Folder') |
|||
->disableOriginalConstructor() |
|||
->getMock(); |
|||
|
|||
$this->ocs = new Share20OCS($this->shareManager, |
|||
$this->groupManager, |
|||
$this->userManager, |
|||
$this->request, |
|||
$this->userFolder); |
|||
} |
|||
|
|||
public function testDeleteShareShareNotFound() { |
|||
$this->shareManager |
|||
->expects($this->once()) |
|||
->method('getShareById') |
|||
->with(42) |
|||
->will($this->throwException(new \OC\Share20\Exception\ShareNotFound())); |
|||
|
|||
$expected = new \OC_OCS_Result(null, 404, 'wrong share ID, share doesn\'t exist.'); |
|||
$this->assertEquals($expected, $this->ocs->deleteShare(42)); |
|||
} |
|||
|
|||
public function testDeleteShareCouldNotDelete() { |
|||
$share = $this->getMock('OC\Share20\IShare'); |
|||
$this->shareManager |
|||
->expects($this->once()) |
|||
->method('getShareById') |
|||
->with(42) |
|||
->willReturn($share); |
|||
$this->shareManager |
|||
->expects($this->once()) |
|||
->method('deleteShare') |
|||
->with($share) |
|||
->will($this->throwException(new \OC\Share20\Exception\BackendError())); |
|||
|
|||
|
|||
$expected = new \OC_OCS_Result(null, 404, 'could not delete share'); |
|||
$this->assertEquals($expected, $this->ocs->deleteShare(42)); |
|||
} |
|||
|
|||
public function testDeleteShare() { |
|||
$share = $this->getMock('OC\Share20\IShare'); |
|||
$this->shareManager |
|||
->expects($this->once()) |
|||
->method('getShareById') |
|||
->with(42) |
|||
->willReturn($share); |
|||
$this->shareManager |
|||
->expects($this->once()) |
|||
->method('deleteShare') |
|||
->with($share); |
|||
|
|||
$expected = new \OC_OCS_Result(); |
|||
$this->assertEquals($expected, $this->ocs->deleteShare(42)); |
|||
} |
|||
} |
@ -0,0 +1,248 @@ |
|||
<?php |
|||
/** |
|||
* @author Roeland Jago Douma <rullzer@owncloud.com> |
|||
* |
|||
* @copyright Copyright (c) 2015, ownCloud, Inc. |
|||
* @license AGPL-3.0 |
|||
* |
|||
* This code is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU Affero General Public License, version 3, |
|||
* as published by the Free Software Foundation. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU Affero General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU Affero General Public License, version 3, |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/> |
|||
* |
|||
*/ |
|||
namespace OC\Share20; |
|||
|
|||
use OC\Share20\Exception\ShareNotFound; |
|||
use OC\Share20\Exception\BackendError; |
|||
use OCP\IUser; |
|||
|
|||
class DefaultShareProvider implements IShareProvider { |
|||
|
|||
/** @var \OCP\IDBConnection */ |
|||
private $dbConn; |
|||
|
|||
/** @var \OCP\IUserManager */ |
|||
private $userManager; |
|||
|
|||
/** @var \OCP\IGroupManager */ |
|||
private $groupManager; |
|||
|
|||
/** @var \OCP\Files\Folder */ |
|||
private $userFolder; |
|||
|
|||
public function __construct(\OCP\IDBConnection $connection, |
|||
\OCP\IUserManager $userManager, |
|||
\OCP\IGroupManager $groupManager, |
|||
\OCP\Files\Folder $userFolder) { |
|||
$this->dbConn = $connection; |
|||
$this->userManager = $userManager; |
|||
$this->groupManager = $groupManager; |
|||
$this->userFolder = $userFolder; |
|||
} |
|||
|
|||
/** |
|||
* Share a path |
|||
* |
|||
* @param Share $share |
|||
* @return Share The share object |
|||
*/ |
|||
public function create(Share $share) { |
|||
throw new \Exception(); |
|||
} |
|||
|
|||
/** |
|||
* Update a share |
|||
* |
|||
* @param Share $share |
|||
* @return Share The share object |
|||
*/ |
|||
public function update(Share $share) { |
|||
throw new \Exception(); |
|||
} |
|||
|
|||
/** |
|||
* Get all childre of this share |
|||
* |
|||
* @param IShare $share |
|||
* @return IShare[] |
|||
*/ |
|||
private function getChildren(IShare $share) { |
|||
$children = []; |
|||
|
|||
$qb = $this->dbConn->getQueryBuilder(); |
|||
$qb->select('*') |
|||
->from('share') |
|||
->where($qb->expr()->eq('parent', $qb->createParameter('parent'))) |
|||
->setParameter(':parent', $share->getId()); |
|||
|
|||
$cursor = $qb->execute(); |
|||
while($data = $cursor->fetch()) { |
|||
$children[] = $this->createShare($data); |
|||
} |
|||
$cursor->closeCursor(); |
|||
|
|||
return $children; |
|||
} |
|||
|
|||
/** |
|||
* Delete all the children of this share |
|||
* |
|||
* @param IShare $share |
|||
*/ |
|||
protected function deleteChildren(IShare $share) { |
|||
foreach($this->getChildren($share) as $child) { |
|||
$this->delete($child); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Delete a share |
|||
* |
|||
* @param Share $share |
|||
* @throws BackendError |
|||
*/ |
|||
public function delete(IShare $share) { |
|||
$this->deleteChildren($share); |
|||
|
|||
$qb = $this->dbConn->getQueryBuilder(); |
|||
|
|||
$qb->delete('share') |
|||
->where($qb->expr()->eq('id', $qb->createParameter('id'))) |
|||
->setParameter(':id', $share->getId()); |
|||
|
|||
try { |
|||
$qb->execute(); |
|||
} catch (\Exception $e) { |
|||
throw new BackendError(); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Get all shares by the given user |
|||
* |
|||
* @param IUser $user |
|||
* @param int $shareType |
|||
* @param int $offset |
|||
* @param int $limit |
|||
* @return Share[] |
|||
*/ |
|||
public function getShares(IUser $user, $shareType, $offset, $limit) { |
|||
throw new \Exception(); |
|||
} |
|||
|
|||
/** |
|||
* Get share by id |
|||
* |
|||
* @param int $id |
|||
* @return IShare |
|||
* @throws ShareNotFound |
|||
*/ |
|||
public function getShareById($id) { |
|||
$qb = $this->dbConn->getQueryBuilder(); |
|||
|
|||
$qb->select('*') |
|||
->from('share') |
|||
->where($qb->expr()->eq('id', $qb->createParameter('id'))) |
|||
->setParameter(':id', $id); |
|||
|
|||
$cursor = $qb->execute(); |
|||
$data = $cursor->fetch(); |
|||
$cursor->closeCursor(); |
|||
|
|||
if ($data === false) { |
|||
throw new ShareNotFound(); |
|||
} |
|||
|
|||
$share = $this->createShare($data); |
|||
|
|||
return $share; |
|||
} |
|||
|
|||
/** |
|||
* Get shares for a given path |
|||
* |
|||
* @param \OCP\Files\Node $path |
|||
* @param Share[] |
|||
*/ |
|||
public function getSharesByPath(\OCP\IUser $user, \OCP\Files\Node $path) { |
|||
throw new \Exception(); |
|||
} |
|||
|
|||
/** |
|||
* Get shared with the given user |
|||
* |
|||
* @param IUser $user |
|||
* @param int $shareType |
|||
* @param Share |
|||
*/ |
|||
public function getSharedWithMe(IUser $user, $shareType = null) { |
|||
throw new \Exception(); |
|||
} |
|||
|
|||
/** |
|||
* Get a share by token and if present verify the password |
|||
* |
|||
* @param string $token |
|||
* @param string $password |
|||
* @param Share |
|||
*/ |
|||
public function getShareByToken($token, $password = null) { |
|||
throw new \Exception(); |
|||
} |
|||
|
|||
/** |
|||
* Create a share object from an database row |
|||
* |
|||
* @param mixed[] $data |
|||
* @return Share |
|||
*/ |
|||
private function createShare($data) { |
|||
$share = new Share(); |
|||
$share->setId((int)$data['id']) |
|||
->setShareType((int)$data['share_type']) |
|||
->setPermissions((int)$data['permissions']); |
|||
|
|||
if ($share->getShareType() === \OCP\Share::SHARE_TYPE_USER) { |
|||
$share->setSharedWith($this->userManager->get($data['share_with'])); |
|||
} else if ($share->getShareType() === \OCP\Share::SHARE_TYPE_GROUP) { |
|||
$share->setSharedWith($this->groupManager->get($data['share_with'])); |
|||
} else if ($share->getShareType() === \OCP\Share::SHARE_TYPE_LINK) { |
|||
/* |
|||
* TODO: Clean this up, this should be set as password not sharedWith |
|||
*/ |
|||
$share->setSharedWith($data['share_with']); |
|||
$share->setToken($data['token']); |
|||
} else { |
|||
$share->setSharedWith($data['share_with']); |
|||
} |
|||
|
|||
$share->setSharedBy($this->userManager->get($data['uid_owner'])); |
|||
|
|||
// TODO: getById can return an array. How to handle this properly??
|
|||
$path = $this->userFolder->getById($data['file_source']); |
|||
$path = $path[0]; |
|||
$share->setPath($path); |
|||
|
|||
$owner = $path->getStorage()->getOwner('.'); |
|||
if ($owner !== false) { |
|||
$share->setShareOwner($this->userManager->get($owner)); |
|||
} |
|||
|
|||
if ($data['expiration'] !== null) { |
|||
$expiration = \DateTime::createFromFormat('Y-m-d H:i:s', $data['expiration']); |
|||
$share->setExpirationDate($expiration); |
|||
} |
|||
|
|||
return $share; |
|||
} |
|||
|
|||
|
|||
} |
@ -0,0 +1,25 @@ |
|||
<?php |
|||
/** |
|||
* @author Roeland Jago Douma <rullzer@owncloud.com> |
|||
* |
|||
* @copyright Copyright (c) 2015, ownCloud, Inc. |
|||
* @license AGPL-3.0 |
|||
* |
|||
* This code is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU Affero General Public License, version 3, |
|||
* as published by the Free Software Foundation. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU Affero General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU Affero General Public License, version 3, |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/> |
|||
* |
|||
*/ |
|||
namespace OC\Share20\Exception; |
|||
|
|||
class BackendError extends \Exception { |
|||
|
|||
} |
@ -0,0 +1,25 @@ |
|||
<?php |
|||
/** |
|||
* @author Roeland Jago Douma <rullzer@owncloud.com> |
|||
* |
|||
* @copyright Copyright (c) 2015, ownCloud, Inc. |
|||
* @license AGPL-3.0 |
|||
* |
|||
* This code is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU Affero General Public License, version 3, |
|||
* as published by the Free Software Foundation. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU Affero General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU Affero General Public License, version 3, |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/> |
|||
* |
|||
*/ |
|||
namespace OC\Share20\Exception; |
|||
|
|||
class ShareNotFound extends \Exception { |
|||
|
|||
} |
@ -0,0 +1,149 @@ |
|||
<?php |
|||
/** |
|||
* @author Roeland Jago Douma <rullzer@owncloud.com> |
|||
* |
|||
* @copyright Copyright (c) 2015, ownCloud, Inc. |
|||
* @license AGPL-3.0 |
|||
* |
|||
* This code is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU Affero General Public License, version 3, |
|||
* as published by the Free Software Foundation. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU Affero General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU Affero General Public License, version 3, |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/> |
|||
* |
|||
*/ |
|||
namespace OC\Share20; |
|||
|
|||
use OCP\Files\File; |
|||
use OCP\Files\Folder; |
|||
use OCP\Files\Node; |
|||
use OCP\IUser; |
|||
use OCP\IGroup; |
|||
|
|||
interface IShare { |
|||
|
|||
/** |
|||
* Get the id of the share |
|||
* |
|||
* @return string |
|||
*/ |
|||
public function getId(); |
|||
|
|||
/** |
|||
* Set the path of this share |
|||
* |
|||
* @param File|Folder $path |
|||
* @return Share The modified object |
|||
*/ |
|||
public function setPath(Node $path); |
|||
|
|||
/** |
|||
* Get the path of this share for the current user |
|||
* |
|||
* @return File|Folder |
|||
*/ |
|||
public function getPath(); |
|||
|
|||
/** |
|||
* Set the shareType |
|||
* |
|||
* @param int $shareType |
|||
* @return Share The modified object |
|||
*/ |
|||
public function setShareType($shareType); |
|||
|
|||
/** |
|||
* Get the shareType |
|||
* |
|||
* @return int |
|||
*/ |
|||
public function getShareType(); |
|||
|
|||
/** |
|||
* Set the receiver of this share |
|||
* |
|||
* @param IUser|IGroup|string |
|||
* @return Share The modified object |
|||
*/ |
|||
public function setSharedWith($sharedWith); |
|||
|
|||
/** |
|||
* Get the receiver of this share |
|||
* |
|||
* @return IUser|IGroup|string |
|||
*/ |
|||
public function getSharedWith(); |
|||
|
|||
/** |
|||
* Set the permissions |
|||
* |
|||
* @param int $permissions |
|||
* @return Share The modified object |
|||
*/ |
|||
public function setPermissions($permissions); |
|||
|
|||
/** |
|||
* Get the share permissions |
|||
* |
|||
* @return int |
|||
*/ |
|||
public function getPermissions(); |
|||
|
|||
/** |
|||
* Set the expiration date |
|||
* |
|||
* @param \DateTime $expireDate |
|||
* @return Share The modified object |
|||
*/ |
|||
public function setExpirationDate(\DateTime $expireDate); |
|||
|
|||
/** |
|||
* Get the share expiration date |
|||
* |
|||
* @return \DateTime |
|||
*/ |
|||
public function getExpirationDate(); |
|||
|
|||
/** |
|||
* Get share sharer |
|||
* |
|||
* @return IUser|string |
|||
*/ |
|||
public function getSharedBy(); |
|||
|
|||
/** |
|||
* Get the original share owner (who owns the path) |
|||
* |
|||
* @return IUser|string |
|||
*/ |
|||
public function getShareOwner(); |
|||
|
|||
/** |
|||
* Set the password |
|||
* |
|||
* @param string $password |
|||
* |
|||
* @return Share The modified object |
|||
*/ |
|||
public function setPassword($password); |
|||
|
|||
/** |
|||
* Get the token |
|||
* |
|||
* @return string |
|||
*/ |
|||
public function getToken(); |
|||
|
|||
/** |
|||
* Get the parent it |
|||
* |
|||
* @return int |
|||
*/ |
|||
public function getParent(); |
|||
} |
@ -0,0 +1,543 @@ |
|||
<?php |
|||
/** |
|||
* @author Roeland Jago Douma <rullzer@owncloud.com> |
|||
* |
|||
* @copyright Copyright (c) 2015, ownCloud, Inc. |
|||
* @license AGPL-3.0 |
|||
* |
|||
* This code is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU Affero General Public License, version 3, |
|||
* as published by the Free Software Foundation. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU Affero General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU Affero General Public License, version 3, |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/> |
|||
* |
|||
*/ |
|||
namespace Test\Share20; |
|||
|
|||
use OCP\IDBConnection; |
|||
use OCP\IUserManager; |
|||
use OCP\IGroupManager; |
|||
use OCP\Files\Folder; |
|||
use OC\Share20\DefaultShareProvider; |
|||
|
|||
class DefaultShareProviderTest extends \Test\TestCase { |
|||
|
|||
/** @var IDBConnection */ |
|||
protected $dbConn; |
|||
|
|||
/** @var IUserManager */ |
|||
protected $userManager; |
|||
|
|||
/** @var IGroupManager */ |
|||
protected $groupManager; |
|||
|
|||
/** @var Folder */ |
|||
protected $userFolder; |
|||
|
|||
/** @var DefaultShareProvider */ |
|||
protected $provider; |
|||
|
|||
public function setUp() { |
|||
$this->dbConn = \OC::$server->getDatabaseConnection(); |
|||
$this->userManager = $this->getMock('OCP\IUserManager'); |
|||
$this->groupManager = $this->getMock('OCP\IGroupManager'); |
|||
$this->userFolder = $this->getMock('OCP\Files\Folder'); |
|||
|
|||
//Empty share table
|
|||
$this->dbConn->getQueryBuilder()->delete('share')->execute(); |
|||
|
|||
$this->provider = new DefaultShareProvider( |
|||
$this->dbConn, |
|||
$this->userManager, |
|||
$this->groupManager, |
|||
$this->userFolder |
|||
); |
|||
} |
|||
|
|||
public function tearDown() { |
|||
$this->dbConn->getQueryBuilder()->delete('share')->execute(); |
|||
} |
|||
|
|||
/** |
|||
* @expectedException OC\Share20\Exception\ShareNotFound |
|||
*/ |
|||
public function testGetShareByIdNotExist() { |
|||
$this->provider->getShareById(1); |
|||
} |
|||
|
|||
public function testGetShareByIdUserShare() { |
|||
$qb = $this->dbConn->getQueryBuilder(); |
|||
|
|||
$qb->insert('share') |
|||
->values([ |
|||
'id' => $qb->expr()->literal(1), |
|||
'share_type' => $qb->expr()->literal(\OCP\Share::SHARE_TYPE_USER), |
|||
'share_with' => $qb->expr()->literal('sharedWith'), |
|||
'uid_owner' => $qb->expr()->literal('sharedBy'), |
|||
'file_source' => $qb->expr()->literal(42), |
|||
'permissions' => $qb->expr()->literal(13), |
|||
]); |
|||
$qb->execute(); |
|||
|
|||
$storage = $this->getMock('OC\Files\Storage\Storage'); |
|||
$storage |
|||
->expects($this->once()) |
|||
->method('getOwner') |
|||
->willReturn('shareOwner'); |
|||
$path = $this->getMock('OCP\Files\Node'); |
|||
$path |
|||
->expects($this->once()) |
|||
->method('getStorage') |
|||
->wilLReturn($storage); |
|||
$this->userFolder |
|||
->expects($this->once()) |
|||
->method('getById') |
|||
->with(42) |
|||
->willReturn([$path]); |
|||
|
|||
$sharedWith = $this->getMock('OCP\IUser'); |
|||
$sharedBy = $this->getMock('OCP\IUser'); |
|||
$shareOwner = $this->getMock('OCP\IUser'); |
|||
$this->userManager |
|||
->method('get') |
|||
->will($this->returnValueMap([ |
|||
['sharedWith', $sharedWith], |
|||
['sharedBy', $sharedBy], |
|||
['shareOwner', $shareOwner], |
|||
])); |
|||
|
|||
$share = $this->provider->getShareById(1); |
|||
|
|||
$this->assertEquals(1, $share->getId()); |
|||
$this->assertEquals(\OCP\Share::SHARE_TYPE_USER, $share->getShareType()); |
|||
$this->assertEquals($sharedWith, $share->getSharedWith()); |
|||
$this->assertEquals($sharedBy, $share->getSharedBy()); |
|||
$this->assertEquals($shareOwner, $share->getShareOwner()); |
|||
$this->assertEquals($path, $share->getPath()); |
|||
$this->assertEquals(13, $share->getPermissions()); |
|||
$this->assertEquals(null, $share->getToken()); |
|||
$this->assertEquals(null, $share->getExpirationDate()); |
|||
} |
|||
|
|||
public function testGetShareByIdGroupShare() { |
|||
$qb = $this->dbConn->getQueryBuilder(); |
|||
|
|||
$qb->insert('share') |
|||
->values([ |
|||
'id' => $qb->expr()->literal(1), |
|||
'share_type' => $qb->expr()->literal(\OCP\Share::SHARE_TYPE_GROUP), |
|||
'share_with' => $qb->expr()->literal('sharedWith'), |
|||
'uid_owner' => $qb->expr()->literal('sharedBy'), |
|||
'file_source' => $qb->expr()->literal(42), |
|||
'permissions' => $qb->expr()->literal(13), |
|||
]); |
|||
$qb->execute(); |
|||
|
|||
$storage = $this->getMock('OC\Files\Storage\Storage'); |
|||
$storage |
|||
->expects($this->once()) |
|||
->method('getOwner') |
|||
->willReturn('shareOwner'); |
|||
$path = $this->getMock('OCP\Files\Node'); |
|||
$path |
|||
->expects($this->once()) |
|||
->method('getStorage') |
|||
->wilLReturn($storage); |
|||
$this->userFolder |
|||
->expects($this->once()) |
|||
->method('getById') |
|||
->with(42) |
|||
->willReturn([$path]); |
|||
|
|||
$sharedWith = $this->getMock('OCP\IGroup'); |
|||
$sharedBy = $this->getMock('OCP\IUser'); |
|||
$shareOwner = $this->getMock('OCP\IUser'); |
|||
$this->userManager |
|||
->method('get') |
|||
->will($this->returnValueMap([ |
|||
['sharedBy', $sharedBy], |
|||
['shareOwner', $shareOwner], |
|||
])); |
|||
$this->groupManager |
|||
->expects($this->once()) |
|||
->method('get') |
|||
->with('sharedWith') |
|||
->willReturn($sharedWith); |
|||
|
|||
$share = $this->provider->getShareById(1); |
|||
|
|||
$this->assertEquals(1, $share->getId()); |
|||
$this->assertEquals(\OCP\Share::SHARE_TYPE_GROUP, $share->getShareType()); |
|||
$this->assertEquals($sharedWith, $share->getSharedWith()); |
|||
$this->assertEquals($sharedBy, $share->getSharedBy()); |
|||
$this->assertEquals($shareOwner, $share->getShareOwner()); |
|||
$this->assertEquals($path, $share->getPath()); |
|||
$this->assertEquals(13, $share->getPermissions()); |
|||
$this->assertEquals(null, $share->getToken()); |
|||
$this->assertEquals(null, $share->getExpirationDate()); |
|||
} |
|||
|
|||
public function testGetShareByIdLinkShare() { |
|||
$qb = $this->dbConn->getQueryBuilder(); |
|||
|
|||
$qb->insert('share') |
|||
->values([ |
|||
'id' => $qb->expr()->literal(1), |
|||
'share_type' => $qb->expr()->literal(\OCP\Share::SHARE_TYPE_LINK), |
|||
'share_with' => $qb->expr()->literal('sharedWith'), |
|||
'uid_owner' => $qb->expr()->literal('sharedBy'), |
|||
'file_source' => $qb->expr()->literal(42), |
|||
'permissions' => $qb->expr()->literal(13), |
|||
'token' => $qb->expr()->literal('token'), |
|||
'expiration' => $qb->expr()->literal('2000-01-02 00:00:00'), |
|||
]); |
|||
$qb->execute(); |
|||
|
|||
$storage = $this->getMock('OC\Files\Storage\Storage'); |
|||
$storage |
|||
->expects($this->once()) |
|||
->method('getOwner') |
|||
->willReturn('shareOwner'); |
|||
$path = $this->getMock('OCP\Files\Node'); |
|||
$path |
|||
->expects($this->once()) |
|||
->method('getStorage') |
|||
->wilLReturn($storage); |
|||
$this->userFolder |
|||
->expects($this->once()) |
|||
->method('getById') |
|||
->with(42) |
|||
->willReturn([$path]); |
|||
|
|||
$sharedBy = $this->getMock('OCP\IUser'); |
|||
$shareOwner = $this->getMock('OCP\IUser'); |
|||
$this->userManager |
|||
->method('get') |
|||
->will($this->returnValueMap([ |
|||
['sharedBy', $sharedBy], |
|||
['shareOwner', $shareOwner], |
|||
])); |
|||
|
|||
$share = $this->provider->getShareById(1); |
|||
|
|||
$this->assertEquals(1, $share->getId()); |
|||
$this->assertEquals(\OCP\Share::SHARE_TYPE_LINK, $share->getShareType()); |
|||
$this->assertEquals('sharedWith', $share->getSharedWith()); |
|||
$this->assertEquals($sharedBy, $share->getSharedBy()); |
|||
$this->assertEquals($shareOwner, $share->getShareOwner()); |
|||
$this->assertEquals($path, $share->getPath()); |
|||
$this->assertEquals(13, $share->getPermissions()); |
|||
$this->assertEquals('token', $share->getToken()); |
|||
$this->assertEquals(\DateTime::createFromFormat('Y-m-d H:i:s', '2000-01-02 00:00:00'), $share->getExpirationDate()); |
|||
} |
|||
|
|||
public function testGetShareByIdRemoteShare() { |
|||
$qb = $this->dbConn->getQueryBuilder(); |
|||
|
|||
$qb->insert('share') |
|||
->values([ |
|||
'id' => $qb->expr()->literal(1), |
|||
'share_type' => $qb->expr()->literal(\OCP\Share::SHARE_TYPE_REMOTE), |
|||
'share_with' => $qb->expr()->literal('sharedWith'), |
|||
'uid_owner' => $qb->expr()->literal('sharedBy'), |
|||
'file_source' => $qb->expr()->literal(42), |
|||
'permissions' => $qb->expr()->literal(13), |
|||
]); |
|||
$qb->execute(); |
|||
|
|||
$storage = $this->getMock('OC\Files\Storage\Storage'); |
|||
$storage |
|||
->expects($this->once()) |
|||
->method('getOwner') |
|||
->willReturn('shareOwner'); |
|||
$path = $this->getMock('OCP\Files\Node'); |
|||
$path |
|||
->expects($this->once()) |
|||
->method('getStorage') |
|||
->wilLReturn($storage); |
|||
$this->userFolder |
|||
->expects($this->once()) |
|||
->method('getById') |
|||
->with(42) |
|||
->willReturn([$path]); |
|||
|
|||
$sharedBy = $this->getMock('OCP\IUser'); |
|||
$shareOwner = $this->getMock('OCP\IUser'); |
|||
$this->userManager |
|||
->method('get') |
|||
->will($this->returnValueMap([ |
|||
['sharedBy', $sharedBy], |
|||
['shareOwner', $shareOwner], |
|||
])); |
|||
|
|||
$share = $this->provider->getShareById(1); |
|||
|
|||
$this->assertEquals(1, $share->getId()); |
|||
$this->assertEquals(\OCP\Share::SHARE_TYPE_REMOTE, $share->getShareType()); |
|||
$this->assertEquals('sharedWith', $share->getSharedWith()); |
|||
$this->assertEquals($sharedBy, $share->getSharedBy()); |
|||
$this->assertEquals($shareOwner, $share->getShareOwner()); |
|||
$this->assertEquals($path, $share->getPath()); |
|||
$this->assertEquals(13, $share->getPermissions()); |
|||
$this->assertEquals(null, $share->getToken()); |
|||
$this->assertEquals(null, $share->getExpirationDate()); |
|||
} |
|||
|
|||
public function testDeleteSingleShare() { |
|||
$qb = $this->dbConn->getQueryBuilder(); |
|||
|
|||
$qb->insert('share') |
|||
->values([ |
|||
'id' => $qb->expr()->literal(1), |
|||
'share_type' => $qb->expr()->literal(\OCP\Share::SHARE_TYPE_USER), |
|||
'share_with' => $qb->expr()->literal('sharedWith'), |
|||
'uid_owner' => $qb->expr()->literal('sharedBy'), |
|||
'file_source' => $qb->expr()->literal(42), |
|||
'permissions' => $qb->expr()->literal(13), |
|||
]); |
|||
$qb->execute(); |
|||
|
|||
$storage = $this->getMock('OC\Files\Storage\Storage'); |
|||
$storage |
|||
->expects($this->once()) |
|||
->method('getOwner') |
|||
->willReturn('shareOwner'); |
|||
$path = $this->getMock('OCP\Files\Node'); |
|||
$path |
|||
->expects($this->once()) |
|||
->method('getStorage') |
|||
->wilLReturn($storage); |
|||
$this->userFolder |
|||
->expects($this->once()) |
|||
->method('getById') |
|||
->with(42) |
|||
->willReturn([$path]); |
|||
|
|||
$sharedWith = $this->getMock('OCP\IUser'); |
|||
$sharedBy = $this->getMock('OCP\IUser'); |
|||
$shareOwner = $this->getMock('OCP\IUser'); |
|||
$this->userManager |
|||
->method('get') |
|||
->will($this->returnValueMap([ |
|||
['sharedWith', $sharedWith], |
|||
['sharedBy', $sharedBy], |
|||
['shareOwner', $shareOwner], |
|||
])); |
|||
|
|||
$share = $this->provider->getShareById(1); |
|||
$this->provider->delete($share); |
|||
|
|||
$qb = $this->dbConn->getQueryBuilder(); |
|||
$qb->select('*') |
|||
->from('share'); |
|||
|
|||
$cursor = $qb->execute(); |
|||
$result = $cursor->fetchAll(); |
|||
$cursor->closeCursor(); |
|||
|
|||
$this->assertEmpty($result); |
|||
} |
|||
|
|||
public function testDeleteSingleShareKeepOther() { |
|||
$qb = $this->dbConn->getQueryBuilder(); |
|||
$qb->insert('share') |
|||
->values([ |
|||
'id' => $qb->expr()->literal(1), |
|||
'share_type' => $qb->expr()->literal(\OCP\Share::SHARE_TYPE_USER), |
|||
'share_with' => $qb->expr()->literal('sharedWith'), |
|||
'uid_owner' => $qb->expr()->literal('sharedBy'), |
|||
'file_source' => $qb->expr()->literal(42), |
|||
'permissions' => $qb->expr()->literal(13), |
|||
]); |
|||
$qb->execute(); |
|||
|
|||
$qb = $this->dbConn->getQueryBuilder(); |
|||
$qb->insert('share') |
|||
->values([ |
|||
'id' => $qb->expr()->literal(2), |
|||
'share_type' => $qb->expr()->literal(\OCP\Share::SHARE_TYPE_USER), |
|||
'share_with' => $qb->expr()->literal('sharedWith'), |
|||
'uid_owner' => $qb->expr()->literal('sharedBy'), |
|||
'file_source' => $qb->expr()->literal(42), |
|||
'permissions' => $qb->expr()->literal(13), |
|||
]); |
|||
$qb->execute(); |
|||
|
|||
|
|||
$storage = $this->getMock('OC\Files\Storage\Storage'); |
|||
$storage |
|||
->expects($this->once()) |
|||
->method('getOwner') |
|||
->willReturn('shareOwner'); |
|||
$path = $this->getMock('OCP\Files\Node'); |
|||
$path |
|||
->expects($this->once()) |
|||
->method('getStorage') |
|||
->wilLReturn($storage); |
|||
$this->userFolder |
|||
->expects($this->once()) |
|||
->method('getById') |
|||
->with(42) |
|||
->willReturn([$path]); |
|||
|
|||
$sharedWith = $this->getMock('OCP\IUser'); |
|||
$sharedBy = $this->getMock('OCP\IUser'); |
|||
$shareOwner = $this->getMock('OCP\IUser'); |
|||
$this->userManager |
|||
->method('get') |
|||
->will($this->returnValueMap([ |
|||
['sharedWith', $sharedWith], |
|||
['sharedBy', $sharedBy], |
|||
['shareOwner', $shareOwner], |
|||
])); |
|||
|
|||
$share = $this->provider->getShareById(1); |
|||
$this->provider->delete($share); |
|||
|
|||
$qb = $this->dbConn->getQueryBuilder(); |
|||
$qb->select('*') |
|||
->from('share'); |
|||
|
|||
$cursor = $qb->execute(); |
|||
$result = $cursor->fetchAll(); |
|||
$cursor->closeCursor(); |
|||
|
|||
$this->assertCount(1, $result); |
|||
} |
|||
|
|||
public function testDeleteNestedShares() { |
|||
$qb = $this->dbConn->getQueryBuilder(); |
|||
$qb->insert('share') |
|||
->values([ |
|||
'id' => $qb->expr()->literal(1), |
|||
'share_type' => $qb->expr()->literal(\OCP\Share::SHARE_TYPE_USER), |
|||
'share_with' => $qb->expr()->literal('sharedWith'), |
|||
'uid_owner' => $qb->expr()->literal('sharedBy'), |
|||
'file_source' => $qb->expr()->literal(42), |
|||
'permissions' => $qb->expr()->literal(13), |
|||
]); |
|||
$qb->execute(); |
|||
|
|||
$qb = $this->dbConn->getQueryBuilder(); |
|||
$qb->insert('share') |
|||
->values([ |
|||
'id' => $qb->expr()->literal(2), |
|||
'share_type' => $qb->expr()->literal(\OCP\Share::SHARE_TYPE_USER), |
|||
'share_with' => $qb->expr()->literal('sharedWith2'), |
|||
'uid_owner' => $qb->expr()->literal('sharedBy2'), |
|||
'file_source' => $qb->expr()->literal(42), |
|||
'permissions' => $qb->expr()->literal(13), |
|||
'parent' => $qb->expr()->literal(1), |
|||
]); |
|||
$qb->execute(); |
|||
|
|||
$qb = $this->dbConn->getQueryBuilder(); |
|||
$qb->insert('share') |
|||
->values([ |
|||
'id' => $qb->expr()->literal(3), |
|||
'share_type' => $qb->expr()->literal(\OCP\Share::SHARE_TYPE_USER), |
|||
'share_with' => $qb->expr()->literal('sharedWith2'), |
|||
'uid_owner' => $qb->expr()->literal('sharedBy2'), |
|||
'file_source' => $qb->expr()->literal(42), |
|||
'permissions' => $qb->expr()->literal(13), |
|||
'parent' => $qb->expr()->literal(2), |
|||
]); |
|||
$qb->execute(); |
|||
|
|||
|
|||
$storage = $this->getMock('OC\Files\Storage\Storage'); |
|||
$storage |
|||
->expects($this->exactly(3)) |
|||
->method('getOwner') |
|||
->willReturn('shareOwner'); |
|||
$path = $this->getMock('OCP\Files\Node'); |
|||
$path |
|||
->expects($this->exactly(3)) |
|||
->method('getStorage') |
|||
->wilLReturn($storage); |
|||
$this->userFolder |
|||
->expects($this->exactly(3)) |
|||
->method('getById') |
|||
->with(42) |
|||
->willReturn([$path]); |
|||
|
|||
$sharedWith = $this->getMock('OCP\IUser'); |
|||
$sharedBy = $this->getMock('OCP\IUser'); |
|||
$shareOwner = $this->getMock('OCP\IUser'); |
|||
$this->userManager |
|||
->method('get') |
|||
->will($this->returnValueMap([ |
|||
['sharedWith', $sharedWith], |
|||
['sharedBy', $sharedBy], |
|||
['shareOwner', $shareOwner], |
|||
])); |
|||
|
|||
$share = $this->provider->getShareById(1); |
|||
$this->provider->delete($share); |
|||
|
|||
$qb = $this->dbConn->getQueryBuilder(); |
|||
$qb->select('*') |
|||
->from('share'); |
|||
|
|||
$cursor = $qb->execute(); |
|||
$result = $cursor->fetchAll(); |
|||
$cursor->closeCursor(); |
|||
|
|||
$this->assertEmpty($result); |
|||
} |
|||
|
|||
/** |
|||
* @expectedException \OC\Share20\Exception\BackendError |
|||
*/ |
|||
public function testDeleteFails() { |
|||
$share = $this->getMock('OC\Share20\IShare'); |
|||
$expr = $this->getMock('OCP\DB\QueryBuilder\IExpressionBuilder'); |
|||
$qb = $this->getMock('OCP\DB\QueryBuilder\IQueryBuilder'); |
|||
$qb->expects($this->once()) |
|||
->method('delete') |
|||
->will($this->returnSelf()); |
|||
$qb->expects($this->once()) |
|||
->method('expr') |
|||
->willReturn($expr); |
|||
$qb->expects($this->once()) |
|||
->method('where') |
|||
->will($this->returnSelf()); |
|||
$qb->expects($this->once()) |
|||
->method('setParameter') |
|||
->will($this->returnSelf()); |
|||
$qb->expects($this->once()) |
|||
->method('execute') |
|||
->will($this->throwException(new \Exception)); |
|||
|
|||
$db = $this->getMock('OCP\IDBConnection'); |
|||
$db->expects($this->once()) |
|||
->method('getQueryBuilder') |
|||
->with() |
|||
->willReturn($qb); |
|||
|
|||
$provider = $this->getMockBuilder('OC\Share20\DefaultShareProvider') |
|||
->setConstructorArgs([ |
|||
$db, |
|||
$this->userManager, |
|||
$this->groupManager, |
|||
$this->userFolder, |
|||
] |
|||
) |
|||
->setMethods(['deleteChildren']) |
|||
->getMock(); |
|||
$provider |
|||
->expects($this->once()) |
|||
->method('deleteChildren') |
|||
->with($share); |
|||
|
|||
|
|||
$provider->delete($share); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,198 @@ |
|||
<?php |
|||
/** |
|||
* @author Roeland Jago Douma <rullzer@owncloud.com> |
|||
* |
|||
* @copyright Copyright (c) 2015, ownCloud, Inc. |
|||
* @license AGPL-3.0 |
|||
* |
|||
* This code is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU Affero General Public License, version 3, |
|||
* as published by the Free Software Foundation. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU Affero General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU Affero General Public License, version 3, |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/> |
|||
* |
|||
*/ |
|||
namespace Test\Share20; |
|||
|
|||
use OC\Share20\Manager; |
|||
use OC\Share20\Exception; |
|||
|
|||
|
|||
use OCP\IUser; |
|||
use OCP\IUserManager; |
|||
use OCP\IGroupManager; |
|||
use OCP\ILogger; |
|||
use OCP\IAppConfig; |
|||
use OCP\Files\Folder; |
|||
use OCP\Share20\IShareProvider; |
|||
|
|||
class ManagerTest extends \Test\TestCase { |
|||
|
|||
/** @var Manager */ |
|||
protected $manager; |
|||
|
|||
/** @var IUser */ |
|||
protected $user; |
|||
|
|||
/** @var IUserManager */ |
|||
protected $userManager; |
|||
|
|||
/** @var IGroupManager */ |
|||
protected $groupManager; |
|||
|
|||
/** @var ILogger */ |
|||
protected $logger; |
|||
|
|||
/** @var IAppConfig */ |
|||
protected $appConfig; |
|||
|
|||
/** @var Folder */ |
|||
protected $userFolder; |
|||
|
|||
/** @var IShareProvider */ |
|||
protected $defaultProvider; |
|||
|
|||
public function setUp() { |
|||
|
|||
$this->user = $this->getMock('\OCP\IUser'); |
|||
$this->userManager = $this->getMock('\OCP\IUserManager'); |
|||
$this->groupManager = $this->getMock('\OCP\IGroupManager'); |
|||
$this->logger = $this->getMock('\OCP\ILogger'); |
|||
$this->appConfig = $this->getMock('\OCP\IAppConfig'); |
|||
$this->userFolder = $this->getMock('\OCP\Files\Folder'); |
|||
$this->defaultProvider = $this->getMock('\OC\Share20\IShareProvider'); |
|||
|
|||
$this->manager = new Manager( |
|||
$this->user, |
|||
$this->userManager, |
|||
$this->groupManager, |
|||
$this->logger, |
|||
$this->appConfig, |
|||
$this->userFolder, |
|||
$this->defaultProvider |
|||
); |
|||
} |
|||
|
|||
/** |
|||
* @expectedException OC\Share20\Exception\ShareNotFound |
|||
*/ |
|||
public function testDeleteNoShareId() { |
|||
$share = $this->getMock('\OC\Share20\IShare'); |
|||
|
|||
$share |
|||
->expects($this->once()) |
|||
->method('getId') |
|||
->with() |
|||
->willReturn(null); |
|||
|
|||
$this->manager->deleteShare($share); |
|||
} |
|||
|
|||
public function testDelete() { |
|||
$share = $this->getMock('\OC\Share20\IShare'); |
|||
|
|||
$share |
|||
->expects($this->once()) |
|||
->method('getId') |
|||
->with() |
|||
->willReturn(42); |
|||
$this->defaultProvider |
|||
->expects($this->once()) |
|||
->method('delete') |
|||
->with($share); |
|||
|
|||
$this->manager->deleteShare($share); |
|||
} |
|||
|
|||
/** |
|||
* @expectedException OC\Share20\Exception\ShareNotFound |
|||
*/ |
|||
public function testGetShareByIdNotFoundInBackend() { |
|||
$this->defaultProvider |
|||
->expects($this->once()) |
|||
->method('getShareById') |
|||
->with(42) |
|||
->will($this->throwException(new \OC\Share20\Exception\ShareNotFound())); |
|||
|
|||
$this->manager->getShareById(42); |
|||
} |
|||
|
|||
/** |
|||
* @expectedException OC\Share20\Exception\ShareNotFound |
|||
*/ |
|||
public function testGetShareByIdNotAuthorized() { |
|||
$otherUser1 = $this->getMock('\OCP\IUser'); |
|||
$otherUser2 = $this->getMock('\OCP\IUser'); |
|||
$otherUser3 = $this->getMock('\OCP\IUser'); |
|||
|
|||
$share = $this->getMock('\OC\Share20\IShare'); |
|||
$share |
|||
->expects($this->once()) |
|||
->method('getSharedWith') |
|||
->with() |
|||
->willReturn($otherUser1); |
|||
$share |
|||
->expects($this->once()) |
|||
->method('getSharedBy') |
|||
->with() |
|||
->willReturn($otherUser2); |
|||
$share |
|||
->expects($this->once()) |
|||
->method('getShareOwner') |
|||
->with() |
|||
->willReturn($otherUser3); |
|||
|
|||
$this->defaultProvider |
|||
->expects($this->once()) |
|||
->method('getShareById') |
|||
->with(42) |
|||
->willReturn($share); |
|||
|
|||
$this->manager->getShareById(42); |
|||
} |
|||
|
|||
public function dataGetShareById() { |
|||
return [ |
|||
['getSharedWith'], |
|||
['getSharedBy'], |
|||
['getShareOwner'], |
|||
]; |
|||
} |
|||
|
|||
/** |
|||
* @dataProvider dataGetShareById |
|||
*/ |
|||
public function testGetShareById($currentUserIs) { |
|||
$otherUser1 = $this->getMock('\OCP\IUser'); |
|||
$otherUser2 = $this->getMock('\OCP\IUser'); |
|||
$otherUser3 = $this->getMock('\OCP\IUser'); |
|||
|
|||
$share = $this->getMock('\OC\Share20\IShare'); |
|||
$share |
|||
->method('getSharedWith') |
|||
->with() |
|||
->willReturn($currentUserIs === 'getSharedWith' ? $this->user : $otherUser1); |
|||
$share |
|||
->method('getSharedBy') |
|||
->with() |
|||
->willReturn($currentUserIs === 'getSharedBy' ? $this->user : $otherUser2); |
|||
$share |
|||
->method('getShareOwner') |
|||
->with() |
|||
->willReturn($currentUserIs === 'getShareOwner' ? $this->user : $otherUser3); |
|||
|
|||
$this->defaultProvider |
|||
->expects($this->once()) |
|||
->method('getShareById') |
|||
->with(42) |
|||
->willReturn($share); |
|||
|
|||
$this->assertEquals($share, $this->manager->getShareById(42)); |
|||
} |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue