introduce callForSeenUsers and countSeenUserstags/v11.0RC2
@@ -77,9 +77,9 @@ class ExpireTrash extends \OC\BackgroundJob\TimedJob { | |||
return; | |||
} | |||
$this->userManager->callForAllUsers(function(IUser $user) { | |||
$this->userManager->callForSeenUsers(function(IUser $user) { | |||
$uid = $user->getUID(); | |||
if ($user->getLastLogin() === 0 || !$this->setupFS($uid)) { | |||
if (!$this->setupFS($uid)) { | |||
return; | |||
} | |||
$dirContent = Helper::getTrashFiles('/', $uid, 'mtime'); |
@@ -89,7 +89,7 @@ class ExpireTrash extends Command { | |||
} else { | |||
$p = new ProgressBar($output); | |||
$p->start(); | |||
$this->userManager->callForAllUsers(function(IUser $user) use ($p) { | |||
$this->userManager->callForSeenUsers(function(IUser $user) use ($p) { | |||
$p->advance(); | |||
$this->expireTrashForUser($user); | |||
}); | |||
@@ -100,7 +100,7 @@ class ExpireTrash extends Command { | |||
function expireTrashForUser(IUser $user) { | |||
$uid = $user->getUID(); | |||
if ($user->getLastLogin() === 0 || !$this->setupFS($uid)) { | |||
if (!$this->setupFS($uid)) { | |||
return; | |||
} | |||
$dirContent = Helper::getTrashFiles('/', $uid, 'mtime'); |
@@ -67,9 +67,9 @@ class ExpireVersions extends \OC\BackgroundJob\TimedJob { | |||
return; | |||
} | |||
$this->userManager->callForAllUsers(function(IUser $user) { | |||
$this->userManager->callForSeenUsers(function(IUser $user) { | |||
$uid = $user->getUID(); | |||
if ($user->getLastLogin() === 0 || !$this->setupFS($uid)) { | |||
if (!$this->setupFS($uid)) { | |||
return; | |||
} | |||
Storage::expireOlderThanMaxForUser($uid); |
@@ -88,7 +88,7 @@ class ExpireVersions extends Command { | |||
} else { | |||
$p = new ProgressBar($output); | |||
$p->start(); | |||
$this->userManager->callForAllUsers(function(IUser $user) use ($p) { | |||
$this->userManager->callForSeenUsers(function(IUser $user) use ($p) { | |||
$p->advance(); | |||
$this->expireVersionsForUser($user); | |||
}); | |||
@@ -99,7 +99,7 @@ class ExpireVersions extends Command { | |||
function expireVersionsForUser(IUser $user) { | |||
$uid = $user->getUID(); | |||
if ($user->getLastLogin() === 0 || !$this->setupFS($uid)) { | |||
if (!$this->setupFS($uid)) { | |||
return; | |||
} | |||
Storage::expireOlderThanMaxForUser($uid); |
@@ -64,35 +64,33 @@ class MoveAvatarsBackgroundJob extends QueuedJob { | |||
private function moveAvatars() { | |||
$counter = 0; | |||
$this->userManager->callForAllUsers(function (IUser $user) use ($counter) { | |||
if ($user->getLastLogin() !== 0) { | |||
$uid = $user->getUID(); | |||
$this->userManager->callForSeenUsers(function (IUser $user) use ($counter) { | |||
$uid = $user->getUID(); | |||
\OC\Files\Filesystem::initMountPoints($uid); | |||
/** @var Folder $userFolder */ | |||
$userFolder = $this->rootFolder->get($uid); | |||
\OC\Files\Filesystem::initMountPoints($uid); | |||
/** @var Folder $userFolder */ | |||
$userFolder = $this->rootFolder->get($uid); | |||
try { | |||
$userData = $this->appData->getFolder($uid); | |||
} catch (NotFoundException $e) { | |||
$userData = $this->appData->newFolder($uid); | |||
} | |||
try { | |||
$userData = $this->appData->getFolder($uid); | |||
} catch (NotFoundException $e) { | |||
$userData = $this->appData->newFolder($uid); | |||
} | |||
$regex = '/^avatar\.([0-9]+\.)?(jpg|png)$/'; | |||
$avatars = $userFolder->getDirectoryListing(); | |||
$regex = '/^avatar\.([0-9]+\.)?(jpg|png)$/'; | |||
$avatars = $userFolder->getDirectoryListing(); | |||
foreach ($avatars as $avatar) { | |||
/** @var File $avatar */ | |||
if (preg_match($regex, $avatar->getName())) { | |||
/* | |||
* This is not the most effective but it is the most abstract way | |||
* to handle this. Avatars should be small anyways. | |||
*/ | |||
$newAvatar = $userData->newFile($avatar->getName()); | |||
$newAvatar->putContent($avatar->getContent()); | |||
$avatar->delete(); | |||
} | |||
foreach ($avatars as $avatar) { | |||
/** @var File $avatar */ | |||
if (preg_match($regex, $avatar->getName())) { | |||
/* | |||
* This is not the most effective but it is the most abstract way | |||
* to handle this. Avatars should be small anyways. | |||
*/ | |||
$newAvatar = $userData->newFile($avatar->getName()); | |||
$newAvatar->putContent($avatar->getContent()); | |||
$avatar->delete(); | |||
} | |||
} | |||
$counter++; |
@@ -96,30 +96,13 @@ class RemoveRootShares implements IRepairStep { | |||
$output->advance(); | |||
}; | |||
$userCount = $this->countUsers(); | |||
$output->startProgress($userCount); | |||
$output->startProgress($this->userManager->countSeenUsers()); | |||
$this->userManager->callForAllUsers($function); | |||
$this->userManager->callForSeenUsers($function); | |||
$output->finishProgress(); | |||
} | |||
/** | |||
* Count all the users | |||
* | |||
* @return int | |||
*/ | |||
private function countUsers() { | |||
$allCount = $this->userManager->countUsers(); | |||
$totalCount = 0; | |||
foreach ($allCount as $backend => $count) { | |||
$totalCount += $count; | |||
} | |||
return $totalCount; | |||
} | |||
/** | |||
* Verify if this repair steps is required | |||
* It *should* not be necessary in most cases and it can be very |
@@ -335,22 +335,6 @@ class RepairUnmergedShares implements IRepairStep { | |||
} | |||
} | |||
/** | |||
* Count all the users | |||
* | |||
* @return int | |||
*/ | |||
private function countUsers() { | |||
$allCount = $this->userManager->countUsers(); | |||
$totalCount = 0; | |||
foreach ($allCount as $backend => $count) { | |||
$totalCount += $count; | |||
} | |||
return $totalCount; | |||
} | |||
public function run(IOutput $output) { | |||
$ocVersionFromBeforeUpdate = $this->config->getSystemValue('version', '0.0.0'); | |||
if (version_compare($ocVersionFromBeforeUpdate, '9.1.0.16', '<')) { | |||
@@ -363,8 +347,7 @@ class RepairUnmergedShares implements IRepairStep { | |||
$this->buildPreparedQueries(); | |||
$userCount = $this->countUsers(); | |||
$output->startProgress($userCount); | |||
$output->startProgress($this->userManager->countUsers()); | |||
$this->userManager->callForAllUsers($function); | |||
@@ -72,7 +72,7 @@ class Manager extends PublicEmitter implements IUserManager { | |||
/** | |||
* @param \OCP\IConfig $config | |||
*/ | |||
public function __construct(IConfig $config = null) { | |||
public function __construct(IConfig $config) { | |||
$this->config = $config; | |||
$cachedUsers = &$this->cachedUsers; | |||
$this->listen('\OC\User', 'postDelete', function ($user) use (&$cachedUsers) { | |||
@@ -314,10 +314,16 @@ class Manager extends PublicEmitter implements IUserManager { | |||
/** | |||
* returns how many users per backend exist (if supported by backend) | |||
* | |||
* @return array an array of backend class as key and count number as value | |||
* @param boolean $hasLoggedIn when true only users that have a lastLogin | |||
* entry in the preferences table will be affected | |||
* @return array|int an array of backend class as key and count number as value | |||
* if $hasLoggedIn is true only an int is returned | |||
*/ | |||
public function countUsers() { | |||
$userCountStatistics = array(); | |||
public function countUsers($hasLoggedIn = false) { | |||
if ($hasLoggedIn) { | |||
return $this->countSeenUsers(); | |||
} | |||
$userCountStatistics = []; | |||
foreach ($this->backends as $backend) { | |||
if ($backend->implementsActions(Backend::COUNT_USERS)) { | |||
$backendUsers = $backend->countUsers(); | |||
@@ -344,27 +350,119 @@ class Manager extends PublicEmitter implements IUserManager { | |||
* | |||
* @param \Closure $callback | |||
* @param string $search | |||
* @param boolean $onlySeen when true only users that have a lastLogin entry | |||
* in the preferences table will be affected | |||
* @since 9.0.0 | |||
*/ | |||
public function callForAllUsers(\Closure $callback, $search = '') { | |||
foreach($this->getBackends() as $backend) { | |||
$limit = 500; | |||
$offset = 0; | |||
do { | |||
$users = $backend->getUsers($search, $limit, $offset); | |||
foreach ($users as $uid) { | |||
if (!$backend->userExists($uid)) { | |||
continue; | |||
public function callForAllUsers(\Closure $callback, $search = '', $onlySeen = false) { | |||
if ($onlySeen) { | |||
$this->callForSeenUsers($callback); | |||
} else { | |||
foreach ($this->getBackends() as $backend) { | |||
$limit = 500; | |||
$offset = 0; | |||
do { | |||
$users = $backend->getUsers($search, $limit, $offset); | |||
foreach ($users as $uid) { | |||
if (!$backend->userExists($uid)) { | |||
continue; | |||
} | |||
$user = $this->getUserObject($uid, $backend, false); | |||
$return = $callback($user); | |||
if ($return === false) { | |||
break; | |||
} | |||
} | |||
$user = $this->getUserObject($uid, $backend, false); | |||
$return = $callback($user); | |||
if ($return === false) { | |||
break; | |||
$offset += $limit; | |||
} while (count($users) >= $limit); | |||
} | |||
} | |||
} | |||
/** | |||
* returns how many users have logged in once | |||
* | |||
* @return int | |||
* @since 9.2.0 | |||
*/ | |||
public function countSeenUsers() { | |||
$queryBuilder = \OC::$server->getDatabaseConnection()->getQueryBuilder(); | |||
$queryBuilder->select($queryBuilder->createFunction('COUNT(*)')) | |||
->from('preferences') | |||
->where($queryBuilder->expr()->eq('appid', $queryBuilder->createNamedParameter('login'))) | |||
->andWhere($queryBuilder->expr()->eq('configkey', $queryBuilder->createNamedParameter('lastLogin'))) | |||
->andWhere($queryBuilder->expr()->isNotNull('configvalue')); | |||
$query = $queryBuilder->execute(); | |||
$result = (int)$query->fetchColumn(); | |||
$query->closeCursor(); | |||
return $result; | |||
} | |||
/** | |||
* @param \Closure $callback | |||
* @since 9.2.0 | |||
*/ | |||
public function callForSeenUsers(\Closure $callback) { | |||
$limit = 1000; | |||
$offset = 0; | |||
do { | |||
$userIds = $this->getSeenUserIds($limit, $offset); | |||
$offset += $limit; | |||
foreach ($userIds as $userId) { | |||
foreach ($this->backends as $backend) { | |||
if ($backend->userExists($userId)) { | |||
$user = $this->getUserObject($userId, $backend, false); | |||
$return = $callback($user); | |||
if ($return === false) { | |||
return; | |||
} | |||
} | |||
} | |||
$offset += $limit; | |||
} while (count($users) >= $limit); | |||
} | |||
} while (count($userIds) >= $limit); | |||
} | |||
/** | |||
* Getting all userIds that have a listLogin value requires checking the | |||
* value in php because on oracle you cannot use a clob in a where clause, | |||
* preventing us from doing a not null or length(value) > 0 check. | |||
* | |||
* @param int $limit | |||
* @param int $offset | |||
* @return string[] with user ids | |||
*/ | |||
private function getSeenUserIds($limit = null, $offset = null) { | |||
$queryBuilder = \OC::$server->getDatabaseConnection()->getQueryBuilder(); | |||
$queryBuilder->select(['userid']) | |||
->from('preferences') | |||
->where($queryBuilder->expr()->eq( | |||
'appid', $queryBuilder->createNamedParameter('login')) | |||
) | |||
->andWhere($queryBuilder->expr()->eq( | |||
'configkey', $queryBuilder->createNamedParameter('lastLogin')) | |||
) | |||
->andWhere($queryBuilder->expr()->isNotNull('configvalue') | |||
); | |||
if ($limit !== null) { | |||
$queryBuilder->setMaxResults($limit); | |||
} | |||
if ($offset !== null) { | |||
$queryBuilder->setFirstResult($offset); | |||
} | |||
$query = $queryBuilder->execute(); | |||
$result = []; | |||
while ($row = $query->fetch()) { | |||
$result[] = $row['userid']; | |||
} | |||
$query->closeCursor(); | |||
return $result; | |||
} | |||
/** |
@@ -142,7 +142,21 @@ interface IUserManager { | |||
* @param string $search | |||
* @since 9.0.0 | |||
*/ | |||
public function callForAllUsers (\Closure $callback, $search = ''); | |||
public function callForAllUsers(\Closure $callback, $search = ''); | |||
/** | |||
* returns how many users have logged in once | |||
* | |||
* @return int | |||
* @since 9.2.0 | |||
*/ | |||
public function countSeenUsers(); | |||
/** | |||
* @param \Closure $callback | |||
* @since 9.2.0 | |||
*/ | |||
public function callForSeenUsers(\Closure $callback); | |||
/** | |||
* @param string $email |
@@ -13,6 +13,7 @@ use OC\Files\Mount\MountPoint; | |||
use OC\Log; | |||
use OC\User\Manager; | |||
use OCP\Files\Config\ICachedMountInfo; | |||
use OCP\IConfig; | |||
use OCP\IDBConnection; | |||
use OCP\IUserManager; | |||
use Test\TestCase; | |||
@@ -42,7 +43,7 @@ class UserMountCacheTest extends TestCase { | |||
public function setUp() { | |||
$this->fileIds = []; | |||
$this->connection = \OC::$server->getDatabaseConnection(); | |||
$this->userManager = new Manager(null); | |||
$this->userManager = new Manager($this->createMock(IConfig::class)); | |||
$userBackend = new Dummy(); | |||
$userBackend->createUser('u1', ''); | |||
$userBackend->createUser('u2', ''); |
@@ -121,7 +121,7 @@ class EncryptionTest extends Storage { | |||
$this->util = $this->getMockBuilder('\OC\Encryption\Util') | |||
->setMethods(['getUidAndFilename', 'isFile', 'isExcluded']) | |||
->setConstructorArgs([new View(), new Manager(), $this->groupManager, $this->config, $this->arrayCache]) | |||
->setConstructorArgs([new View(), new Manager($this->config), $this->groupManager, $this->config, $this->arrayCache]) | |||
->getMock(); | |||
$this->util->expects($this->any()) | |||
->method('getUidAndFilename') | |||
@@ -547,7 +547,7 @@ class EncryptionTest extends Storage { | |||
->setConstructorArgs( | |||
[ | |||
new View(), | |||
new Manager(), | |||
new Manager($this->config), | |||
$this->groupManager, | |||
$this->config, | |||
$this->arrayCache | |||
@@ -612,7 +612,7 @@ class EncryptionTest extends Storage { | |||
->disableOriginalConstructor()->getMock(); | |||
$util = $this->getMockBuilder('\OC\Encryption\Util') | |||
->setConstructorArgs([new View(), new Manager(), $this->groupManager, $this->config, $this->arrayCache]) | |||
->setConstructorArgs([new View(), new Manager($this->config), $this->groupManager, $this->config, $this->arrayCache]) | |||
->getMock(); | |||
$cache = $this->getMockBuilder('\OC\Files\Cache\Cache') |
@@ -43,7 +43,7 @@ class EncryptionTest extends \Test\TestCase { | |||
$file->expects($this->any())->method('getAccessList')->willReturn([]); | |||
$util = $this->getMockBuilder('\OC\Encryption\Util') | |||
->setMethods(['getUidAndFilename']) | |||
->setConstructorArgs([new View(), new \OC\User\Manager(), $groupManager, $config, $arrayCache]) | |||
->setConstructorArgs([new View(), new \OC\User\Manager($config), $groupManager, $config, $arrayCache]) | |||
->getMock(); | |||
$util->expects($this->any()) | |||
->method('getUidAndFilename') |
@@ -106,6 +106,7 @@ class RemoveRootSharesTest extends \Test\TestCase { | |||
$user = $this->userManager->createUser('test', 'test'); | |||
$userFolder = $this->rootFolder->getUserFolder('test'); | |||
$fileId = $userFolder->getId(); | |||
$user->updateLastLoginTimestamp(); | |||
//Now insert cyclic share | |||
$qb = $this->connection->getQueryBuilder(); | |||
@@ -134,6 +135,7 @@ class RemoveRootSharesTest extends \Test\TestCase { | |||
$user1 = $this->userManager->createUser('test1', 'test1'); | |||
$userFolder = $this->rootFolder->getUserFolder('test1'); | |||
$fileId = $userFolder->getId(); | |||
$user1->updateLastLoginTimestamp(); | |||
//Now insert cyclic share | |||
$qb = $this->connection->getQueryBuilder(); | |||
@@ -156,6 +158,7 @@ class RemoveRootSharesTest extends \Test\TestCase { | |||
$userFolder = $this->rootFolder->getUserFolder('test2'); | |||
$folder = $userFolder->newFolder('foo'); | |||
$fileId = $folder->getId(); | |||
$user2->updateLastLoginTimestamp(); | |||
//Now insert cyclic share | |||
$qb = $this->connection->getQueryBuilder(); |
@@ -9,6 +9,9 @@ | |||
namespace Test\User; | |||
use OC\User\Database; | |||
use OCP\IConfig; | |||
use OCP\IUser; | |||
use Test\TestCase; | |||
/** | |||
* Class ManagerTest | |||
@@ -17,10 +20,20 @@ use OC\User\Database; | |||
* | |||
* @package Test\User | |||
*/ | |||
class ManagerTest extends \Test\TestCase { | |||
class ManagerTest extends TestCase { | |||
/** @var IConfig */ | |||
private $config; | |||
public function setUp() { | |||
parent::setUp(); | |||
$this->config = $this->createMock(IConfig::class); | |||
} | |||
public function testGetBackends() { | |||
$userDummyBackend = $this->createMock(\Test\Util\User\Dummy::class); | |||
$manager = new \OC\User\Manager(); | |||
$manager = new \OC\User\Manager($this->config); | |||
$manager->registerBackend($userDummyBackend); | |||
$this->assertEquals([$userDummyBackend], $manager->getBackends()); | |||
$dummyDatabaseBackend = $this->createMock(Database::class); | |||
@@ -39,7 +52,7 @@ class ManagerTest extends \Test\TestCase { | |||
->with($this->equalTo('foo')) | |||
->will($this->returnValue(true)); | |||
$manager = new \OC\User\Manager(); | |||
$manager = new \OC\User\Manager($this->config); | |||
$manager->registerBackend($backend); | |||
$this->assertTrue($manager->userExists('foo')); | |||
@@ -55,14 +68,14 @@ class ManagerTest extends \Test\TestCase { | |||
->with($this->equalTo('foo')) | |||
->will($this->returnValue(false)); | |||
$manager = new \OC\User\Manager(); | |||
$manager = new \OC\User\Manager($this->config); | |||
$manager->registerBackend($backend); | |||
$this->assertFalse($manager->userExists('foo')); | |||
} | |||
public function testUserExistsNoBackends() { | |||
$manager = new \OC\User\Manager(); | |||
$manager = new \OC\User\Manager($this->config); | |||
$this->assertFalse($manager->userExists('foo')); | |||
} | |||
@@ -86,7 +99,7 @@ class ManagerTest extends \Test\TestCase { | |||
->with($this->equalTo('foo')) | |||
->will($this->returnValue(true)); | |||
$manager = new \OC\User\Manager(); | |||
$manager = new \OC\User\Manager($this->config); | |||
$manager->registerBackend($backend1); | |||
$manager->registerBackend($backend2); | |||
@@ -110,7 +123,7 @@ class ManagerTest extends \Test\TestCase { | |||
$backend2->expects($this->never()) | |||
->method('userExists'); | |||
$manager = new \OC\User\Manager(); | |||
$manager = new \OC\User\Manager($this->config); | |||
$manager->registerBackend($backend1); | |||
$manager->registerBackend($backend2); | |||
@@ -137,7 +150,7 @@ class ManagerTest extends \Test\TestCase { | |||
} | |||
})); | |||
$manager = new \OC\User\Manager(); | |||
$manager = new \OC\User\Manager($this->config); | |||
$manager->registerBackend($backend); | |||
$user = $manager->checkPassword('foo', 'bar'); | |||
@@ -156,7 +169,7 @@ class ManagerTest extends \Test\TestCase { | |||
->method('implementsActions') | |||
->will($this->returnValue(false)); | |||
$manager = new \OC\User\Manager(); | |||
$manager = new \OC\User\Manager($this->config); | |||
$manager->registerBackend($backend); | |||
$this->assertFalse($manager->checkPassword('foo', 'bar')); | |||
@@ -172,7 +185,7 @@ class ManagerTest extends \Test\TestCase { | |||
->with($this->equalTo('foo')) | |||
->will($this->returnValue(true)); | |||
$manager = new \OC\User\Manager(); | |||
$manager = new \OC\User\Manager($this->config); | |||
$manager->registerBackend($backend); | |||
$this->assertEquals('foo', $manager->get('foo')->getUID()); | |||
@@ -188,7 +201,7 @@ class ManagerTest extends \Test\TestCase { | |||
->with($this->equalTo('foo')) | |||
->will($this->returnValue(false)); | |||
$manager = new \OC\User\Manager(); | |||
$manager = new \OC\User\Manager($this->config); | |||
$manager->registerBackend($backend); | |||
$this->assertEquals(null, $manager->get('foo')); | |||
@@ -204,7 +217,7 @@ class ManagerTest extends \Test\TestCase { | |||
->with($this->equalTo('fo')) | |||
->will($this->returnValue(array('foo', 'afoo'))); | |||
$manager = new \OC\User\Manager(); | |||
$manager = new \OC\User\Manager($this->config); | |||
$manager->registerBackend($backend); | |||
$result = $manager->search('fo'); | |||
@@ -232,7 +245,7 @@ class ManagerTest extends \Test\TestCase { | |||
->with($this->equalTo('fo'), $this->equalTo(3), $this->equalTo(1)) | |||
->will($this->returnValue(array('foo3'))); | |||
$manager = new \OC\User\Manager(); | |||
$manager = new \OC\User\Manager($this->config); | |||
$manager->registerBackend($backend1); | |||
$manager->registerBackend($backend2); | |||
@@ -261,7 +274,7 @@ class ManagerTest extends \Test\TestCase { | |||
->with($this->equalTo('foo')) | |||
->will($this->returnValue(false)); | |||
$manager = new \OC\User\Manager(); | |||
$manager = new \OC\User\Manager($this->config); | |||
$manager->registerBackend($backend); | |||
$user = $manager->createUser('foo', 'bar'); | |||
@@ -288,7 +301,7 @@ class ManagerTest extends \Test\TestCase { | |||
->with($this->equalTo('foo')) | |||
->will($this->returnValue(true)); | |||
$manager = new \OC\User\Manager(); | |||
$manager = new \OC\User\Manager($this->config); | |||
$manager->registerBackend($backend); | |||
$manager->createUser('foo', 'bar'); | |||
@@ -311,14 +324,14 @@ class ManagerTest extends \Test\TestCase { | |||
->with($this->equalTo('foo')) | |||
->will($this->returnValue(false)); | |||
$manager = new \OC\User\Manager(); | |||
$manager = new \OC\User\Manager($this->config); | |||
$manager->registerBackend($backend); | |||
$this->assertFalse($manager->createUser('foo', 'bar')); | |||
} | |||
public function testCreateUserNoBackends() { | |||
$manager = new \OC\User\Manager(); | |||
$manager = new \OC\User\Manager($this->config); | |||
$this->assertFalse($manager->createUser('foo', 'bar')); | |||
} | |||
@@ -359,7 +372,7 @@ class ManagerTest extends \Test\TestCase { | |||
->with($this->equalTo('foo')) | |||
->will($this->returnValue(true)); | |||
$manager = new \OC\User\Manager(); | |||
$manager = new \OC\User\Manager($this->config); | |||
$manager->registerBackend($backend1); | |||
$manager->registerBackend($backend2); | |||
@@ -367,7 +380,7 @@ class ManagerTest extends \Test\TestCase { | |||
} | |||
public function testCountUsersNoBackend() { | |||
$manager = new \OC\User\Manager(); | |||
$manager = new \OC\User\Manager($this->config); | |||
$result = $manager->countUsers(); | |||
$this->assertTrue(is_array($result)); | |||
@@ -392,7 +405,7 @@ class ManagerTest extends \Test\TestCase { | |||
->method('getBackendName') | |||
->will($this->returnValue('Mock_Test_Util_User_Dummy')); | |||
$manager = new \OC\User\Manager(); | |||
$manager = new \OC\User\Manager($this->config); | |||
$manager->registerBackend($backend); | |||
$result = $manager->countUsers(); | |||
@@ -433,7 +446,7 @@ class ManagerTest extends \Test\TestCase { | |||
->method('getBackendName') | |||
->will($this->returnValue('Mock_Test_Util_User_Dummy')); | |||
$manager = new \OC\User\Manager(); | |||
$manager = new \OC\User\Manager($this->config); | |||
$manager->registerBackend($backend1); | |||
$manager->registerBackend($backend2); | |||
@@ -448,6 +461,66 @@ class ManagerTest extends \Test\TestCase { | |||
$this->assertEquals(7 + 16, $users); | |||
} | |||
public function testCountUsersOnlySeen() { | |||
$manager = \OC::$server->getUserManager(); | |||
// count other users in the db before adding our own | |||
$countBefore = $manager->countUsers(true); | |||
//Add test users | |||
$user1 = $manager->createUser('testseencount1', 'testseencount1'); | |||
$user1->updateLastLoginTimestamp(); | |||
$user2 = $manager->createUser('testseencount2', 'testseencount2'); | |||
$user2->updateLastLoginTimestamp(); | |||
$user3 = $manager->createUser('testseencount3', 'testseencount3'); | |||
$user4 = $manager->createUser('testseencount4', 'testseencount4'); | |||
$user4->updateLastLoginTimestamp(); | |||
$this->assertEquals($countBefore + 3, $manager->countUsers(true)); | |||
//cleanup | |||
$user1->delete(); | |||
$user2->delete(); | |||
$user3->delete(); | |||
$user4->delete(); | |||
} | |||
public function testCallForSeenUsers() { | |||
$manager = \OC::$server->getUserManager(); | |||
// count other users in the db before adding our own | |||
$count = 0; | |||
$function = function (IUser $user) use (&$count) { | |||
$count++; | |||
}; | |||
$manager->callForAllUsers($function, '', true); | |||
$countBefore = $count; | |||
//Add test users | |||
$user1 = $manager->createUser('testseen1', 'testseen1'); | |||
$user1->updateLastLoginTimestamp(); | |||
$user2 = $manager->createUser('testseen2', 'testseen2'); | |||
$user2->updateLastLoginTimestamp(); | |||
$user3 = $manager->createUser('testseen3', 'testseen3'); | |||
$user4 = $manager->createUser('testseen4', 'testseen4'); | |||
$user4->updateLastLoginTimestamp(); | |||
$count = 0; | |||
$manager->callForAllUsers($function, '', true); | |||
$this->assertEquals($countBefore + 3, $count); | |||
//cleanup | |||
$user1->delete(); | |||
$user2->delete(); | |||
$user3->delete(); | |||
$user4->delete(); | |||
} | |||
public function testDeleteUser() { | |||
$config = $this->getMockBuilder('OCP\IConfig') | |||
->disableOriginalConstructor() |
@@ -190,7 +190,10 @@ class SessionTest extends \Test\TestCase { | |||
unset($managerMethods[$i]); | |||
} | |||
} | |||
$manager = $this->getMockBuilder(Manager::class)->setMethods($managerMethods)->getMock(); | |||
$manager = $this->getMockBuilder(Manager::class) | |||
->setMethods($managerMethods) | |||
->setConstructorArgs([$this->config]) | |||
->getMock(); | |||
$backend = $this->createMock(\Test\Util\User\Dummy::class); | |||
@@ -245,7 +248,10 @@ class SessionTest extends \Test\TestCase { | |||
unset($managerMethods[$i]); | |||
} | |||
} | |||
$manager = $this->getMockBuilder(Manager::class)->setMethods($managerMethods)->getMock(); | |||
$manager = $this->getMockBuilder(Manager::class) | |||
->setMethods($managerMethods) | |||
->setConstructorArgs([$this->config]) | |||
->getMock(); | |||
$backend = $this->createMock(\Test\Util\User\Dummy::class); | |||
@@ -277,7 +283,10 @@ class SessionTest extends \Test\TestCase { | |||
unset($managerMethods[$i]); | |||
} | |||
} | |||
$manager = $this->getMockBuilder(Manager::class)->setMethods($managerMethods)->getMock(); | |||
$manager = $this->getMockBuilder(Manager::class) | |||
->setMethods($managerMethods) | |||
->setConstructorArgs([$this->config]) | |||
->getMock(); | |||
$backend = $this->createMock(\Test\Util\User\Dummy::class); | |||
$userSession = new \OC\User\Session($manager, $session, $this->timeFactory, $this->tokenProvider, $this->config); | |||
@@ -527,7 +536,10 @@ class SessionTest extends \Test\TestCase { | |||
unset($managerMethods[$i]); | |||
} | |||
} | |||
$manager = $this->getMockBuilder(Manager::class)->setMethods($managerMethods)->getMock(); | |||
$manager = $this->getMockBuilder(Manager::class) | |||
->setMethods($managerMethods) | |||
->setConstructorArgs([$this->config]) | |||
->getMock(); | |||
$backend = $this->createMock(\Test\Util\User\Dummy::class); | |||
@@ -577,7 +589,10 @@ class SessionTest extends \Test\TestCase { | |||
unset($managerMethods[$i]); | |||
} | |||
} | |||
$manager = $this->getMockBuilder(Manager::class)->setMethods($managerMethods)->getMock(); | |||
$manager = $this->getMockBuilder(Manager::class) | |||
->setMethods($managerMethods) | |||
->setConstructorArgs([$this->config]) | |||
->getMock(); | |||
$backend = $this->createMock(\Test\Util\User\Dummy::class); | |||
@@ -621,7 +636,10 @@ class SessionTest extends \Test\TestCase { | |||
unset($managerMethods[$i]); | |||
} | |||
} | |||
$manager = $this->getMockBuilder(Manager::class)->setMethods($managerMethods)->getMock(); | |||
$manager = $this->getMockBuilder(Manager::class) | |||
->setMethods($managerMethods) | |||
->setConstructorArgs([$this->config]) | |||
->getMock(); | |||
$backend = $this->createMock(\Test\Util\User\Dummy::class); | |||