Merge pull request #5813 from nextcloud/11-backport-3884
[stable11] Skip null groups in group manager
This commit is contained in:
commit
10a4491ff9
|
@ -777,7 +777,7 @@ class ShareAPIController extends OCSController {
|
|||
if ($checkGroups && $share->getShareType() === \OCP\Share::SHARE_TYPE_GROUP) {
|
||||
$sharedWith = $this->groupManager->get($share->getSharedWith());
|
||||
$user = $this->userManager->get($this->currentUser);
|
||||
if ($user !== null && $sharedWith->inGroup($user)) {
|
||||
if ($user !== null && $sharedWith !== null && $sharedWith->inGroup($user)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -170,7 +170,23 @@ class MountProvider implements IMountProvider {
|
|||
if ($share->getTarget() !== $superShare->getTarget()) {
|
||||
// adjust target, for database consistency
|
||||
$share->setTarget($superShare->getTarget());
|
||||
$this->shareManager->moveShare($share, $user->getUID());
|
||||
try {
|
||||
$this->shareManager->moveShare($share, $user->getUID());
|
||||
} catch (\InvalidArgumentException $e) {
|
||||
// ignore as it is not important and we don't want to
|
||||
// block FS setup
|
||||
|
||||
// the subsequent code anyway only uses the target of the
|
||||
// super share
|
||||
|
||||
// such issue can usually happen when dealing with
|
||||
// null groups which usually appear with group backend
|
||||
// caching inconsistencies
|
||||
$this->logger->debug(
|
||||
'Could not adjust share target for share ' . $share->getId() . ' to make it consistent: ' . $e->getMessage(),
|
||||
['app' => 'files_sharing']
|
||||
);
|
||||
}
|
||||
}
|
||||
if (!is_null($share->getNodeCacheEntry())) {
|
||||
$superShare->setNodeCacheEntry($share->getNodeCacheEntry());
|
||||
|
|
|
@ -545,14 +545,19 @@ class ShareAPIControllerTest extends \Test\TestCase {
|
|||
$this->groupManager->method('get')->will($this->returnValueMap([
|
||||
['group', $group],
|
||||
['group2', $group2],
|
||||
['groupnull', null],
|
||||
]));
|
||||
$this->assertTrue($this->invokePrivate($this->ocs, 'canAccessShare', [$share]));
|
||||
|
||||
$share = $this->getMockBuilder('OCP\Share\IShare')->getMock();
|
||||
$share->method('getShareType')->willReturn(\OCP\Share::SHARE_TYPE_GROUP);
|
||||
$share->method('getSharedWith')->willReturn('group2');
|
||||
$this->assertFalse($this->invokePrivate($this->ocs, 'canAccessShare', [$share]));
|
||||
|
||||
$this->groupManager->method('get')->with('group2')->willReturn($group);
|
||||
// null group
|
||||
$share = $this->getMock('OCP\Share\IShare');
|
||||
$share->method('getShareType')->willReturn(\OCP\Share::SHARE_TYPE_GROUP);
|
||||
$share->method('getSharedWith')->willReturn('groupnull');
|
||||
$this->assertFalse($this->invokePrivate($this->ocs, 'canAccessShare', [$share]));
|
||||
|
||||
$share = $this->getMockBuilder('OCP\Share\IShare')->getMock();
|
||||
|
|
|
@ -263,6 +263,20 @@ class MountProviderTest extends \Test\TestCase {
|
|||
['1', 100, 'user2', '/share2-renamed', 31],
|
||||
],
|
||||
],
|
||||
// #9: share as outsider with "nullgroup" and "user1" where recipient renamed in between
|
||||
[
|
||||
[
|
||||
[2, 100, 'user2', '/share2', 31],
|
||||
],
|
||||
[
|
||||
[1, 100, 'nullgroup', '/share2-renamed', 31],
|
||||
],
|
||||
[
|
||||
// use target of least recent share
|
||||
['1', 100, 'nullgroup', '/share2-renamed', 31],
|
||||
],
|
||||
true
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
|
@ -278,7 +292,7 @@ class MountProviderTest extends \Test\TestCase {
|
|||
* @param array $groupShares array of group share specs
|
||||
* @param array $expectedShares array of expected supershare specs
|
||||
*/
|
||||
public function testMergeShares($userShares, $groupShares, $expectedShares) {
|
||||
public function testMergeShares($userShares, $groupShares, $expectedShares, $moveFails = false) {
|
||||
$rootFolder = $this->createMock(IRootFolder::class);
|
||||
$userManager = $this->createMock(IUserManager::class);
|
||||
|
||||
|
@ -307,6 +321,12 @@ class MountProviderTest extends \Test\TestCase {
|
|||
return new \OC\Share20\Share($rootFolder, $userManager);
|
||||
}));
|
||||
|
||||
if ($moveFails) {
|
||||
$this->shareManager->expects($this->any())
|
||||
->method('moveShare')
|
||||
->will($this->throwException(new \InvalidArgumentException()));
|
||||
}
|
||||
|
||||
$mounts = $this->provider->getMountsForUser($this->user, $this->loader);
|
||||
|
||||
$this->assertCount(count($expectedShares), $mounts);
|
||||
|
|
|
@ -37,7 +37,10 @@ namespace OC\Group;
|
|||
|
||||
use OC\Hooks\PublicEmitter;
|
||||
use OCP\GroupInterface;
|
||||
use OCP\IGroup;
|
||||
use OCP\IGroupManager;
|
||||
use OCP\ILogger;
|
||||
use OCP\IUser;
|
||||
|
||||
/**
|
||||
* Class Manager
|
||||
|
@ -78,11 +81,16 @@ class Manager extends PublicEmitter implements IGroupManager {
|
|||
/** @var \OC\SubAdmin */
|
||||
private $subAdmin = null;
|
||||
|
||||
/** @var ILogger */
|
||||
private $logger;
|
||||
|
||||
/**
|
||||
* @param \OC\User\Manager $userManager
|
||||
* @param ILogger $logger
|
||||
*/
|
||||
public function __construct(\OC\User\Manager $userManager) {
|
||||
public function __construct(\OC\User\Manager $userManager, ILogger $logger) {
|
||||
$this->userManager = $userManager;
|
||||
$this->logger = $logger;
|
||||
$cachedGroups = & $this->cachedGroups;
|
||||
$cachedUserGroups = & $this->cachedUserGroups;
|
||||
$this->listen('\OC\Group', 'postDelete', function ($group) use (&$cachedGroups, &$cachedUserGroups) {
|
||||
|
@ -176,7 +184,7 @@ class Manager extends PublicEmitter implements IGroupManager {
|
|||
* @return bool
|
||||
*/
|
||||
public function groupExists($gid) {
|
||||
return !is_null($this->get($gid));
|
||||
return $this->get($gid) instanceof IGroup;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -184,7 +192,7 @@ class Manager extends PublicEmitter implements IGroupManager {
|
|||
* @return \OC\Group\Group
|
||||
*/
|
||||
public function createGroup($gid) {
|
||||
if ($gid === '' || is_null($gid)) {
|
||||
if ($gid === '' || $gid === null) {
|
||||
return false;
|
||||
} else if ($group = $this->get($gid)) {
|
||||
return $group;
|
||||
|
@ -213,7 +221,12 @@ class Manager extends PublicEmitter implements IGroupManager {
|
|||
foreach ($this->backends as $backend) {
|
||||
$groupIds = $backend->getGroups($search, $limit, $offset);
|
||||
foreach ($groupIds as $groupId) {
|
||||
$groups[$groupId] = $this->get($groupId);
|
||||
$aGroup = $this->get($groupId);
|
||||
if ($aGroup instanceof IGroup) {
|
||||
$groups[$groupId] = $aGroup;
|
||||
} else {
|
||||
$this->logger->debug('Group "' . $groupId . '" was returned by search but not found through direct access', ['app' => 'core']);
|
||||
}
|
||||
}
|
||||
if (!is_null($limit) and $limit <= 0) {
|
||||
return array_values($groups);
|
||||
|
@ -227,7 +240,7 @@ class Manager extends PublicEmitter implements IGroupManager {
|
|||
* @return \OC\Group\Group[]
|
||||
*/
|
||||
public function getUserGroups($user) {
|
||||
if (is_null($user)) {
|
||||
if (!$user instanceof IUser) {
|
||||
return [];
|
||||
}
|
||||
return $this->getUserIdGroups($user->getUID());
|
||||
|
@ -246,7 +259,12 @@ class Manager extends PublicEmitter implements IGroupManager {
|
|||
$groupIds = $backend->getUserGroups($uid);
|
||||
if (is_array($groupIds)) {
|
||||
foreach ($groupIds as $groupId) {
|
||||
$groups[$groupId] = $this->get($groupId);
|
||||
$aGroup = $this->get($groupId);
|
||||
if ($aGroup instanceof IGroup) {
|
||||
$groups[$groupId] = $aGroup;
|
||||
} else {
|
||||
$this->logger->debug('User "' . $uid . '" belongs to deleted group: "' . $groupId . '"', ['app' => 'core']);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -223,7 +223,7 @@ class Server extends ServerContainer implements IServerContainer {
|
|||
return new \OC\User\Manager($config);
|
||||
});
|
||||
$this->registerService('GroupManager', function (Server $c) {
|
||||
$groupManager = new \OC\Group\Manager($this->getUserManager());
|
||||
$groupManager = new \OC\Group\Manager($this->getUserManager(), $this->getLogger());
|
||||
$groupManager->listen('\OC\Group', 'preCreate', function ($gid) {
|
||||
\OC_Hook::emit('OC_Group', 'pre_createGroup', array('run' => true, 'gid' => $gid));
|
||||
});
|
||||
|
|
|
@ -329,6 +329,10 @@ class DefaultShareProvider implements IShareProvider {
|
|||
$group = $this->groupManager->get($share->getSharedWith());
|
||||
$user = $this->userManager->get($recipient);
|
||||
|
||||
if (is_null($group)) {
|
||||
throw new ProviderException('Group "' . $share->getSharedWith() . '" does not exist');
|
||||
}
|
||||
|
||||
if (!$group->inGroup($user)) {
|
||||
throw new ProviderException('Recipient not in receiving group');
|
||||
}
|
||||
|
|
|
@ -393,10 +393,12 @@ class Manager implements IManager {
|
|||
// The share is already shared with this user via a group share
|
||||
if ($existingShare->getShareType() === \OCP\Share::SHARE_TYPE_GROUP) {
|
||||
$group = $this->groupManager->get($existingShare->getSharedWith());
|
||||
$user = $this->userManager->get($share->getSharedWith());
|
||||
if (!is_null($group)) {
|
||||
$user = $this->userManager->get($share->getSharedWith());
|
||||
|
||||
if ($group->inGroup($user) && $existingShare->getShareOwner() !== $share->getShareOwner()) {
|
||||
throw new \Exception('Path already shared with this user');
|
||||
if ($group->inGroup($user) && $existingShare->getShareOwner() !== $share->getShareOwner()) {
|
||||
throw new \Exception('Path already shared with this user');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -418,7 +420,7 @@ class Manager implements IManager {
|
|||
if ($this->shareWithGroupMembersOnly()) {
|
||||
$sharedBy = $this->userManager->get($share->getSharedBy());
|
||||
$sharedWith = $this->groupManager->get($share->getSharedWith());
|
||||
if (!$sharedWith->inGroup($sharedBy)) {
|
||||
if (is_null($sharedWith) || !$sharedWith->inGroup($sharedBy)) {
|
||||
throw new \Exception('Only sharing within your own groups is allowed');
|
||||
}
|
||||
}
|
||||
|
@ -887,6 +889,9 @@ class Manager implements IManager {
|
|||
|
||||
if ($share->getShareType() === \OCP\Share::SHARE_TYPE_GROUP) {
|
||||
$sharedWith = $this->groupManager->get($share->getSharedWith());
|
||||
if (is_null($sharedWith)) {
|
||||
throw new \InvalidArgumentException('Group "' . $share->getSharedWith() . '" does not exist');
|
||||
}
|
||||
$recipient = $this->userManager->get($recipientId);
|
||||
if (!$sharedWith->inGroup($recipient)) {
|
||||
throw new \InvalidArgumentException('Invalid recipient');
|
||||
|
|
|
@ -9,12 +9,18 @@
|
|||
|
||||
namespace Test\Group;
|
||||
|
||||
use OC\Group\Database;
|
||||
use OC\User\Manager;
|
||||
use OC\User\User;
|
||||
use OCP\ILogger;
|
||||
use OCP\IUser;
|
||||
use Test\TestCase;
|
||||
|
||||
class ManagerTest extends \Test\TestCase {
|
||||
class ManagerTest extends TestCase {
|
||||
/** @var Manager */
|
||||
private $userManager;
|
||||
/** @var ILogger|\PHPUnit_Framework_MockObject_MockObject $userManager */
|
||||
protected $logger;
|
||||
|
||||
public function setUp() {
|
||||
parent::setUp();
|
||||
|
@ -22,6 +28,7 @@ class ManagerTest extends \Test\TestCase {
|
|||
$this->userManager = $this->getMockBuilder('\OC\User\Manager')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$this->logger = $this->createMock(ILogger::class);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -52,7 +59,7 @@ class ManagerTest extends \Test\TestCase {
|
|||
->with('group1')
|
||||
->will($this->returnValue(true));
|
||||
|
||||
$manager = new \OC\Group\Manager($this->userManager);
|
||||
$manager = new \OC\Group\Manager($this->userManager, $this->logger);
|
||||
$manager->addBackend($backend);
|
||||
|
||||
$group = $manager->get('group1');
|
||||
|
@ -61,7 +68,7 @@ class ManagerTest extends \Test\TestCase {
|
|||
}
|
||||
|
||||
public function testGetNoBackend() {
|
||||
$manager = new \OC\Group\Manager($this->userManager);
|
||||
$manager = new \OC\Group\Manager($this->userManager, $this->logger);
|
||||
|
||||
$this->assertNull($manager->get('group1'));
|
||||
}
|
||||
|
@ -78,7 +85,7 @@ class ManagerTest extends \Test\TestCase {
|
|||
->with('group1')
|
||||
->will($this->returnValue(false));
|
||||
|
||||
$manager = new \OC\Group\Manager($this->userManager);
|
||||
$manager = new \OC\Group\Manager($this->userManager, $this->logger);
|
||||
$manager->addBackend($backend);
|
||||
|
||||
$this->assertNull($manager->get('group1'));
|
||||
|
@ -88,7 +95,7 @@ class ManagerTest extends \Test\TestCase {
|
|||
$backend = new \Test\Util\Group\Dummy();
|
||||
$backend->createGroup('group1');
|
||||
|
||||
$manager = new \OC\Group\Manager($this->userManager);
|
||||
$manager = new \OC\Group\Manager($this->userManager, $this->logger);
|
||||
$manager->addBackend($backend);
|
||||
|
||||
$group = $manager->get('group1');
|
||||
|
@ -119,7 +126,7 @@ class ManagerTest extends \Test\TestCase {
|
|||
->with('group1')
|
||||
->will($this->returnValue(true));
|
||||
|
||||
$manager = new \OC\Group\Manager($this->userManager);
|
||||
$manager = new \OC\Group\Manager($this->userManager, $this->logger);
|
||||
$manager->addBackend($backend1);
|
||||
$manager->addBackend($backend2);
|
||||
|
||||
|
@ -129,9 +136,7 @@ class ManagerTest extends \Test\TestCase {
|
|||
}
|
||||
|
||||
public function testCreate() {
|
||||
/**
|
||||
* @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend
|
||||
*/
|
||||
/**@var \PHPUnit_Framework_MockObject_MockObject|\OC\Group\Backend $backend */
|
||||
$backendGroupCreated = false;
|
||||
$backend = $this->getMockBuilder('\OC\Group\Database')
|
||||
->disableOriginalConstructor()
|
||||
|
@ -149,9 +154,9 @@ class ManagerTest extends \Test\TestCase {
|
|||
->method('createGroup')
|
||||
->will($this->returnCallback(function () use (&$backendGroupCreated) {
|
||||
$backendGroupCreated = true;
|
||||
}));;
|
||||
}));
|
||||
|
||||
$manager = new \OC\Group\Manager($this->userManager);
|
||||
$manager = new \OC\Group\Manager($this->userManager, $this->logger);
|
||||
$manager->addBackend($backend);
|
||||
|
||||
$group = $manager->createGroup('group1');
|
||||
|
@ -159,9 +164,7 @@ class ManagerTest extends \Test\TestCase {
|
|||
}
|
||||
|
||||
public function testCreateExists() {
|
||||
/**
|
||||
* @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend
|
||||
*/
|
||||
/** @var \PHPUnit_Framework_MockObject_MockObject|\OC\Group\Backend $backend */
|
||||
$backend = $this->getMockBuilder('\OC\Group\Database')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
@ -172,7 +175,7 @@ class ManagerTest extends \Test\TestCase {
|
|||
$backend->expects($this->never())
|
||||
->method('createGroup');
|
||||
|
||||
$manager = new \OC\Group\Manager($this->userManager);
|
||||
$manager = new \OC\Group\Manager($this->userManager, $this->logger);
|
||||
$manager->addBackend($backend);
|
||||
|
||||
$group = $manager->createGroup('group1');
|
||||
|
@ -195,11 +198,11 @@ class ManagerTest extends \Test\TestCase {
|
|||
->with('group1')
|
||||
->will($this->returnValue(true));
|
||||
|
||||
$manager = new \OC\Group\Manager($this->userManager);
|
||||
$manager = new \OC\Group\Manager($this->userManager, $this->logger);
|
||||
$manager->addBackend($backend);
|
||||
|
||||
$groups = $manager->search('1');
|
||||
$this->assertEquals(1, count($groups));
|
||||
$this->assertCount(1, $groups);
|
||||
$group1 = reset($groups);
|
||||
$this->assertEquals('group1', $group1->getGID());
|
||||
}
|
||||
|
@ -233,12 +236,12 @@ class ManagerTest extends \Test\TestCase {
|
|||
->method('groupExists')
|
||||
->will($this->returnValue(true));
|
||||
|
||||
$manager = new \OC\Group\Manager($this->userManager);
|
||||
$manager = new \OC\Group\Manager($this->userManager, $this->logger);
|
||||
$manager->addBackend($backend1);
|
||||
$manager->addBackend($backend2);
|
||||
|
||||
$groups = $manager->search('1');
|
||||
$this->assertEquals(2, count($groups));
|
||||
$this->assertCount(2, $groups);
|
||||
$group1 = reset($groups);
|
||||
$group12 = next($groups);
|
||||
$this->assertEquals('group1', $group1->getGID());
|
||||
|
@ -274,18 +277,40 @@ class ManagerTest extends \Test\TestCase {
|
|||
->method('groupExists')
|
||||
->will($this->returnValue(true));
|
||||
|
||||
$manager = new \OC\Group\Manager($this->userManager);
|
||||
$manager = new \OC\Group\Manager($this->userManager, $this->logger);
|
||||
$manager->addBackend($backend1);
|
||||
$manager->addBackend($backend2);
|
||||
|
||||
$groups = $manager->search('1', 2, 1);
|
||||
$this->assertEquals(2, count($groups));
|
||||
$this->assertCount(2, $groups);
|
||||
$group1 = reset($groups);
|
||||
$group12 = next($groups);
|
||||
$this->assertEquals('group1', $group1->getGID());
|
||||
$this->assertEquals('group12', $group12->getGID());
|
||||
}
|
||||
|
||||
public function testSearchResultExistsButGroupDoesNot() {
|
||||
/** @var \PHPUnit_Framework_MockObject_MockObject|\OC\Group\Backend $backend */
|
||||
$backend = $this->createMock(Database::class);
|
||||
$backend->expects($this->once())
|
||||
->method('getGroups')
|
||||
->with('1')
|
||||
->will($this->returnValue(['group1']));
|
||||
$backend->expects($this->once())
|
||||
->method('groupExists')
|
||||
->with('group1')
|
||||
->will($this->returnValue(false));
|
||||
|
||||
/** @var \OC\User\Manager $userManager */
|
||||
$userManager = $this->createMock(Manager::class);
|
||||
|
||||
$manager = new \OC\Group\Manager($userManager, $this->logger);
|
||||
$manager->addBackend($backend);
|
||||
|
||||
$groups = $manager->search('1');
|
||||
$this->assertEmpty($groups);
|
||||
}
|
||||
|
||||
public function testGetUserGroups() {
|
||||
/**
|
||||
* @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend
|
||||
|
@ -305,18 +330,18 @@ class ManagerTest extends \Test\TestCase {
|
|||
$userBackend = $this->getMockBuilder('\OC\Group\Database')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$manager = new \OC\Group\Manager($this->userManager);
|
||||
$manager = new \OC\Group\Manager($this->userManager, $this->logger);
|
||||
$manager->addBackend($backend);
|
||||
|
||||
$groups = $manager->getUserGroups($this->newUser('user1', $userBackend));
|
||||
$this->assertEquals(1, count($groups));
|
||||
$this->assertCount(1, $groups);
|
||||
$group1 = reset($groups);
|
||||
$this->assertEquals('group1', $group1->getGID());
|
||||
}
|
||||
|
||||
public function testGetUserGroupIds() {
|
||||
/** @var \PHPUnit_Framework_MockObject_MockObject|\OC\Group\Manager $manager */
|
||||
$manager = $this->getMockBuilder('OC\Group\Manager')
|
||||
$manager = $this->getMockBuilder(\OC\Group\Manager::class)
|
||||
->disableOriginalConstructor()
|
||||
->setMethods(['getUserGroups'])
|
||||
->getMock();
|
||||
|
@ -327,19 +352,44 @@ class ManagerTest extends \Test\TestCase {
|
|||
'abc' => 'abc',
|
||||
]);
|
||||
|
||||
/** @var \OC\User\User $user */
|
||||
$user = $this->getMockBuilder('OC\User\User')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
/** @var \OC\User\User|\PHPUnit_Framework_MockObject_MockObject $user */
|
||||
$user = $this->createMock(IUser::class);
|
||||
|
||||
$groups = $manager->getUserGroupIds($user);
|
||||
$this->assertEquals(2, count($groups));
|
||||
$this->assertCount(2, $groups);
|
||||
|
||||
foreach ($groups as $group) {
|
||||
$this->assertInternalType('string', $group);
|
||||
}
|
||||
}
|
||||
|
||||
public function testGetUserGroupsWithDeletedGroup() {
|
||||
/**
|
||||
* @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend
|
||||
*/
|
||||
$backend = $this->createMock(Database::class);
|
||||
$backend->expects($this->once())
|
||||
->method('getUserGroups')
|
||||
->with('user1')
|
||||
->will($this->returnValue(array('group1')));
|
||||
$backend->expects($this->any())
|
||||
->method('groupExists')
|
||||
->with('group1')
|
||||
->will($this->returnValue(false));
|
||||
|
||||
$manager = new \OC\Group\Manager($this->userManager, $this->logger);
|
||||
$manager->addBackend($backend);
|
||||
|
||||
/** @var \OC\User\User|\PHPUnit_Framework_MockObject_MockObject $user */
|
||||
$user = $this->createMock(IUser::class);
|
||||
$user->expects($this->atLeastOnce())
|
||||
->method('getUID')
|
||||
->willReturn('user1');
|
||||
|
||||
$groups = $manager->getUserGroups($user);
|
||||
$this->assertEmpty($groups);
|
||||
}
|
||||
|
||||
public function testInGroup() {
|
||||
/**
|
||||
* @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend
|
||||
|
@ -355,7 +405,7 @@ class ManagerTest extends \Test\TestCase {
|
|||
->method('groupExists')
|
||||
->will($this->returnValue(true));
|
||||
|
||||
$manager = new \OC\Group\Manager($this->userManager);
|
||||
$manager = new \OC\Group\Manager($this->userManager, $this->logger);
|
||||
$manager->addBackend($backend);
|
||||
|
||||
$this->assertTrue($manager->isInGroup('user1', 'group1'));
|
||||
|
@ -376,7 +426,7 @@ class ManagerTest extends \Test\TestCase {
|
|||
->method('groupExists')
|
||||
->will($this->returnValue(true));
|
||||
|
||||
$manager = new \OC\Group\Manager($this->userManager);
|
||||
$manager = new \OC\Group\Manager($this->userManager, $this->logger);
|
||||
$manager->addBackend($backend);
|
||||
|
||||
$this->assertTrue($manager->isAdmin('user1'));
|
||||
|
@ -397,7 +447,7 @@ class ManagerTest extends \Test\TestCase {
|
|||
->method('groupExists')
|
||||
->will($this->returnValue(true));
|
||||
|
||||
$manager = new \OC\Group\Manager($this->userManager);
|
||||
$manager = new \OC\Group\Manager($this->userManager, $this->logger);
|
||||
$manager->addBackend($backend);
|
||||
|
||||
$this->assertFalse($manager->isAdmin('user1'));
|
||||
|
@ -435,12 +485,12 @@ class ManagerTest extends \Test\TestCase {
|
|||
$userBackend = $this->getMockBuilder('\OC\User\Backend')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$manager = new \OC\Group\Manager($this->userManager);
|
||||
$manager = new \OC\Group\Manager($this->userManager, $this->logger);
|
||||
$manager->addBackend($backend1);
|
||||
$manager->addBackend($backend2);
|
||||
|
||||
$groups = $manager->getUserGroups($this->newUser('user1', $userBackend));
|
||||
$this->assertEquals(2, count($groups));
|
||||
$this->assertCount(2, $groups);
|
||||
$group1 = reset($groups);
|
||||
$group2 = next($groups);
|
||||
$this->assertEquals('group1', $group1->getGID());
|
||||
|
@ -500,11 +550,11 @@ class ManagerTest extends \Test\TestCase {
|
|||
}
|
||||
}));
|
||||
|
||||
$manager = new \OC\Group\Manager($this->userManager);
|
||||
$manager = new \OC\Group\Manager($this->userManager, $this->logger);
|
||||
$manager->addBackend($backend);
|
||||
|
||||
$users = $manager->displayNamesInGroup('testgroup', 'user3');
|
||||
$this->assertEquals(1, count($users));
|
||||
$this->assertCount(1, $users);
|
||||
$this->assertFalse(isset($users['user1']));
|
||||
$this->assertFalse(isset($users['user2']));
|
||||
$this->assertFalse(isset($users['user3']));
|
||||
|
@ -566,11 +616,11 @@ class ManagerTest extends \Test\TestCase {
|
|||
}
|
||||
}));
|
||||
|
||||
$manager = new \OC\Group\Manager($this->userManager);
|
||||
$manager = new \OC\Group\Manager($this->userManager, $this->logger);
|
||||
$manager->addBackend($backend);
|
||||
|
||||
$users = $manager->displayNamesInGroup('testgroup', 'user3', 1);
|
||||
$this->assertEquals(1, count($users));
|
||||
$this->assertCount(1, $users);
|
||||
$this->assertFalse(isset($users['user1']));
|
||||
$this->assertFalse(isset($users['user2']));
|
||||
$this->assertFalse(isset($users['user3']));
|
||||
|
@ -636,11 +686,11 @@ class ManagerTest extends \Test\TestCase {
|
|||
}
|
||||
}));
|
||||
|
||||
$manager = new \OC\Group\Manager($this->userManager);
|
||||
$manager = new \OC\Group\Manager($this->userManager, $this->logger);
|
||||
$manager->addBackend($backend);
|
||||
|
||||
$users = $manager->displayNamesInGroup('testgroup', 'user3', 1, 1);
|
||||
$this->assertEquals(1, count($users));
|
||||
$this->assertCount(1, $users);
|
||||
$this->assertFalse(isset($users['user1']));
|
||||
$this->assertFalse(isset($users['user2']));
|
||||
$this->assertFalse(isset($users['user3']));
|
||||
|
@ -682,11 +732,11 @@ class ManagerTest extends \Test\TestCase {
|
|||
}
|
||||
}));
|
||||
|
||||
$manager = new \OC\Group\Manager($this->userManager);
|
||||
$manager = new \OC\Group\Manager($this->userManager, $this->logger);
|
||||
$manager->addBackend($backend);
|
||||
|
||||
$users = $manager->displayNamesInGroup('testgroup', '');
|
||||
$this->assertEquals(2, count($users));
|
||||
$this->assertCount(2, $users);
|
||||
$this->assertFalse(isset($users['user1']));
|
||||
$this->assertTrue(isset($users['user2']));
|
||||
$this->assertFalse(isset($users['user3']));
|
||||
|
@ -727,11 +777,11 @@ class ManagerTest extends \Test\TestCase {
|
|||
}
|
||||
}));
|
||||
|
||||
$manager = new \OC\Group\Manager($this->userManager);
|
||||
$manager = new \OC\Group\Manager($this->userManager, $this->logger);
|
||||
$manager->addBackend($backend);
|
||||
|
||||
$users = $manager->displayNamesInGroup('testgroup', '', 1);
|
||||
$this->assertEquals(1, count($users));
|
||||
$this->assertCount(1, $users);
|
||||
$this->assertFalse(isset($users['user1']));
|
||||
$this->assertTrue(isset($users['user2']));
|
||||
$this->assertFalse(isset($users['user3']));
|
||||
|
@ -772,11 +822,11 @@ class ManagerTest extends \Test\TestCase {
|
|||
}
|
||||
}));
|
||||
|
||||
$manager = new \OC\Group\Manager($this->userManager);
|
||||
$manager = new \OC\Group\Manager($this->userManager, $this->logger);
|
||||
$manager->addBackend($backend);
|
||||
|
||||
$users = $manager->displayNamesInGroup('testgroup', '', 1, 1);
|
||||
$this->assertEquals(1, count($users));
|
||||
$this->assertCount(1, $users);
|
||||
$this->assertFalse(isset($users['user1']));
|
||||
$this->assertFalse(isset($users['user2']));
|
||||
$this->assertFalse(isset($users['user3']));
|
||||
|
@ -805,7 +855,7 @@ class ManagerTest extends \Test\TestCase {
|
|||
->method('implementsActions')
|
||||
->will($this->returnValue(true));
|
||||
|
||||
$manager = new \OC\Group\Manager($this->userManager);
|
||||
$manager = new \OC\Group\Manager($this->userManager, $this->logger);
|
||||
$manager->addBackend($backend);
|
||||
|
||||
// prime cache
|
||||
|
@ -816,11 +866,11 @@ class ManagerTest extends \Test\TestCase {
|
|||
// add user
|
||||
$group = $manager->get('group1');
|
||||
$group->addUser($user1);
|
||||
$expectedGroups = array('group1');
|
||||
$expectedGroups[] = 'group1';
|
||||
|
||||
// check result
|
||||
$groups = $manager->getUserGroups($user1);
|
||||
$this->assertEquals(1, count($groups));
|
||||
$this->assertCount(1, $groups);
|
||||
$group1 = reset($groups);
|
||||
$this->assertEquals('group1', $group1->getGID());
|
||||
}
|
||||
|
@ -853,13 +903,13 @@ class ManagerTest extends \Test\TestCase {
|
|||
->method('removeFromGroup')
|
||||
->will($this->returnValue(true));
|
||||
|
||||
$manager = new \OC\Group\Manager($this->userManager);
|
||||
$manager = new \OC\Group\Manager($this->userManager, $this->logger);
|
||||
$manager->addBackend($backend);
|
||||
|
||||
// prime cache
|
||||
$user1 = $this->newUser('user1', null);
|
||||
$groups = $manager->getUserGroups($user1);
|
||||
$this->assertEquals(1, count($groups));
|
||||
$this->assertCount(1, $groups);
|
||||
$group1 = reset($groups);
|
||||
$this->assertEquals('group1', $group1->getGID());
|
||||
|
||||
|
@ -885,7 +935,7 @@ class ManagerTest extends \Test\TestCase {
|
|||
->with('user1')
|
||||
->will($this->returnValue(null));
|
||||
|
||||
$manager = new \OC\Group\Manager($this->userManager);
|
||||
$manager = new \OC\Group\Manager($this->userManager, $this->logger);
|
||||
$manager->addBackend($backend);
|
||||
|
||||
$groups = $manager->getUserIdGroups('user1');
|
||||
|
|
|
@ -1524,6 +1524,48 @@ class DefaultShareProviderTest extends \Test\TestCase {
|
|||
$this->provider->deleteFromSelf($share, 'user2');
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \OC\Share20\Exception\ProviderException
|
||||
* @expectedExceptionMessage Group "group" does not exist
|
||||
*/
|
||||
public function testDeleteFromSelfGroupDoesNotExist() {
|
||||
$qb = $this->dbConn->getQueryBuilder();
|
||||
$stmt = $qb->insert('share')
|
||||
->values([
|
||||
'share_type' => $qb->expr()->literal(\OCP\Share::SHARE_TYPE_GROUP),
|
||||
'share_with' => $qb->expr()->literal('group'),
|
||||
'uid_owner' => $qb->expr()->literal('user1'),
|
||||
'uid_initiator' => $qb->expr()->literal('user1'),
|
||||
'item_type' => $qb->expr()->literal('file'),
|
||||
'file_source' => $qb->expr()->literal(1),
|
||||
'file_target' => $qb->expr()->literal('myTarget1'),
|
||||
'permissions' => $qb->expr()->literal(2)
|
||||
])->execute();
|
||||
$this->assertEquals(1, $stmt);
|
||||
$id = $qb->getLastInsertId();
|
||||
|
||||
$user1 = $this->getMock('\OCP\IUser');
|
||||
$user1->method('getUID')->willReturn('user1');
|
||||
$user2 = $this->getMock('\OCP\IUser');
|
||||
$user2->method('getUID')->willReturn('user2');
|
||||
$this->userManager->method('get')->will($this->returnValueMap([
|
||||
['user1', $user1],
|
||||
['user2', $user2],
|
||||
]));
|
||||
|
||||
$this->groupManager->method('get')->with('group')->willReturn(null);
|
||||
|
||||
$file = $this->getMock('\OCP\Files\File');
|
||||
$file->method('getId')->willReturn(1);
|
||||
|
||||
$this->rootFolder->method('getUserFolder')->with('user1')->will($this->returnSelf());
|
||||
$this->rootFolder->method('getById')->with(1)->willReturn([$file]);
|
||||
|
||||
$share = $this->provider->getShareById($id);
|
||||
|
||||
$this->provider->deleteFromSelf($share, 'user2');
|
||||
}
|
||||
|
||||
public function testDeleteFromSelfUser() {
|
||||
$qb = $this->dbConn->getQueryBuilder();
|
||||
$stmt = $qb->insert('share')
|
||||
|
|
|
@ -1138,6 +1138,39 @@ class ManagerTest extends \Test\TestCase {
|
|||
$this->invokePrivate($this->manager, 'userCreateChecks', [$share]);
|
||||
}
|
||||
|
||||
public function testUserCreateChecksIdenticalPathSharedViaDeletedGroup() {
|
||||
$share = $this->manager->newShare();
|
||||
|
||||
$sharedWith = $this->getMock('\OCP\IUser');
|
||||
$sharedWith->method('getUID')->willReturn('sharedWith');
|
||||
|
||||
$this->userManager->method('get')->with('sharedWith')->willReturn($sharedWith);
|
||||
|
||||
$path = $this->getMock('\OCP\Files\Node');
|
||||
|
||||
$share->setSharedWith('sharedWith')
|
||||
->setNode($path)
|
||||
->setShareOwner('shareOwner')
|
||||
->setProviderId('foo')
|
||||
->setId('bar');
|
||||
|
||||
$share2 = $this->manager->newShare();
|
||||
$share2->setShareType(\OCP\Share::SHARE_TYPE_GROUP)
|
||||
->setShareOwner('shareOwner2')
|
||||
->setProviderId('foo')
|
||||
->setId('baz')
|
||||
->setSharedWith('group');
|
||||
|
||||
$this->groupManager->method('get')->with('group')->willReturn(null);
|
||||
|
||||
$this->defaultProvider
|
||||
->method('getSharesByPath')
|
||||
->with($path)
|
||||
->willReturn([$share2]);
|
||||
|
||||
$this->assertNull($this->invokePrivate($this->manager, 'userCreateChecks', [$share]));
|
||||
}
|
||||
|
||||
public function testUserCreateChecksIdenticalPathNotSharedWithUser() {
|
||||
$share = $this->manager->newShare();
|
||||
$sharedWith = $this->createMock(IUser::class);
|
||||
|
@ -1215,6 +1248,29 @@ class ManagerTest extends \Test\TestCase {
|
|||
$this->invokePrivate($this->manager, 'groupCreateChecks', [$share]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Exception
|
||||
* @expectedExceptionMessage Only sharing within your own groups is allowed
|
||||
*/
|
||||
public function testGroupCreateChecksShareWithGroupMembersOnlyNullGroup() {
|
||||
$share = $this->manager->newShare();
|
||||
|
||||
$user = $this->getMock('\OCP\IUser');
|
||||
$share->setSharedBy('user')->setSharedWith('group');
|
||||
|
||||
$this->groupManager->method('get')->with('group')->willReturn(null);
|
||||
$this->userManager->method('get')->with('user')->willReturn($user);
|
||||
|
||||
$this->config
|
||||
->method('getAppValue')
|
||||
->will($this->returnValueMap([
|
||||
['core', 'shareapi_only_share_with_group_members', 'no', 'yes'],
|
||||
['core', 'shareapi_allow_group_sharing', 'yes', 'yes'],
|
||||
]));
|
||||
|
||||
$this->assertNull($this->invokePrivate($this->manager, 'groupCreateChecks', [$share]));
|
||||
}
|
||||
|
||||
public function testGroupCreateChecksShareWithGroupMembersOnlyInGroup() {
|
||||
$share = $this->manager->newShare();
|
||||
|
||||
|
@ -2510,6 +2566,23 @@ class ManagerTest extends \Test\TestCase {
|
|||
$this->manager->moveShare($share, 'recipient');
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \InvalidArgumentException
|
||||
* @expectedExceptionMessage Group "shareWith" does not exist
|
||||
*/
|
||||
public function testMoveShareGroupNull() {
|
||||
$share = $this->manager->newShare();
|
||||
$share->setShareType(\OCP\Share::SHARE_TYPE_GROUP);
|
||||
$share->setSharedWith('shareWith');
|
||||
|
||||
$recipient = $this->getMock('\OCP\IUser');
|
||||
|
||||
$this->groupManager->method('get')->with('shareWith')->willReturn(null);
|
||||
$this->userManager->method('get')->with('recipient')->willReturn($recipient);
|
||||
|
||||
$this->manager->moveShare($share, 'recipient');
|
||||
}
|
||||
|
||||
public function testMoveShareGroup() {
|
||||
$share = $this->manager->newShare();
|
||||
$share->setShareType(\OCP\Share::SHARE_TYPE_GROUP)
|
||||
|
|
Loading…
Reference in New Issue