diff --git a/apps/user_ldap/ajax/wizard.php b/apps/user_ldap/ajax/wizard.php index 34c9729f6f3e5d64520649a43c22bd1227827a17..9c7b26b54ac900ff6202e3829a54bfc30044df25 100644 --- a/apps/user_ldap/ajax/wizard.php +++ b/apps/user_ldap/ajax/wizard.php @@ -61,9 +61,10 @@ $userManager = new \OCA\User_LDAP\User\Manager( new \OCA\User_LDAP\LogWrapper(), \OC::$server->getAvatarManager(), new \OCP\Image(), - \OC::$server->getDatabaseConnection(), \OC::$server->getUserManager(), - \OC::$server->getNotificationManager()); + \OC::$server->getNotificationManager(), + \OC::$server->get(\OCP\Share\IManager::class) +); $access = new \OCA\User_LDAP\Access( $con, diff --git a/apps/user_ldap/lib/Access.php b/apps/user_ldap/lib/Access.php index 01818079802c2aa2410d65adac349b4395601f08..2b9383697e5025168cf0046286eb71afc44fe15e 100644 --- a/apps/user_ldap/lib/Access.php +++ b/apps/user_ldap/lib/Access.php @@ -52,6 +52,7 @@ use OC\Hooks\PublicEmitter; use OC\ServerNotAvailableException; use OCA\User_LDAP\Exceptions\ConstraintViolationException; use OCA\User_LDAP\Mapping\AbstractMapping; +use OCA\User_LDAP\Mapping\UserMapping; use OCA\User_LDAP\User\Manager; use OCA\User_LDAP\User\OfflineUser; use OCP\IConfig; @@ -74,9 +75,7 @@ class Access extends LDAPUtility { protected $pagedSearchedSuccessful; /** - * protected $cookies = []; - * - * @var AbstractMapping $userMapper + * @var UserMapping $userMapper */ protected $userMapper; @@ -123,12 +122,9 @@ class Access extends LDAPUtility { } /** - * returns the User Mapper - * - * @return AbstractMapping * @throws \Exception */ - public function getUserMapper() { + public function getUserMapper(): UserMapping { if (is_null($this->userMapper)) { throw new \Exception('UserMapper was not assigned to this Access instance.'); } diff --git a/apps/user_ldap/lib/Jobs/CleanUp.php b/apps/user_ldap/lib/Jobs/CleanUp.php index 6bb44b3e6aed4fc82e4ddb2cd03430b8840ea39d..8470c4793bb6c060463c0aeb841fdd811072d68c 100644 --- a/apps/user_ldap/lib/Jobs/CleanUp.php +++ b/apps/user_ldap/lib/Jobs/CleanUp.php @@ -30,7 +30,6 @@ namespace OCA\User_LDAP\Jobs; use OC\BackgroundJob\TimedJob; use OCA\User_LDAP\Helper; -use OCA\User_LDAP\LDAP; use OCA\User_LDAP\Mapping\UserMapping; use OCA\User_LDAP\User\DeletedUsersIndex; use OCA\User_LDAP\User_LDAP; @@ -68,11 +67,12 @@ class CleanUp extends TimedJob { /** @var DeletedUsersIndex */ protected $dui; - public function __construct(User_Proxy $userBackend) { + public function __construct(User_Proxy $userBackend, DeletedUsersIndex $dui) { $minutes = \OC::$server->getConfig()->getSystemValue( 'ldapUserCleanupInterval', (string)$this->defaultIntervalMin); $this->setInterval((int)$minutes * 60); $this->userBackend = $userBackend; + $this->dui = $dui; } /** @@ -115,9 +115,6 @@ class CleanUp extends TimedJob { if (isset($arguments['deletedUsersIndex'])) { $this->dui = $arguments['deletedUsersIndex']; - } else { - $this->dui = new DeletedUsersIndex( - $this->ocConfig, $this->db, $this->mapping); } } diff --git a/apps/user_ldap/lib/Jobs/Sync.php b/apps/user_ldap/lib/Jobs/Sync.php index 053ca8949028fa1dac692d6d9dc78e664dbcc2e2..483c21386eb582d9bcdb42881aec35483d54ca3e 100644 --- a/apps/user_ldap/lib/Jobs/Sync.php +++ b/apps/user_ldap/lib/Jobs/Sync.php @@ -29,16 +29,13 @@ use OC\ServerNotAvailableException; use OCA\User_LDAP\AccessFactory; use OCA\User_LDAP\Configuration; use OCA\User_LDAP\ConnectionFactory; -use OCA\User_LDAP\FilesystemHelper; use OCA\User_LDAP\Helper; use OCA\User_LDAP\LDAP; -use OCA\User_LDAP\LogWrapper; use OCA\User_LDAP\Mapping\UserMapping; use OCA\User_LDAP\User\Manager; use OCP\IAvatarManager; use OCP\IConfig; use OCP\IDBConnection; -use OCP\Image; use OCP\IUserManager; use OCP\Notification\IManager; @@ -68,7 +65,8 @@ class Sync extends TimedJob { /** @var AccessFactory */ protected $accessFactory; - public function __construct() { + public function __construct(Manager $userManager) { + $this->userManager = $userManager; $this->setInterval( \OC::$server->getConfig()->getAppValue( 'user_ldap', @@ -345,17 +343,6 @@ class Sync extends TimedJob { if (isset($argument['userManager'])) { $this->userManager = $argument['userManager']; - } else { - $this->userManager = new Manager( - $this->config, - new FilesystemHelper(), - new LogWrapper(), - $this->avatarManager, - new Image(), - $this->dbc, - $this->ncUserManager, - $this->notificationManager - ); } if (isset($argument['mapper'])) { @@ -363,7 +350,7 @@ class Sync extends TimedJob { } else { $this->mapper = new UserMapping($this->dbc); } - + if (isset($argument['connectionFactory'])) { $this->connectionFactory = $argument['connectionFactory']; } else { diff --git a/apps/user_ldap/lib/LDAPProviderFactory.php b/apps/user_ldap/lib/LDAPProviderFactory.php index d0d9750dce6fa89fdc9689c9438554c07af355cd..5dd33c33316d2c265c16527bc284565fbf0d9d2e 100644 --- a/apps/user_ldap/lib/LDAPProviderFactory.php +++ b/apps/user_ldap/lib/LDAPProviderFactory.php @@ -26,38 +26,19 @@ namespace OCA\User_LDAP; -use OCA\User_LDAP\Mapping\UserMapping; -use OCA\User_LDAP\User\DeletedUsersIndex; use OCP\IServerContainer; +use OCP\LDAP\ILDAPProvider; use OCP\LDAP\ILDAPProviderFactory; class LDAPProviderFactory implements ILDAPProviderFactory { - /** - * Server container - * - * @var IServerContainer - */ + /** * @var IServerContainer */ private $serverContainer; - - /** - * Constructor for the LDAP provider factory - * - * @param IServerContainer $serverContainer server container - */ + public function __construct(IServerContainer $serverContainer) { $this->serverContainer = $serverContainer; } - - /** - * creates and returns an instance of the ILDAPProvider - * - * @return OCP\LDAP\ILDAPProvider - */ - public function getLDAPProvider() { - $dbConnection = $this->serverContainer->getDatabaseConnection(); - $userMapping = new UserMapping($dbConnection); - return new LDAPProvider($this->serverContainer, new Helper($this->serverContainer->getConfig()), - new DeletedUsersIndex($this->serverContainer->getConfig(), - $dbConnection, $userMapping)); + + public function getLDAPProvider(): ILDAPProvider { + return $this->serverContainer->get(LDAPProvider::class); } } diff --git a/apps/user_ldap/lib/Proxy.php b/apps/user_ldap/lib/Proxy.php index 7bcbd19ff1c14e38e5fc29911e1d4bffc45ceef9..46cb2e6b9a06c5d636592bc8647da1948e56fc00 100644 --- a/apps/user_ldap/lib/Proxy.php +++ b/apps/user_ldap/lib/Proxy.php @@ -36,6 +36,7 @@ namespace OCA\User_LDAP; use OCA\User_LDAP\Mapping\GroupMapping; use OCA\User_LDAP\Mapping\UserMapping; use OCA\User_LDAP\User\Manager; +use OCP\Share\IManager; abstract class Proxy { private static $accesses = []; @@ -67,7 +68,7 @@ abstract class Proxy { static $avatarM; static $userMap; static $groupMap; - static $db; + static $shareManager; static $coreUserManager; static $coreNotificationManager; if ($fs === null) { @@ -80,10 +81,11 @@ abstract class Proxy { $groupMap = new GroupMapping($db); $coreUserManager = \OC::$server->getUserManager(); $coreNotificationManager = \OC::$server->getNotificationManager(); + $shareManager = \OC::$server->get(IManager::class); } $userManager = - new Manager($ocConfig, $fs, $log, $avatarM, new \OCP\Image(), $db, - $coreUserManager, $coreNotificationManager); + new Manager($ocConfig, $fs, $log, $avatarM, new \OCP\Image(), + $coreUserManager, $coreNotificationManager, $shareManager); $connector = new Connection($this->ldap, $configPrefix); $access = new Access($connector, $this->ldap, $userManager, new Helper($ocConfig), $ocConfig, $coreUserManager); $access->setUserMapper($userMap); diff --git a/apps/user_ldap/lib/User/DeletedUsersIndex.php b/apps/user_ldap/lib/User/DeletedUsersIndex.php index 5f1a9b6716825de31e819b299907d18e082fd9bb..2591f371fa18a08a595e3b8b6d3c34f6c1eef7ef 100644 --- a/apps/user_ldap/lib/User/DeletedUsersIndex.php +++ b/apps/user_ldap/lib/User/DeletedUsersIndex.php @@ -26,6 +26,7 @@ namespace OCA\User_LDAP\User; use OCA\User_LDAP\Mapping\UserMapping; +use OCP\Share\IManager; /** * Class DeletedUsersIndex @@ -37,11 +38,6 @@ class DeletedUsersIndex { */ protected $config; - /** - * @var \OCP\IDBConnection $db - */ - protected $db; - /** * @var \OCA\User_LDAP\Mapping\UserMapping $mapping */ @@ -51,16 +47,13 @@ class DeletedUsersIndex { * @var array $deletedUsers */ protected $deletedUsers; + /** @var IManager */ + private $shareManager; - /** - * @param \OCP\IConfig $config - * @param \OCP\IDBConnection $db - * @param \OCA\User_LDAP\Mapping\UserMapping $mapping - */ - public function __construct(\OCP\IConfig $config, \OCP\IDBConnection $db, UserMapping $mapping) { + public function __construct(\OCP\IConfig $config, UserMapping $mapping, IManager $shareManager) { $this->config = $config; - $this->db = $db; $this->mapping = $mapping; + $this->shareManager = $shareManager; } /** @@ -73,7 +66,7 @@ class DeletedUsersIndex { $userObjects = []; foreach ($deletedUsers as $user) { - $userObjects[] = new OfflineUser($user, $this->config, $this->db, $this->mapping); + $userObjects[] = new OfflineUser($user, $this->config, $this->mapping, $this->shareManager); } $this->deletedUsers = $userObjects; diff --git a/apps/user_ldap/lib/User/Manager.php b/apps/user_ldap/lib/User/Manager.php index a3d7fd9c2b4692aaf676448da075126b70cf9170..a18c62364dbd09ec0a0469dac8b4cba50df13d5b 100644 --- a/apps/user_ldap/lib/User/Manager.php +++ b/apps/user_ldap/lib/User/Manager.php @@ -39,6 +39,7 @@ use OCP\IDBConnection; use OCP\Image; use OCP\IUserManager; use OCP\Notification\IManager as INotificationManager; +use OCP\Share\IManager; /** * Manager @@ -82,32 +83,29 @@ class Manager { * @var CappedMemoryCache $usersByUid */ protected $usersByUid; + /** @var IManager */ + private $shareManager; - /** - * @param IConfig $ocConfig - * @param \OCA\User_LDAP\FilesystemHelper $ocFilesystem object that - * gives access to necessary functions from the OC filesystem - * @param \OCA\User_LDAP\LogWrapper $ocLog - * @param IAvatarManager $avatarManager - * @param Image $image an empty image instance - * @param IDBConnection $db - * @throws \Exception when the methods mentioned above do not exist - */ - public function __construct(IConfig $ocConfig, - FilesystemHelper $ocFilesystem, LogWrapper $ocLog, - IAvatarManager $avatarManager, Image $image, - IDBConnection $db, IUserManager $userManager, - INotificationManager $notificationManager) { + public function __construct( + IConfig $ocConfig, + FilesystemHelper $ocFilesystem, + LogWrapper $ocLog, + IAvatarManager $avatarManager, + Image $image, + IUserManager $userManager, + INotificationManager $notificationManager, + IManager $shareManager + ) { $this->ocConfig = $ocConfig; $this->ocFilesystem = $ocFilesystem; $this->ocLog = $ocLog; $this->avatarManager = $avatarManager; $this->image = $image; - $this->db = $db; $this->userManager = $userManager; $this->notificationManager = $notificationManager; $this->usersByDN = new CappedMemoryCache(); $this->usersByUid = new CappedMemoryCache(); + $this->shareManager = $shareManager; } /** @@ -229,8 +227,9 @@ class Manager { return new OfflineUser( $id, $this->ocConfig, - $this->db, - $this->access->getUserMapper()); + $this->access->getUserMapper(), + $this->shareManager + ); } /** diff --git a/apps/user_ldap/lib/User/OfflineUser.php b/apps/user_ldap/lib/User/OfflineUser.php index 1abef86185220e802ad554ec2440e65c2580c76b..e55df4e8c1cb87dd719af1842d593bfa5cdd4246 100644 --- a/apps/user_ldap/lib/User/OfflineUser.php +++ b/apps/user_ldap/lib/User/OfflineUser.php @@ -28,6 +28,8 @@ namespace OCA\User_LDAP\User; use OCA\User_LDAP\Mapping\UserMapping; use OCP\IConfig; use OCP\IDBConnection; +use OCP\Share\IManager; +use OCP\Share\IShare; class OfflineUser { /** @@ -78,19 +80,19 @@ class OfflineUser { * @var \OCA\User_LDAP\Mapping\UserMapping */ protected $mapping; + /** @var IManager */ + private $shareManager; - /** - * @param string $ocName - * @param IConfig $config - * @param IDBConnection $db - * @param \OCA\User_LDAP\Mapping\UserMapping $mapping - */ - public function __construct($ocName, IConfig $config, IDBConnection $db, UserMapping $mapping) { + public function __construct( + $ocName, + IConfig $config, + UserMapping $mapping, + IManager $shareManager + ) { $this->ocName = $ocName; $this->config = $config; - $this->db = $db; $this->mapping = $mapping; - $this->fetchDetails(); + $this->shareManager = $shareManager; } /** @@ -132,6 +134,9 @@ class OfflineUser { * @return string */ public function getUID() { + if (!isset($this->uid)) { + $this->fetchDetails(); + } return $this->uid; } @@ -140,6 +145,9 @@ class OfflineUser { * @return string */ public function getDN() { + if (!isset($this->dn)) { + $this->fetchDetails(); + } return $this->dn; } @@ -148,6 +156,9 @@ class OfflineUser { * @return string */ public function getDisplayName() { + if (!isset($this->displayName)) { + $this->fetchDetails(); + } return $this->displayName; } @@ -156,6 +167,9 @@ class OfflineUser { * @return string */ public function getEmail() { + if (!isset($this->email)) { + $this->fetchDetails(); + } return $this->email; } @@ -164,6 +178,9 @@ class OfflineUser { * @return string */ public function getHomePath() { + if (!isset($this->homePath)) { + $this->fetchDetails(); + } return $this->homePath; } @@ -172,6 +189,9 @@ class OfflineUser { * @return int */ public function getLastLogin() { + if (!isset($this->lastLogin)) { + $this->fetchDetails(); + } return (int)$this->lastLogin; } @@ -180,6 +200,9 @@ class OfflineUser { * @return int */ public function getDetectedOn() { + if (!isset($this->foundDeleted)) { + $this->fetchDetails(); + } return (int)$this->foundDeleted; } @@ -188,6 +211,9 @@ class OfflineUser { * @return bool */ public function getHasActiveShares() { + if (!isset($this->hasActiveShares)) { + $this->fetchDetails(); + } return $this->hasActiveShares; } @@ -213,34 +239,31 @@ class OfflineUser { $this->determineShares(); } - /** * finds out whether the user has active shares. The result is stored in * $this->hasActiveShares */ protected function determineShares() { - $query = $this->db->prepare(' - SELECT COUNT(`uid_owner`) - FROM `*PREFIX*share` - WHERE `uid_owner` = ? - ', 1); - $query->execute([$this->ocName]); - $sResult = $query->fetchColumn(0); - if ((int)$sResult === 1) { - $this->hasActiveShares = true; - return; - } + $shareInterface = new \ReflectionClass(IShare::class); + $shareConstants = $shareInterface->getConstants(); - $query = $this->db->prepare(' - SELECT COUNT(`owner`) - FROM `*PREFIX*share_external` - WHERE `owner` = ? - ', 1); - $query->execute([$this->ocName]); - $sResult = $query->fetchColumn(0); - if ((int)$sResult === 1) { - $this->hasActiveShares = true; - return; + foreach ($shareConstants as $constantName => $constantValue) { + if (strpos($constantName, 'TYPE_') !== 0 + || $constantValue === IShare::TYPE_USERGROUP + ) { + continue; + } + $shares = $this->shareManager->getSharesBy( + $this->ocName, + $constantValue, + null, + false, + 1 + ); + if (!empty($shares)) { + $this->hasActiveShares = true; + return; + } } $this->hasActiveShares = false; diff --git a/apps/user_ldap/tests/AccessTest.php b/apps/user_ldap/tests/AccessTest.php index d01cd80b3a00292cd1d40f3918a66c52f9708a46..4f89fc51568ef30d8a5b49a71a2c84c706b83ea0 100644 --- a/apps/user_ldap/tests/AccessTest.php +++ b/apps/user_ldap/tests/AccessTest.php @@ -48,10 +48,10 @@ use OCA\User_LDAP\User\OfflineUser; use OCA\User_LDAP\User\User; use OCP\IAvatarManager; use OCP\IConfig; -use OCP\IDBConnection; use OCP\Image; use OCP\IUserManager; use OCP\Notification\IManager as INotificationManager; +use OCP\Share\IManager; use Test\TestCase; /** @@ -64,6 +64,8 @@ use Test\TestCase; class AccessTest extends TestCase { /** @var UserMapping|\PHPUnit\Framework\MockObject\MockObject */ protected $userMapper; + /** @var IManager|\PHPUnit\Framework\MockObject\MockObject */ + protected $shareManager; /** @var Connection|\PHPUnit\Framework\MockObject\MockObject */ private $connection; /** @var LDAP|\PHPUnit\Framework\MockObject\MockObject */ @@ -87,6 +89,7 @@ class AccessTest extends TestCase { $this->config = $this->createMock(IConfig::class); $this->userMapper = $this->createMock(UserMapping::class); $this->ncUserManager = $this->createMock(IUserManager::class); + $this->shareManager = $this->createMock(IManager::class); $this->access = new Access( $this->connection, @@ -111,9 +114,9 @@ class AccessTest extends TestCase { $this->createMock(LogWrapper::class), $this->createMock(IAvatarManager::class), $this->createMock(Image::class), - $this->createMock(IDBConnection::class), $this->createMock(IUserManager::class), - $this->createMock(INotificationManager::class)]) + $this->createMock(INotificationManager::class), + $this->shareManager]) ->getMock(); $helper = new Helper(\OC::$server->getConfig()); diff --git a/apps/user_ldap/tests/Integration/AbstractIntegrationTest.php b/apps/user_ldap/tests/Integration/AbstractIntegrationTest.php index b94016e352daf02181e4b3ab4c1c059805ab0b42..095c61544b0fcecc3584f5a323de699ee5d030be 100644 --- a/apps/user_ldap/tests/Integration/AbstractIntegrationTest.php +++ b/apps/user_ldap/tests/Integration/AbstractIntegrationTest.php @@ -37,6 +37,7 @@ use OCA\User_LDAP\LDAP; use OCA\User_LDAP\LogWrapper; use OCA\User_LDAP\User\Manager; use OCA\User_LDAP\UserPluginManager; +use OCP\Share\IManager; abstract class AbstractIntegrationTest { /** @var LDAP */ @@ -126,9 +127,9 @@ abstract class AbstractIntegrationTest { new LogWrapper(), \OC::$server->getAvatarManager(), new \OCP\Image(), - \OC::$server->getDatabaseConnection(), \OC::$server->getUserManager(), - \OC::$server->getNotificationManager() + \OC::$server->getNotificationManager(), + \OC::$server->get(IManager::class) ); } diff --git a/apps/user_ldap/tests/Jobs/CleanUpTest.php b/apps/user_ldap/tests/Jobs/CleanUpTest.php index 533bb041f754f7173a996b598173106a951d233f..2e66d1147551b993a90e1b39cf355ea1820642bf 100644 --- a/apps/user_ldap/tests/Jobs/CleanUpTest.php +++ b/apps/user_ldap/tests/Jobs/CleanUpTest.php @@ -44,7 +44,7 @@ class CleanUpTest extends TestCase { public function setUp(): void { $this->createMocks(); - $this->bgJob = new CleanUp($this->mocks['userBackend']); + $this->bgJob = new CleanUp($this->mocks['userBackend'], $this->mocks['deletedUsersIndex']); $this->bgJob->setArguments($this->mocks); } diff --git a/apps/user_ldap/tests/Jobs/SyncTest.php b/apps/user_ldap/tests/Jobs/SyncTest.php index a6a7049373918449dbdcd8653320dba1b2ba0c26..6ee186d0da42d88c1d5ea81934e9826a574a06a1 100644 --- a/apps/user_ldap/tests/Jobs/SyncTest.php +++ b/apps/user_ldap/tests/Jobs/SyncTest.php @@ -89,7 +89,6 @@ class SyncTest extends TestCase { $this->arguments = [ 'helper' => $this->helper, 'ldapWrapper' => $this->ldapWrapper, - 'userManager' => $this->userManager, 'mapper' => $this->mapper, 'config' => $this->config, 'avatarManager' => $this->avatarManager, @@ -100,7 +99,7 @@ class SyncTest extends TestCase { 'accessFactory' => $this->accessFactory, ]; - $this->sync = new Sync(); + $this->sync = new Sync($this->userManager); } public function intervalDataProvider() { diff --git a/apps/user_ldap/tests/User/DeletedUsersIndexTest.php b/apps/user_ldap/tests/User/DeletedUsersIndexTest.php index 77fdd31c173bb8ff831d0af5336eb5eabde43945..8435078051c0600932f31e9ef36d72498344faeb 100644 --- a/apps/user_ldap/tests/User/DeletedUsersIndexTest.php +++ b/apps/user_ldap/tests/User/DeletedUsersIndexTest.php @@ -30,6 +30,7 @@ use OCA\User_LDAP\Mapping\UserMapping; use OCA\User_LDAP\User\DeletedUsersIndex; use OCP\IConfig; use OCP\IDBConnection; +use OCP\Share\IManager; /** * Class DeletedUsersIndexTest @@ -50,6 +51,8 @@ class DeletedUsersIndexTest extends \Test\TestCase { /** @var UserMapping|\PHPUnit\Framework\MockObject\MockObject */ protected $mapping; + /** @var IManager|\PHPUnit\Framework\MockObject\MockObject */ + protected $shareManager; protected function setUp(): void { parent::setUp(); @@ -62,8 +65,9 @@ class DeletedUsersIndexTest extends \Test\TestCase { $this->config->deleteAppFromAllUsers('user_ldap'); $this->mapping = $this->createMock(UserMapping::class); + $this->shareManager = $this->createMock(IManager::class); - $this->dui = new DeletedUsersIndex($this->config, $this->db, $this->mapping); + $this->dui = new DeletedUsersIndex($this->config, $this->mapping, $this->shareManager); } protected function tearDown(): void { diff --git a/apps/user_ldap/tests/User/ManagerTest.php b/apps/user_ldap/tests/User/ManagerTest.php index 18499da9a869974a4af160f22adf1bb5242bc48d..9f6d43a9a24cccd5c20c94cc6cac20fb9b437252 100644 --- a/apps/user_ldap/tests/User/ManagerTest.php +++ b/apps/user_ldap/tests/User/ManagerTest.php @@ -42,6 +42,7 @@ use OCP\IDBConnection; use OCP\Image; use OCP\IUserManager; use OCP\Notification\IManager as INotificationManager; +use OCP\Share\IManager; /** * Class Test_User_Manager @@ -86,6 +87,8 @@ class ManagerTest extends \Test\TestCase { /** @var Manager */ protected $manager; + /** @var IManager|\PHPUnit\Framework\MockObject\MockObject */ + protected $shareManager; protected function setUp(): void { parent::setUp(); @@ -96,11 +99,11 @@ class ManagerTest extends \Test\TestCase { $this->log = $this->createMock(LogWrapper::class); $this->avatarManager = $this->createMock(IAvatarManager::class); $this->image = $this->createMock(Image::class); - $this->dbc = $this->createMock(IDBConnection::class); $this->ncUserManager = $this->createMock(IUserManager::class); $this->notificationManager = $this->createMock(INotificationManager::class); - $this->ldapWrapper = $this->createMock(ILDAPWrapper::class); + $this->shareManager = $this->createMock(IManager::class); + $this->connection = new Connection($this->ldapWrapper, '', null); $this->access->expects($this->any()) @@ -114,9 +117,9 @@ class ManagerTest extends \Test\TestCase { $this->log, $this->avatarManager, $this->image, - $this->dbc, $this->ncUserManager, - $this->notificationManager + $this->notificationManager, + $this->shareManager ); $this->manager->setLdapAccess($this->access); diff --git a/apps/user_ldap/tests/User/OfflineUserTest.php b/apps/user_ldap/tests/User/OfflineUserTest.php new file mode 100644 index 0000000000000000000000000000000000000000..5736b2664d948843421cb079eb9449b39c11a579 --- /dev/null +++ b/apps/user_ldap/tests/User/OfflineUserTest.php @@ -0,0 +1,89 @@ +<?php + +declare(strict_types=1); +/** + * @copyright Copyright (c) 2020 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\User_LDAP\Tests\User; + +use OCA\User_LDAP\Mapping\UserMapping; +use OCA\User_LDAP\User\OfflineUser; +use OCP\IConfig; +use OCP\Share\IManager; +use OCP\Share\IShare; +use Test\TestCase; + +class OfflineUserTest extends TestCase { + + /** @var OfflineUser */ + protected $offlineUser; + /** @var UserMapping|\PHPUnit\Framework\MockObject\MockObject */ + protected $mapping; + /** @var string */ + protected $uid; + /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */ + protected $config; + /** @var IManager|\PHPUnit\Framework\MockObject\MockObject */ + protected $shareManager; + + public function setUp(): void { + $this->uid = 'deborah'; + $this->config = $this->createMock(IConfig::class); + $this->mapping = $this->createMock(UserMapping::class); + $this->shareManager = $this->createMock(IManager::class); + + $this->offlineUser = new OfflineUser( + $this->uid, + $this->config, + $this->mapping, + $this->shareManager + ); + } + + public function shareOwnerProvider(): array { + return [ + [[], false], + [[IShare::TYPE_USER], true], + [[IShare::TYPE_GROUP, IShare::TYPE_LINK], true], + [[IShare::TYPE_EMAIL, IShare::TYPE_REMOTE, IShare::TYPE_CIRCLE], true], + [[IShare::TYPE_GUEST, IShare::TYPE_REMOTE_GROUP, IShare::TYPE_ROOM], true], + ]; + } + + /** + * @dataProvider shareOwnerProvider + */ + public function testHasActiveShares(array $existingShareTypes, bool $expected) { + $shareMock = $this->createMock(IShare::class); + + $this->shareManager->expects($this->atLeastOnce()) + ->method('getSharesBy') + ->willReturnCallback(function (string $uid, int $shareType) use ($existingShareTypes, $shareMock) { + if (in_array($shareType, $existingShareTypes)) { + return [$shareMock]; + } + return []; + }); + + $this->assertSame($expected, $this->offlineUser->getHasActiveShares()); + } +} diff --git a/apps/user_ldap/tests/User_LDAPTest.php b/apps/user_ldap/tests/User_LDAPTest.php index ca9ff841ec0e8148b91870d5a4accced20a6e7b3..6840a4c6daca34c29f22d684e7efcb37f5a55289 100644 --- a/apps/user_ldap/tests/User_LDAPTest.php +++ b/apps/user_ldap/tests/User_LDAPTest.php @@ -1410,7 +1410,7 @@ class User_LDAPTest extends TestCase { ->with($this->isInstanceOf(AbstractMapping::class), $this->anything(), $uid, $uuid, true); $this->access->expects($this->any()) ->method('getUserMapper') - ->willReturn($this->createMock(AbstractMapping::class)); + ->willReturn($this->createMock(UserMapping::class)); $this->assertEquals($this->backend->createUser($uid, $pwd),true); }