Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDaniel Kesselberg <mail@danielkesselberg.de>2019-09-29 21:57:00 +0300
committerDaniel Kesselberg <mail@danielkesselberg.de>2019-12-08 00:04:07 +0300
commit001648037055985cc10f38d6ba1e0e71cac49af7 (patch)
tree9f4cf10544421a7a337e9d26a86cbc8aedabe65b /tests
parent2959487f71c8226036ac3614bce27e3bbe60418a (diff)
Decouple resource provider registration
Signed-off-by: Daniel Kesselberg <mail@danielkesselberg.de>
Diffstat (limited to 'tests')
-rw-r--r--tests/lib/Collaboration/Resources/ManagerTest.php62
-rw-r--r--tests/lib/Collaboration/Resources/ProviderManagerTest.php111
2 files changed, 173 insertions, 0 deletions
diff --git a/tests/lib/Collaboration/Resources/ManagerTest.php b/tests/lib/Collaboration/Resources/ManagerTest.php
new file mode 100644
index 00000000000..f59c2913c88
--- /dev/null
+++ b/tests/lib/Collaboration/Resources/ManagerTest.php
@@ -0,0 +1,62 @@
+<?php
+declare(strict_types=1);
+/**
+ * @copyright Copyright (c) 2019 Daniel Kesselberg <mail@danielkesselberg.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 Test\Collaboration\Resources;
+
+use OC\Collaboration\Resources\Manager;
+use OCP\Collaboration\Resources\IManager;
+use OCP\Collaboration\Resources\IProviderManager;
+use OCP\IDBConnection;
+use OCP\ILogger;
+use Test\TestCase;
+
+class ManagerTest extends TestCase {
+
+ /** @var ILogger */
+ protected $logger;
+ /** @var IProviderManager */
+ protected $providerManager;
+ /** @var IManager */
+ protected $manager;
+
+ protected function setUp(): void {
+ parent::setUp();
+
+ $this->logger = $this->createMock(ILogger::class);
+ $this->providerManager = $this->createMock(IProviderManager::class);
+
+ /** @var IDBConnection $connection */
+ $connection = $this->createMock(IDBConnection::class);
+ $this->manager = new Manager($connection, $this->providerManager, $this->logger);
+ }
+
+ public function testRegisterResourceProvider(): void {
+ $this->logger->expects($this->once())
+ ->method('debug')
+ ->with($this->equalTo('\OC\Collaboration\Resources\Manager::registerResourceProvider is deprecated'), $this->equalTo(['provider' => 'AwesomeResourceProvider']));
+ $this->providerManager->expects($this->once())
+ ->method('registerResourceProvider')
+ ->with($this->equalTo('AwesomeResourceProvider'));
+
+ $this->manager->registerResourceProvider('AwesomeResourceProvider');
+ }
+}
diff --git a/tests/lib/Collaboration/Resources/ProviderManagerTest.php b/tests/lib/Collaboration/Resources/ProviderManagerTest.php
new file mode 100644
index 00000000000..d8bebe8fa6c
--- /dev/null
+++ b/tests/lib/Collaboration/Resources/ProviderManagerTest.php
@@ -0,0 +1,111 @@
+<?php
+declare(strict_types=1);
+/**
+ * @copyright Copyright (c) 2019 Daniel Kesselberg <mail@danielkesselberg.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 Test\Collaboration\Resources;
+
+use OC\Collaboration\Resources\ProviderManager;
+use OCA\Files\Collaboration\Resources\ResourceProvider;
+use OCP\AppFramework\QueryException;
+use OCP\Collaboration\Resources\IProviderManager;
+use OCP\ILogger;
+use OCP\IServerContainer;
+use Test\TestCase;
+
+class ProviderManagerTest extends TestCase {
+
+ /** @var IServerContainer */
+ protected $serverContainer;
+ /** @var ILogger */
+ protected $logger;
+ /** @var IProviderManager */
+ protected $providerManager;
+
+ protected function setUp(): void {
+ parent::setUp();
+
+ $this->serverContainer = $this->createMock(IServerContainer::class);
+ $this->logger = $this->createMock(ILogger::class);
+
+ $this->providerManager = new class($this->serverContainer, $this->logger) extends ProviderManager {
+ public function countProviders(): int {
+ return count($this->providers);
+ }
+ };
+ }
+
+ public function testRegisterResourceProvider(): void {
+ $this->providerManager->registerResourceProvider('AwesomeResourceProvider');
+ $this->assertSame(1, $this->providerManager->countProviders());
+ }
+
+ public function testGetResourceProvidersNoProvider(): void {
+ $this->assertCount(0, $this->providerManager->getResourceProviders());
+ }
+
+ public function testGetResourceProvidersValidProvider(): void {
+ $this->serverContainer->expects($this->once())
+ ->method('query')
+ ->with($this->equalTo(ResourceProvider::class))
+ ->willReturn($this->createMock(ResourceProvider::class));
+
+ $this->providerManager->registerResourceProvider(ResourceProvider::class);
+ $resourceProviders = $this->providerManager->getResourceProviders();
+
+ $this->assertCount(1, $resourceProviders);
+ $this->assertInstanceOf(ResourceProvider::class, $resourceProviders[0]);
+ }
+
+ public function testGetResourceProvidersInvalidProvider(): void {
+ $this->serverContainer->expects($this->once())
+ ->method('query')
+ ->with($this->equalTo('InvalidResourceProvider'))
+ ->willThrowException(new QueryException('A meaningful error message'));
+
+ $this->logger->expects($this->once())
+ ->method('logException');
+
+ $this->providerManager->registerResourceProvider('InvalidResourceProvider');
+ $resourceProviders = $this->providerManager->getResourceProviders();
+
+ $this->assertCount(0, $resourceProviders);
+ }
+
+ public function testGetResourceProvidersValidAndInvalidProvider(): void {
+ $this->serverContainer->expects($this->at(0))
+ ->method('query')
+ ->with($this->equalTo('InvalidResourceProvider'))
+ ->willThrowException(new QueryException('A meaningful error message'));
+ $this->serverContainer->expects($this->at(1))
+ ->method('query')
+ ->with($this->equalTo(ResourceProvider::class))
+ ->willReturn($this->createMock(ResourceProvider::class));
+
+ $this->logger->expects($this->once())
+ ->method('logException');
+
+ $this->providerManager->registerResourceProvider('InvalidResourceProvider');
+ $this->providerManager->registerResourceProvider(ResourceProvider::class);
+ $resourceProviders = $this->providerManager->getResourceProviders();
+
+ $this->assertCount(1, $resourceProviders);
+ }
+}