]> source.dussan.org Git - nextcloud-server.git/commitdiff
user share manager to determine share ownership 23700/head
authorArthur Schiwon <blizzz@arthur-schiwon.de>
Mon, 26 Oct 2020 13:44:15 +0000 (14:44 +0100)
committerArthur Schiwon <blizzz@arthur-schiwon.de>
Mon, 26 Oct 2020 15:05:28 +0000 (16:05 +0100)
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
17 files changed:
apps/user_ldap/ajax/wizard.php
apps/user_ldap/lib/Access.php
apps/user_ldap/lib/Jobs/CleanUp.php
apps/user_ldap/lib/Jobs/Sync.php
apps/user_ldap/lib/LDAPProviderFactory.php
apps/user_ldap/lib/Proxy.php
apps/user_ldap/lib/User/DeletedUsersIndex.php
apps/user_ldap/lib/User/Manager.php
apps/user_ldap/lib/User/OfflineUser.php
apps/user_ldap/tests/AccessTest.php
apps/user_ldap/tests/Integration/AbstractIntegrationTest.php
apps/user_ldap/tests/Jobs/CleanUpTest.php
apps/user_ldap/tests/Jobs/SyncTest.php
apps/user_ldap/tests/User/DeletedUsersIndexTest.php
apps/user_ldap/tests/User/ManagerTest.php
apps/user_ldap/tests/User/OfflineUserTest.php
apps/user_ldap/tests/User_LDAPTest.php

index 34c9729f6f3e5d64520649a43c22bd1227827a17..9c7b26b54ac900ff6202e3829a54bfc30044df25 100644 (file)
@@ -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,
index 01818079802c2aa2410d65adac349b4395601f08..2b9383697e5025168cf0046286eb71afc44fe15e 100644 (file)
@@ -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.');
                }
index 6bb44b3e6aed4fc82e4ddb2cd03430b8840ea39d..8470c4793bb6c060463c0aeb841fdd811072d68c 100644 (file)
@@ -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);
                }
        }
 
index 053ca8949028fa1dac692d6d9dc78e664dbcc2e2..483c21386eb582d9bcdb42881aec35483d54ca3e 100644 (file)
@@ -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 {
index d0d9750dce6fa89fdc9689c9438554c07af355cd..5dd33c33316d2c265c16527bc284565fbf0d9d2e 100644 (file)
 
 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);
        }
 }
index 7bcbd19ff1c14e38e5fc29911e1d4bffc45ceef9..46cb2e6b9a06c5d636592bc8647da1948e56fc00 100644 (file)
@@ -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);
index 5f1a9b6716825de31e819b299907d18e082fd9bb..2591f371fa18a08a595e3b8b6d3c34f6c1eef7ef 100644 (file)
@@ -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;
 
index a3d7fd9c2b4692aaf676448da075126b70cf9170..a18c62364dbd09ec0a0469dac8b4cba50df13d5b 100644 (file)
@@ -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
+               );
        }
 
        /**
index 91bde7ec19da9b67bbd7008d10c500c063a3a76c..e55df4e8c1cb87dd719af1842d593bfa5cdd4246 100644 (file)
@@ -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,18 +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->shareManager = $shareManager;
        }
 
        /**
@@ -236,29 +239,33 @@ 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 `uid_owner`
-                       FROM `*PREFIX*share`
-                       WHERE `uid_owner` = ?
-               ', 1);
-               $query->execute([$this->ocName]);
-               if ($query->rowCount() > 0) {
-                       $this->hasActiveShares = true;
-                       return;
+               $shareInterface = new \ReflectionClass(IShare::class);
+               $shareConstants = $shareInterface->getConstants();
+
+               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;
+                       }
                }
 
-               $query = $this->db->prepare('
-                       SELECT `owner`
-                       FROM `*PREFIX*share_external`
-                       WHERE `owner` = ?
-               ', 1);
-               $query->execute([$this->ocName]);
-               $this->hasActiveShares = $query->rowCount() > 0;
+               $this->hasActiveShares = false;
        }
 }
index d01cd80b3a00292cd1d40f3918a66c52f9708a46..4f89fc51568ef30d8a5b49a71a2c84c706b83ea0 100644 (file)
@@ -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());
 
index b94016e352daf02181e4b3ab4c1c059805ab0b42..095c61544b0fcecc3584f5a323de699ee5d030be 100644 (file)
@@ -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)
                );
        }
 
index 533bb041f754f7173a996b598173106a951d233f..2e66d1147551b993a90e1b39cf355ea1820642bf 100644 (file)
@@ -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);
        }
 
index a6a7049373918449dbdcd8653320dba1b2ba0c26..6ee186d0da42d88c1d5ea81934e9826a574a06a1 100644 (file)
@@ -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() {
index 77fdd31c173bb8ff831d0af5336eb5eabde43945..8435078051c0600932f31e9ef36d72498344faeb 100644 (file)
@@ -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 {
index 18499da9a869974a4af160f22adf1bb5242bc48d..9f6d43a9a24cccd5c20c94cc6cac20fb9b437252 100644 (file)
@@ -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);
index 298e1708a58bcfedfbcfb6d81fab1a3e2230a10f..5736b2664d948843421cb079eb9449b39c11a579 100644 (file)
@@ -25,11 +25,11 @@ declare(strict_types=1);
 
 namespace OCA\User_LDAP\Tests\User;
 
-use Doctrine\DBAL\Driver\Statement;
 use OCA\User_LDAP\Mapping\UserMapping;
 use OCA\User_LDAP\User\OfflineUser;
 use OCP\IConfig;
-use OCP\IDBConnection;
+use OCP\Share\IManager;
+use OCP\Share\IShare;
 use Test\TestCase;
 
 class OfflineUserTest extends TestCase {
@@ -42,53 +42,47 @@ class OfflineUserTest extends TestCase {
        protected $uid;
        /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */
        protected $config;
-       /** @var IDBConnection|\PHPUnit\Framework\MockObject\MockObject */
-       protected $dbc;
+       /** @var IManager|\PHPUnit\Framework\MockObject\MockObject */
+       protected $shareManager;
 
        public function setUp(): void {
                $this->uid = 'deborah';
                $this->config = $this->createMock(IConfig::class);
-               $this->dbc = $this->createMock(IDBConnection::class);
                $this->mapping = $this->createMock(UserMapping::class);
+               $this->shareManager = $this->createMock(IManager::class);
 
                $this->offlineUser = new OfflineUser(
                        $this->uid,
                        $this->config,
-                       $this->dbc,
-                       $this->mapping
+                       $this->mapping,
+                       $this->shareManager
                );
        }
 
        public function shareOwnerProvider(): array {
-               // tests for none, one, many
                return [
-                       [ 0, 0, false],
-                       [ 1, 0, true],
-                       [ 0, 1, true],
-                       [ 1, 1, true],
-                       [ 2, 0, true],
-                       [ 0, 2, true],
-                       [ 2, 2, true],
+                       [[], 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(int $internalOwnerships, int $externalOwnerships, bool $expected) {
-               $queryMock = $this->createMock(Statement::class);
-               $queryMock->expects($this->atLeastOnce())
-                       ->method('execute');
-               $queryMock->expects($this->atLeastOnce())
-                       ->method('rowCount')
-                       ->willReturnOnConsecutiveCalls(
-                               $internalOwnerships > 0 ? 1 : 0,
-                               $externalOwnerships > 0 ? 1 : 0
-                       );
+       public function testHasActiveShares(array $existingShareTypes, bool $expected) {
+               $shareMock = $this->createMock(IShare::class);
 
-               $this->dbc->expects($this->atLeastOnce())
-                       ->method('prepare')
-                       ->willReturn($queryMock);
+               $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());
        }
index ca9ff841ec0e8148b91870d5a4accced20a6e7b3..6840a4c6daca34c29f22d684e7efcb37f5a55289 100644 (file)
@@ -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);
        }