diff --git a/core/Migrations/Version20170927145820.php b/core/Migrations/Version20170927145820.php new file mode 100644 index 000000000000..906abc89c363 --- /dev/null +++ b/core/Migrations/Version20170927145820.php @@ -0,0 +1,57 @@ +createTable("{$prefix}backend_groups"); + $table->addColumn('id', Type::INTEGER, [ + 'autoincrement' => true, + 'unsigned' => true, + 'notnull' => true, + ]); + $table->addColumn('group_id', Type::STRING, [ + 'notnull' => true, + 'length' => 255, + ]); + $table->addColumn('display_name', Type::STRING, [ + 'notnull' => false, + 'length' => 255, + ]); + $table->addColumn('backend', Type::STRING, [ + 'notnull' => true, + 'length' => 64, + ]); + $table->setPrimaryKey(['id']); + + // Group Memberships Table + $table = $schema->createTable("{$prefix}memberships"); + $table->addColumn('backend_group_id', Type::INTEGER, [ + 'notnull' => true, + 'unsigned' => true, + ]); + $table->addColumn('account_id', Type::BIGINT, [ + 'notnull' => true, + 'unsigned' => true, + ]); + $table->addColumn('membership_type', Type::SMALLINT, [ + 'notnull' => true, + 'comment' => '0: GroupUser, 1: GroupAdmin' + ]); + + // This set of values has to be unique + $table->addUniqueIndex(['backend_group_id', 'account_id', 'membership_type'], 'group_account_membership_index'); + + //TODO: Do it later since it requires changes here for Oracle https://github.com/owncloud/core/blob/master/lib/private/DB/OracleMigrator.php#L158-L160 + // Add foreign keys on backend_group and accounts tables + //$table->addForeignKeyConstraint("{$prefix}backend_groups",array('backend_group_id'), array('id')); + //$table->addForeignKeyConstraint("{$prefix}accounts", array('account_id'), array('id')); + } +} diff --git a/lib/private/Group/BackendGroup.php b/lib/private/Group/BackendGroup.php new file mode 100644 index 000000000000..2f3748a6c547 --- /dev/null +++ b/lib/private/Group/BackendGroup.php @@ -0,0 +1,62 @@ + + * + * @copyright Copyright (c) 2017, ownCloud GmbH + * @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 + * + */ + +namespace OC\Group; + +use OCP\AppFramework\Db\Entity; +use OCP\GroupInterface; + +/** + * Class BackendGroup + * + * @method int getGroupId() + * @method string getDisplayName() + * @method void setDisplayName(string $displayName) + * @method string getBackend() + * @method void setBackend(string $backEnd) + * + * @package OC\Group + */ +class BackendGroup extends Entity { + + protected $groupId; + protected $displayName; + protected $backend; + + public function __construct() { } + + public function setGroupId($gid) { + parent::setter('groupId', [$gid]); + } + + /** + * @return GroupInterface + */ + public function getBackendInstance() { + $backendClass = $this->getBackend(); + if (empty($backendClass)) { + return null; + } + + return \OC::$server->getGroupManager()->getBackend($backendClass); + } + +} \ No newline at end of file diff --git a/lib/private/Group/GroupMapper.php b/lib/private/Group/GroupMapper.php new file mode 100644 index 000000000000..931a89ce1368 --- /dev/null +++ b/lib/private/Group/GroupMapper.php @@ -0,0 +1,75 @@ + + * + * @copyright Copyright (c) 2017, ownCloud GmbH + * @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 + * + */ + +namespace OC\Group; + +use OC\Group\BackendGroup; +use OCP\AppFramework\Db\Mapper; +use OCP\AppFramework\Db\Entity; +use OCP\IConfig; +use OCP\IDBConnection; + +class GroupMapper extends Mapper { + + public function __construct(IDBConnection $db) { + parent::__construct($db, 'backend_groups', BackendGroup::class); + } + + /** + * @param BackendGroup $entity + * @return Entity the saved entity with the set id + */ + public function insert(Entity $entity) { + // run the normal entity insert operation to get an id + return parent::insert($entity); + } + + /** + * @param string $uid + * @return BackendGroup + */ + public function getGroup($gid) { + $qb = $this->db->getQueryBuilder(); + $qb->select('*') + ->from($this->getTableName()) + ->where($qb->expr()->eq('group_id', $qb->createNamedParameter($gid))); + + return $this->findEntity($qb->getSQL(), $qb->getParameters()); + } + + /** + * @param string $fieldName + * @param string $pattern + * @param integer $limit + * @param integer $offset + * @return BackendGroup[] + */ + public function search($fieldName, $pattern, $limit, $offset) { + $qb = $this->db->getQueryBuilder(); + $qb->select('*') + ->from($this->getTableName()) + ->where($qb->expr()->iLike($fieldName, $qb->createNamedParameter('%' . $this->db->escapeLikeParameter($pattern) . '%'))) + ->orderBy($fieldName); + + return $this->findEntities($qb->getSQL(), $qb->getParameters(), $limit, $offset); + } + +} diff --git a/lib/private/Group/Manager.php b/lib/private/Group/Manager.php index 4b90edb58ce2..7d626001aac7 100644 --- a/lib/private/Group/Manager.php +++ b/lib/private/Group/Manager.php @@ -15,6 +15,7 @@ * @author Thomas Müller * @author Vincent Petry * @author voxsim + * @authod Piotr Mrowczynski * * @copyright Copyright (c) 2017, ownCloud GmbH * @license AGPL-3.0 @@ -38,6 +39,8 @@ use OC\Hooks\PublicEmitter; use OCP\GroupInterface; use OCP\IGroupManager; +use OC\Group\GroupMapper; +use OC\Group\Database; /** * Class Manager @@ -55,34 +58,30 @@ * @package OC\Group */ class Manager extends PublicEmitter implements IGroupManager { - /** - * @var GroupInterface[] $backends - */ + /** @var GroupInterface[] $backends */ private $backends = []; - /** - * @var \OC\User\Manager $userManager - */ + /** @var \OC\User\Manager $userManager */ private $userManager; - /** - * @var \OC\Group\Group[] - */ + /** @var \OC\Group\Group[] */ private $cachedGroups = []; - /** - * @var \OC\Group\Group[] - */ + /** @var \OC\Group\Group[] */ private $cachedUserGroups = []; /** @var \OC\SubAdmin */ private $subAdmin = null; + /** @var \OC\Group\GroupMapper */ + private $groupMapper; + /** * @param \OC\User\Manager $userManager */ - public function __construct(\OC\User\Manager $userManager) { + public function __construct(\OC\User\Manager $userManager, \OC\Group\GroupMapper $groupMapper) { $this->userManager = $userManager; + $this->groupMapper = $groupMapper; $cachedGroups = & $this->cachedGroups; $cachedUserGroups = & $this->cachedUserGroups; $this->listen('\OC\Group', 'postDelete', function ($group) use (&$cachedGroups, &$cachedUserGroups) { @@ -136,7 +135,7 @@ public function clearBackends() { $this->backends = []; $this->clearCaches(); } - + protected function clearCaches() { $this->cachedGroups = []; $this->cachedUserGroups = []; @@ -212,6 +211,21 @@ public function createGroup($gid) { } } + + /** + * @param string $gid + * @param string $backendClass + * @return BackendGroup|\OCP\AppFramework\Db\Entity + */ + private function createBackendGroup($gid, $backendClass) { + $account = new BackendGroup(); + $account->setGroupId($gid); + $account->setDisplayName($gid); + $account->setBackend($backendClass); + $account = $this->groupMapper->insert($account); + return $account; + } + /** * @param string $search search string * @param int|null $limit limit diff --git a/lib/private/Server.php b/lib/private/Server.php index 59fa05491c4e..4324fdbd97f8 100644 --- a/lib/private/Server.php +++ b/lib/private/Server.php @@ -87,6 +87,7 @@ use OC\Theme\ThemeService; use OC\User\AccountMapper; use OC\User\AccountTermMapper; +use OC\Group\GroupMapper; use OCP\IL10N; use OCP\ILogger; use OCP\IServerContainer; @@ -232,13 +233,16 @@ public function __construct($webRoot, \OC\Config $config) { $this->registerService('AccountMapper', function(Server $c) { return new AccountMapper($c->getConfig(), $c->getDatabaseConnection(), new AccountTermMapper($c->getDatabaseConnection())); }); + $this->registerService('GroupMapper', function(Server $c) { + return new GroupMapper($c->getDatabaseConnection()); + }); $this->registerService('UserManager', function (Server $c) { $config = $c->getConfig(); $logger = $c->getLogger(); return new \OC\User\Manager($config, $logger, $c->getAccountMapper()); }); $this->registerService('GroupManager', function (Server $c) { - $groupManager = new \OC\Group\Manager($this->getUserManager()); + $groupManager = new \OC\Group\Manager($this->getUserManager(), $c->getGroupMapper()); $groupManager->listen('\OC\Group', 'preCreate', function ($gid) { \OC_Hook::emit('OC_Group', 'pre_createGroup', ['run' => true, 'gid' => $gid]); }); @@ -975,6 +979,13 @@ public function getAccountMapper() { return $this->query('AccountMapper'); } + /** + * @return \OC\Group\GroupMapper + */ + public function getGroupMapper() { + return $this->query('GroupMapper'); + } + /** * @return \OC\Group\Manager */ diff --git a/tests/lib/Group/GroupMapperTest.php b/tests/lib/Group/GroupMapperTest.php new file mode 100644 index 000000000000..49d3cbd55af9 --- /dev/null +++ b/tests/lib/Group/GroupMapperTest.php @@ -0,0 +1,151 @@ + + * + * @copyright Copyright (c) 2017, ownCloud GmbH + * @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 + * + */ + +namespace Test\Group; + +use OC\Group\BackendGroup; +use OC\Group\GroupMapper; +use OCP\IConfig; +use OCP\IDBConnection; +use Test\TestCase; +use OCP\AppFramework\Db\DoesNotExistException; + +/** + * Class GroupMapperTest + * + * @group DB + * + * @package Test\User + */ +class GroupMapperTest extends TestCase { + + /** @var IConfig | \PHPUnit_Framework_MockObject_MockObject */ + protected $config; + + /** @var IDBConnection */ + protected $connection; + + /** @var GroupMapper */ + protected $mapper; + + public static function setUpBeforeClass() { + parent::setUpBeforeClass(); + $mapper = \OC::$server->getGroupMapper(); + + \OC::$server->getDatabaseConnection()->beginTransaction(); + + // create test users + for ($i = 1; $i <= 4; $i++) { + + + try { + $backendGroup = $mapper->getGroup("TestFind$i"); + $mapper->delete($backendGroup); + } catch (DoesNotExistException $ex) { + } + + $backendGroup = new BackendGroup(); + $backendGroup->setGroupId("TestFind$i"); + $backendGroup->setDisplayName("TestFind$i"); + $backendGroup->setBackend(self::class); + + $mapper->insert($backendGroup); + } + } + + public function setUp() { + parent::setUp(); + + $this->config = $this->createMock(IConfig::class); + + $this->connection = \OC::$server->getDatabaseConnection(); + + $this->mapper = new GroupMapper( + $this->connection + ); + } + + public static function tearDownAfterClass () { + \OC::$server->getDatabaseConnection()->rollBack(); + parent::tearDownAfterClass(); + } + + /** + * find one record without lowercase + */ + public function testGet() { + $result = $this->mapper->getGroup("TestFind1"); + $this->assertInstanceOf("OC\Group\BackendGroup", $result); + } + + /** + * find one record without lowercase + */ + public function testInsert() { + $backendGroup = new BackendGroup(); + $backendGroup->setGroupId("TestFind5"); + $backendGroup->setDisplayName("TestFind5"); + $backendGroup->setBackend(self::class); + + $mapper = \OC::$server->getGroupMapper(); + $mapper->insert($backendGroup); + $result = $this->mapper->getGroup("TestFind5"); + $this->assertInstanceOf("OC\Group\BackendGroup", $result); + } + + /** + * find nothing because of lower case + * + * @expectedException \OCP\AppFramework\Db\DoesNotExistException + */ + public function testGetNone() { + $this->mapper->getGroup("testfind1"); + } + + + /** + * find all, use lower case + */ + public function testFindAll() { + $result = $this->mapper->search('group_id',"testfind", null, null); + $this->assertEquals(5, count($result)); + } + + + /** + * find by userid, use lower case + */ + public function testFindByGroupId() { + $result = $this->mapper->search('group_id',"testfind1", null, null); + $this->assertEquals(1, count($result)); + $this->assertEquals("TestFind1", array_shift($result)->getGroupId()); + } + + /** + * find with limit and offset, use lower case + */ + public function testFindLimitAndOffset() { + $result = $this->mapper->search('group_id','Test', 2, 2); + $this->assertEquals(2, count($result)); + $this->assertEquals("TestFind3", array_shift($result)->getGroupId()); + $this->assertEquals("TestFind4", array_shift($result)->getGroupId()); + } +} \ No newline at end of file diff --git a/tests/lib/Group/ManagerTest.php b/tests/lib/Group/ManagerTest.php index c49e6f501df4..beb77a2c1592 100644 --- a/tests/lib/Group/ManagerTest.php +++ b/tests/lib/Group/ManagerTest.php @@ -23,6 +23,7 @@ namespace Test\Group; use OC\Group\Database; +use OC\Group\GroupMapper; use OC\User\Manager; use OCP\IUser; use OCP\GroupInterface; @@ -97,7 +98,11 @@ public function testGet() { * @var \OC\User\Manager $userManager */ $userManager = $this->createMock(Manager::class); - $manager = new \OC\Group\Manager($userManager); + /** + * @var \OC\Group\GroupMapper $groupMapper + */ + $groupMapper = $this->createMock(GroupMapper::class); + $manager = new \OC\Group\Manager($userManager, $groupMapper); $manager->addBackend($backend); $group = $manager->get('group1'); @@ -110,7 +115,11 @@ public function testGetNoBackend() { * @var \OC\User\Manager $userManager */ $userManager = $this->createMock(Manager::class); - $manager = new \OC\Group\Manager($userManager); + /** + * @var \OC\Group\GroupMapper $groupMapper + */ + $groupMapper = $this->createMock(GroupMapper::class); + $manager = new \OC\Group\Manager($userManager, $groupMapper); $this->assertNull($manager->get('group1')); } @@ -129,7 +138,11 @@ public function testGetNotExists() { * @var \OC\User\Manager $userManager */ $userManager = $this->createMock(Manager::class); - $manager = new \OC\Group\Manager($userManager); + /** + * @var \OC\Group\GroupMapper $groupMapper + */ + $groupMapper = $this->createMock(GroupMapper::class); + $manager = new \OC\Group\Manager($userManager, $groupMapper); $manager->addBackend($backend); $this->assertNull($manager->get('group1')); @@ -143,7 +156,11 @@ public function testGetDeleted() { * @var \OC\User\Manager $userManager */ $userManager = $this->createMock(Manager::class); - $manager = new \OC\Group\Manager($userManager); + /** + * @var \OC\Group\GroupMapper $groupMapper + */ + $groupMapper = $this->createMock(GroupMapper::class); + $manager = new \OC\Group\Manager($userManager, $groupMapper); $manager->addBackend($backend); $group = $manager->get('group1'); @@ -174,7 +191,11 @@ public function testGetMultipleBackends() { * @var \OC\User\Manager $userManager */ $userManager = $this->createMock(Manager::class); - $manager = new \OC\Group\Manager($userManager); + /** + * @var \OC\Group\GroupMapper $groupMapper + */ + $groupMapper = $this->createMock(GroupMapper::class); + $manager = new \OC\Group\Manager($userManager, $groupMapper); $manager->addBackend($backend1); $manager->addBackend($backend2); @@ -205,7 +226,11 @@ public function testCreate() { * @var \OC\User\Manager $userManager */ $userManager = $this->createMock(Manager::class); - $manager = new \OC\Group\Manager($userManager); + /** + * @var \OC\Group\GroupMapper $groupMapper + */ + $groupMapper = $this->createMock(GroupMapper::class); + $manager = new \OC\Group\Manager($userManager, $groupMapper); $manager->addBackend($backend); $group = $manager->createGroup('group1'); @@ -228,7 +253,11 @@ public function testCreateExists() { * @var \OC\User\Manager $userManager */ $userManager = $this->createMock(Manager::class); - $manager = new \OC\Group\Manager($userManager); + /** + * @var \OC\Group\GroupMapper $groupMapper + */ + $groupMapper = $this->createMock(GroupMapper::class); + $manager = new \OC\Group\Manager($userManager, $groupMapper); $manager->addBackend($backend); $group = $manager->createGroup('group1'); @@ -253,7 +282,11 @@ public function testSearch() { * @var \OC\User\Manager $userManager */ $userManager = $this->createMock(Manager::class); - $manager = new \OC\Group\Manager($userManager); + /** + * @var \OC\Group\GroupMapper $groupMapper + */ + $groupMapper = $this->createMock(GroupMapper::class); + $manager = new \OC\Group\Manager($userManager, $groupMapper); $manager->addBackend($backend); $groups = $manager->search('1'); @@ -291,7 +324,11 @@ public function testSearchMultipleBackends() { * @var \OC\User\Manager $userManager */ $userManager = $this->createMock(Manager::class); - $manager = new \OC\Group\Manager($userManager); + /** + * @var \OC\Group\GroupMapper $groupMapper + */ + $groupMapper = $this->createMock(GroupMapper::class); + $manager = new \OC\Group\Manager($userManager, $groupMapper); $manager->addBackend($backend1); $manager->addBackend($backend2); @@ -332,7 +369,11 @@ public function testSearchMultipleBackendsLimitAndOffset() { * @var \OC\User\Manager $userManager */ $userManager = $this->createMock(Manager::class); - $manager = new \OC\Group\Manager($userManager); + /** + * @var \OC\Group\GroupMapper $groupMapper + */ + $groupMapper = $this->createMock(GroupMapper::class); + $manager = new \OC\Group\Manager($userManager, $groupMapper); $manager->addBackend($backend1); $manager->addBackend($backend2); @@ -365,8 +406,11 @@ public function testSearchResultExistsButGroupDoesNot() { * @var \OC\User\Manager $userManager */ $userManager = $this->createMock(Manager::class); - - $manager = new \OC\Group\Manager($userManager); + /** + * @var \OC\Group\GroupMapper $groupMapper + */ + $groupMapper = $this->createMock(GroupMapper::class); + $manager = new \OC\Group\Manager($userManager, $groupMapper); $manager->addBackend($backend); $groups = $manager->search('1'); @@ -405,7 +449,11 @@ public function testSearchBackendsForScope() { * @var \OC\User\Manager $userManager */ $userManager = $this->createMock(Manager::class); - $manager = new \OC\Group\Manager($userManager); + /** + * @var \OC\Group\GroupMapper $groupMapper + */ + $groupMapper = $this->createMock(GroupMapper::class); + $manager = new \OC\Group\Manager($userManager, $groupMapper); $manager->addBackend($backend1); $manager->addBackend($backend2); @@ -443,7 +491,11 @@ public function testGetUserGroups() { */ $userManager = $this->createMock(Manager::class); $userBackend = $this->createMock(\OC_User_Backend::class); - $manager = new \OC\Group\Manager($userManager); + /** + * @var \OC\Group\GroupMapper $groupMapper + */ + $groupMapper = $this->createMock(GroupMapper::class); + $manager = new \OC\Group\Manager($userManager, $groupMapper); $manager->addBackend($backend); $groups = $manager->getUserGroups($this->getTestUser('user1')); @@ -497,7 +549,11 @@ public function testGetUserGroupsWithDeletedGroup() { */ $userManager = $this->createMock(Manager::class); $userBackend = $this->createMock(\OC_User_Backend::class); - $manager = new \OC\Group\Manager($userManager); + /** + * @var \OC\Group\GroupMapper $groupMapper + */ + $groupMapper = $this->createMock(GroupMapper::class); + $manager = new \OC\Group\Manager($userManager, $groupMapper); $manager->addBackend($backend); /** @var \OC\User\User $user */ @@ -530,7 +586,11 @@ public function testGetUserGroupsWithScope() { */ $userManager = $this->createMock(Manager::class); $userBackend = $this->createMock(\OC_User_Backend::class); - $manager = new \OC\Group\Manager($userManager); + /** + * @var \OC\Group\GroupMapper $groupMapper + */ + $groupMapper = $this->createMock(GroupMapper::class); + $manager = new \OC\Group\Manager($userManager, $groupMapper); $manager->addBackend($backend); $groups = $manager->getUserGroups($this->getTestUser('user1')); @@ -560,7 +620,11 @@ public function testInGroup() { */ $userManager = $this->createMock(Manager::class); $userBackend = $this->createMock(\OC_User_Backend::class); - $manager = new \OC\Group\Manager($userManager); + /** + * @var \OC\Group\GroupMapper $groupMapper + */ + $groupMapper = $this->createMock(GroupMapper::class); + $manager = new \OC\Group\Manager($userManager, $groupMapper); $manager->addBackend($backend); $this->assertTrue($manager->isInGroup('user1', 'group1')); @@ -584,7 +648,11 @@ public function testIsAdmin() { */ $userManager = $this->createMock(Manager::class); $userBackend = $this->createMock(\OC_User_Backend::class); - $manager = new \OC\Group\Manager($userManager); + /** + * @var \OC\Group\GroupMapper $groupMapper + */ + $groupMapper = $this->createMock(GroupMapper::class); + $manager = new \OC\Group\Manager($userManager, $groupMapper); $manager->addBackend($backend); $this->assertTrue($manager->isAdmin('user1')); @@ -608,7 +676,11 @@ public function testNotAdmin() { */ $userManager = $this->createMock(Manager::class); $userBackend = $this->createMock(\OC_User_Backend::class); - $manager = new \OC\Group\Manager($userManager); + /** + * @var \OC\Group\GroupMapper $groupMapper + */ + $groupMapper = $this->createMock(GroupMapper::class); + $manager = new \OC\Group\Manager($userManager, $groupMapper); $manager->addBackend($backend); $this->assertFalse($manager->isAdmin('user1')); @@ -644,7 +716,11 @@ public function testGetUserGroupsMultipleBackends() { */ $userManager = $this->createMock(Manager::class); $userBackend = $this->createMock(\OC_User_Backend::class); - $manager = new \OC\Group\Manager($userManager); + /** + * @var \OC\Group\GroupMapper $groupMapper + */ + $groupMapper = $this->createMock(GroupMapper::class); + $manager = new \OC\Group\Manager($userManager, $groupMapper); $manager->addBackend($backend1); $manager->addBackend($backend2); @@ -709,7 +785,11 @@ public function testDisplayNamesInGroupWithOneUserBackend() { } })); - $manager = new \OC\Group\Manager($userManager); + /** + * @var \OC\Group\GroupMapper $groupMapper + */ + $groupMapper = $this->createMock(GroupMapper::class); + $manager = new \OC\Group\Manager($userManager, $groupMapper); $manager->addBackend($backend); $users = $manager->displayNamesInGroup('testgroup', 'user3'); @@ -775,7 +855,11 @@ public function testDisplayNamesInGroupWithOneUserBackendWithLimitSpecified() { } })); - $manager = new \OC\Group\Manager($userManager); + /** + * @var \OC\Group\GroupMapper $groupMapper + */ + $groupMapper = $this->createMock(GroupMapper::class); + $manager = new \OC\Group\Manager($userManager, $groupMapper);; $manager->addBackend($backend); $users = $manager->displayNamesInGroup('testgroup', 'user3', 1); @@ -845,7 +929,11 @@ public function testDisplayNamesInGroupWithOneUserBackendWithLimitAndOffsetSpeci } })); - $manager = new \OC\Group\Manager($userManager); + /** + * @var \OC\Group\GroupMapper $groupMapper + */ + $groupMapper = $this->createMock(GroupMapper::class); + $manager = new \OC\Group\Manager($userManager, $groupMapper); $manager->addBackend($backend); $users = $manager->displayNamesInGroup('testgroup', 'user3', 1, 1); @@ -891,7 +979,11 @@ public function testDisplayNamesInGroupWithOneUserBackendAndSearchEmpty() { } })); - $manager = new \OC\Group\Manager($userManager); + /** + * @var \OC\Group\GroupMapper $groupMapper + */ + $groupMapper = $this->createMock(GroupMapper::class); + $manager = new \OC\Group\Manager($userManager, $groupMapper); $manager->addBackend($backend); $users = $manager->displayNamesInGroup('testgroup', ''); @@ -935,7 +1027,11 @@ public function testDisplayNamesInGroupWithOneUserBackendAndSearchEmptyAndLimitS } })); - $manager = new \OC\Group\Manager($userManager); + /** + * @var \OC\Group\GroupMapper $groupMapper + */ + $groupMapper = $this->createMock(GroupMapper::class); + $manager = new \OC\Group\Manager($userManager, $groupMapper); $manager->addBackend($backend); $users = $manager->displayNamesInGroup('testgroup', '', 1); @@ -980,7 +1076,11 @@ public function testDisplayNamesInGroupWithOneUserBackendAndSearchEmptyAndLimitA } })); - $manager = new \OC\Group\Manager($userManager); + /** + * @var \OC\Group\GroupMapper $groupMapper + */ + $groupMapper = $this->createMock(GroupMapper::class); + $manager = new \OC\Group\Manager($userManager, $groupMapper); $manager->addBackend($backend); $users = $manager->displayNamesInGroup('testgroup', '', 1, 1); @@ -1012,7 +1112,11 @@ public function testGetUserGroupsWithAddUser() { * @var \OC\User\Manager $userManager */ $userManager = $this->createMock(Manager::class); - $manager = new \OC\Group\Manager($userManager); + /** + * @var \OC\Group\GroupMapper $groupMapper + */ + $groupMapper = $this->createMock(GroupMapper::class); + $manager = new \OC\Group\Manager($userManager, $groupMapper); $manager->addBackend($backend); // prime cache @@ -1059,7 +1163,11 @@ public function testGetUserGroupsWithRemoveUser() { * @var \OC\User\Manager $userManager */ $userManager = $this->createMock(Manager::class); - $manager = new \OC\Group\Manager($userManager); + /** + * @var \OC\Group\GroupMapper $groupMapper + */ + $groupMapper = $this->createMock(GroupMapper::class); + $manager = new \OC\Group\Manager($userManager, $groupMapper); $manager->addBackend($backend); // prime cache @@ -1093,7 +1201,11 @@ public function testGetUserIdGroups() { * @var \OC\User\Manager $userManager */ $userManager = $this->createMock(Manager::class); - $manager = new \OC\Group\Manager($userManager); + /** + * @var \OC\Group\GroupMapper $groupMapper + */ + $groupMapper = $this->createMock(GroupMapper::class); + $manager = new \OC\Group\Manager($userManager, $groupMapper); $manager->addBackend($backend); $groups = $manager->getUserIdGroups('user1'); @@ -1123,7 +1235,11 @@ public function testGroupDisplayName() { * @var \OC\User\Manager $userManager */ $userManager = $this->createMock(Manager::class); - $manager = new \OC\Group\Manager($userManager); + /** + * @var \OC\Group\GroupMapper $groupMapper + */ + $groupMapper = $this->createMock(GroupMapper::class); + $manager = new \OC\Group\Manager($userManager, $groupMapper); $manager->addBackend($backend); // group with display name @@ -1192,7 +1308,11 @@ public function testFindUsersInGroupWithOneUserBackend() { } })); - $manager = new \OC\Group\Manager($userManager); + /** + * @var \OC\Group\GroupMapper $groupMapper + */ + $groupMapper = $this->createMock(GroupMapper::class); + $manager = new \OC\Group\Manager($userManager, $groupMapper); $manager->addBackend($backend); $users = $manager->findUsersInGroup('testgroup', 'user3'); @@ -1258,7 +1378,11 @@ public function testFindUsersInGroupWithOneUserBackendWithLimitSpecified() { } })); - $manager = new \OC\Group\Manager($userManager); + /** + * @var \OC\Group\GroupMapper $groupMapper + */ + $groupMapper = $this->createMock(GroupMapper::class); + $manager = new \OC\Group\Manager($userManager, $groupMapper); $manager->addBackend($backend); $users = $manager->findUsersInGroup('testgroup', 'user3', 1); @@ -1328,7 +1452,11 @@ public function testFindUsersInGroupWithOneUserBackendWithLimitAndOffsetSpecifie } })); - $manager = new \OC\Group\Manager($userManager); + /** + * @var \OC\Group\GroupMapper $groupMapper + */ + $groupMapper = $this->createMock(GroupMapper::class); + $manager = new \OC\Group\Manager($userManager, $groupMapper); $manager->addBackend($backend); $users = $manager->findUsersInGroup('testgroup', 'user3', 1, 1); @@ -1374,7 +1502,11 @@ public function testFindUsersInGroupWithOneUserBackendAndSearchEmpty() { } })); - $manager = new \OC\Group\Manager($userManager); + /** + * @var \OC\Group\GroupMapper $groupMapper + */ + $groupMapper = $this->createMock(GroupMapper::class); + $manager = new \OC\Group\Manager($userManager, $groupMapper); $manager->addBackend($backend); $users = $manager->findUsersInGroup('testgroup', ''); @@ -1418,7 +1550,11 @@ public function testFindUsersInGroupWithOneUserBackendAndSearchEmptyAndLimitSpec } })); - $manager = new \OC\Group\Manager($userManager); + /** + * @var \OC\Group\GroupMapper $groupMapper + */ + $groupMapper = $this->createMock(GroupMapper::class); + $manager = new \OC\Group\Manager($userManager, $groupMapper); $manager->addBackend($backend); $users = $manager->findUsersInGroup('testgroup', '', 1); @@ -1463,7 +1599,11 @@ public function testFindUsersInGroupWithOneUserBackendAndSearchEmptyAndLimitAndO } })); - $manager = new \OC\Group\Manager($userManager); + /** + * @var \OC\Group\GroupMapper $groupMapper + */ + $groupMapper = $this->createMock(GroupMapper::class); + $manager = new \OC\Group\Manager($userManager, $groupMapper); $manager->addBackend($backend); $users = $manager->findUsersInGroup('testgroup', '', 1, 1); diff --git a/version.php b/version.php index 9b5ae3eccc36..f10e49539b97 100644 --- a/version.php +++ b/version.php @@ -25,10 +25,10 @@ // We only can count up. The 4. digit is only for the internal patchlevel to trigger DB upgrades // between betas, final and RCs. This is _not_ the public version number. Reset minor/patchlevel // when updating major/minor version number. -$OC_Version = [10, 0, 3, 3]; +$OC_Version = [10, 0, 4, 0]; // The human readable string -$OC_VersionString = '10.0.3'; +$OC_VersionString = '10.0.4'; $OC_VersionCanBeUpgradedFrom = [[8, 2, 11],[9, 0, 9],[9, 1]];