diff options
author | Bjoern Schiessle <bjoern@schiessle.org> | 2016-10-24 17:03:36 +0200 |
---|---|---|
committer | Bjoern Schiessle <bjoern@schiessle.org> | 2016-11-01 19:54:39 +0100 |
commit | 318160647a62386b4fda5c04ddca04673bf97813 (patch) | |
tree | 4682a016d1e9e10e827e5fcb1d7781b0066c49b0 | |
parent | 96c40d14a1a253974db8cb2a51f227afe5dff7bf (diff) | |
download | nextcloud-server-318160647a62386b4fda5c04ddca04673bf97813.tar.gz nextcloud-server-318160647a62386b4fda5c04ddca04673bf97813.zip |
add method to check if a share provider for a given type is loaded
Signed-off-by: Bjoern Schiessle <bjoern@schiessle.org>
-rw-r--r-- | lib/private/Share20/Manager.php | 14 | ||||
-rw-r--r-- | lib/public/Share/IManager.php | 8 | ||||
-rw-r--r-- | tests/lib/Share20/ManagerTest.php | 40 |
3 files changed, 62 insertions, 0 deletions
diff --git a/lib/private/Share20/Manager.php b/lib/private/Share20/Manager.php index 19d6151a037..899bd4ebfa1 100644 --- a/lib/private/Share20/Manager.php +++ b/lib/private/Share20/Manager.php @@ -30,6 +30,7 @@ namespace OC\Share20; use OC\Cache\CappedMemoryCache; use OC\Files\Mount\MoveableMount; use OC\HintException; +use OC\Share20\Exception\ProviderException; use OCP\Files\File; use OCP\Files\Folder; use OCP\Files\IRootFolder; @@ -1291,4 +1292,17 @@ class Manager implements IManager { return $this->config->getAppValue('files_sharing', 'outgoing_server2server_share_enabled', 'yes') === 'yes'; } + /** + * @inheritdoc + */ + public function shareProviderExists($shareType) { + try { + $this->factory->getProviderForType($shareType); + } catch (ProviderException $e) { + return false; + } + + return true; + } + } diff --git a/lib/public/Share/IManager.php b/lib/public/Share/IManager.php index a74ab5fe796..137dc309280 100644 --- a/lib/public/Share/IManager.php +++ b/lib/public/Share/IManager.php @@ -286,4 +286,12 @@ interface IManager { */ public function outgoingServer2ServerSharesAllowed(); + /** + * Check if a given share provider exists + * @param int $shareType + * @return bool + * @since 9.2.0 + */ + public function shareProviderExists($shareType); + } diff --git a/tests/lib/Share20/ManagerTest.php b/tests/lib/Share20/ManagerTest.php index c0c7b48b35d..bd85e3c73aa 100644 --- a/tests/lib/Share20/ManagerTest.php +++ b/tests/lib/Share20/ManagerTest.php @@ -2530,6 +2530,46 @@ class ManagerTest extends \Test\TestCase { $this->manager->moveShare($share, 'recipient'); } + + /** + * @dataProvider dataTestShareProviderExists + */ + public function testShareProviderExists($shareType, $expected) { + + $factory = $this->getMockBuilder('OCP\Share\IProviderFactory')->getMock(); + $factory->expects($this->any())->method('getProviderForType') + ->willReturnCallback(function ($id) { + if ($id === \OCP\Share::SHARE_TYPE_USER) { + return true; + } + throw new Exception\ProviderException(); + }); + + $manager = new Manager( + $this->logger, + $this->config, + $this->secureRandom, + $this->hasher, + $this->mountManager, + $this->groupManager, + $this->l, + $factory, + $this->userManager, + $this->rootFolder, + $this->eventDispatcher + ); + $this->assertSame($expected, + $manager->shareProviderExists($shareType) + ); + } + + public function dataTestShareProviderExists() { + return [ + [\OCP\Share::SHARE_TYPE_USER, true], + [42, false], + ]; + } + public function testGetSharesInFolder() { $factory = new DummyFactory2($this->createMock(IServerContainer::class)); |