]> git.mxchange.org Git - friendica.git/commitdiff
Merge pull request #11179 from nupplaphil/bug/friendica-11178
authorHypolite Petovan <hypolite@mrpetovan.com>
Sun, 23 Jan 2022 19:53:16 +0000 (14:53 -0500)
committerGitHub <noreply@github.com>
Sun, 23 Jan 2022 19:53:16 +0000 (14:53 -0500)
Fix Addons-Load for StorageManager

src/Core/Storage/Repository/StorageManager.php
tests/src/Core/Storage/Repository/StorageManagerTest.php

index 3dcbef651178c9ad8d3bfe8e50110d6bbff8ea98..89a7a913ab8d42c347d56befdf8ba5b78e9bc57d 100644 (file)
@@ -22,6 +22,7 @@
 namespace Friendica\Core\Storage\Repository;
 
 use Exception;
+use Friendica\Core\Addon;
 use Friendica\Core\Config\Capability\IManageConfigValues;
 use Friendica\Core\Hook;
 use Friendica\Core\L10n;
@@ -79,11 +80,12 @@ class StorageManager
         * @param IManageConfigValues $config
         * @param LoggerInterface     $logger
         * @param L10n                $l10n
+        * @param bool                $includeAddon (DEVELOP ONLY) Used for testing only - avoids loading addons because of DB direct access
         *
         * @throws InvalidClassStorageException in case the active backend class is invalid
         * @throws StorageException in case of unexpected errors during the active backend class loading
         */
-       public function __construct(Database $dba, IManageConfigValues $config, LoggerInterface $logger, L10n $l10n)
+       public function __construct(Database $dba, IManageConfigValues $config, LoggerInterface $logger, L10n $l10n, bool $includeAddon = true)
        {
                $this->dba           = $dba;
                $this->config        = $config;
@@ -93,6 +95,13 @@ class StorageManager
 
                $currentName = $this->config->get('storage', 'name');
 
+               /// @fixme Loading the addons & hooks here is really bad practice, but solves https://github.com/friendica/friendica/issues/11178
+               /// clean solution = Making Addon & Hook dynamic and load them inside the constructor, so there's no custom load logic necessary anymore
+               if ($includeAddon) {
+                       Addon::loadAddons();
+                       Hook::loadHooks();
+               }
+
                // you can only use user backends as a "default" backend, so the second parameter is true
                $this->currentBackend = $this->getWritableStorageByName($currentName);
        }
index 6e36821892cd00b50bdd1989b1c98d3d071e016d..c387e265bf9529fc522484d6f53cbd1ff1db3733 100644 (file)
@@ -40,7 +40,6 @@ use Friendica\DI;
 use Friendica\Core\Config\Factory\Config;
 use Friendica\Core\Config\Repository;
 use Friendica\Core\Storage\Type;
-use Friendica\Network\HTTPClient\Client\HttpClient;
 use Friendica\Test\DatabaseTest;
 use Friendica\Test\Util\Database\StaticDatabase;
 use Friendica\Test\Util\VFSTrait;
@@ -61,8 +60,6 @@ class StorageManagerTest extends DatabaseTest
        private $logger;
        /** @var L10n */
        private $l10n;
-       /** @var HttpClient */
-       private $httpRequest;
 
        protected function setUp(): void
        {
@@ -92,8 +89,6 @@ class StorageManagerTest extends DatabaseTest
                $this->config->set('storage', 'filesystem_path', $this->root->getChild(Type\FilesystemConfig::DEFAULT_BASE_FOLDER)->url());
 
                $this->l10n = \Mockery::mock(L10n::class);
-
-               $this->httpRequest = \Mockery::mock(HttpClient::class);
        }
 
        protected function tearDown(): void
@@ -108,7 +103,7 @@ class StorageManagerTest extends DatabaseTest
         */
        public function testInstance()
        {
-               $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n, $this->httpRequest);
+               $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n, false);
 
                self::assertInstanceOf(StorageManager::class, $storageManager);
        }
@@ -170,7 +165,7 @@ class StorageManagerTest extends DatabaseTest
                        $this->config->set('storage', 'name', $name);
                }
 
-               $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n);
+               $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n, false);
 
                if ($interface === ICanWriteToStorage::class) {
                        $storage = $storageManager->getWritableStorageByName($name);
@@ -190,7 +185,7 @@ class StorageManagerTest extends DatabaseTest
         */
        public function testIsValidBackend($name, $valid, $interface, $assert, $assertName)
        {
-               $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n);
+               $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n, false);
 
                // true in every of the backends
                self::assertEquals(!empty($assertName), $storageManager->isValidBackend($name));
@@ -204,7 +199,7 @@ class StorageManagerTest extends DatabaseTest
         */
        public function testListBackends()
        {
-               $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n);
+               $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n, false);
 
                self::assertEquals(StorageManager::DEFAULT_BACKENDS, $storageManager->listBackends());
        }
@@ -220,7 +215,7 @@ class StorageManagerTest extends DatabaseTest
                        static::markTestSkipped('only works for ICanWriteToStorage');
                }
 
-               $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n);
+               $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n, false);
 
                $selBackend = $storageManager->getWritableStorageByName($name);
                $storageManager->setBackend($selBackend);
@@ -240,7 +235,7 @@ class StorageManagerTest extends DatabaseTest
                        $this->expectException(InvalidClassStorageException::class);
                }
 
-               $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n);
+               $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n, false);
 
                self::assertInstanceOf($assert, $storageManager->getBackend());
        }
@@ -261,7 +256,7 @@ class StorageManagerTest extends DatabaseTest
                        ->addRule(IHandleSessions::class, ['instanceOf' => Memory::class, 'shared' => true, 'call' => null]);
                DI::init($dice);
 
-               $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n);
+               $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n, false);
 
                self::assertTrue($storageManager->register(SampleStorageBackend::class));
 
@@ -289,7 +284,7 @@ class StorageManagerTest extends DatabaseTest
                        ->addRule(IHandleSessions::class, ['instanceOf' => Memory::class, 'shared' => true, 'call' => null]);
                DI::init($dice);
 
-               $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n);
+               $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n, false);
 
                self::assertTrue($storageManager->register(SampleStorageBackend::class));
 
@@ -328,7 +323,7 @@ class StorageManagerTest extends DatabaseTest
 
                $this->loadFixture(__DIR__ . '/../../../../datasets/storage/database.fixture.php', $this->dba);
 
-               $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n);
+               $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n, false);
                $storage        = $storageManager->getWritableStorageByName($name);
                $storageManager->move($storage);
 
@@ -352,7 +347,7 @@ class StorageManagerTest extends DatabaseTest
                $this->expectException(InvalidClassStorageException::class);
                $this->expectExceptionMessage('Backend SystemResource is not valid');
 
-               $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n);
+               $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n, false);
                $storage        = $storageManager->getWritableStorageByName(SystemResource::getName());
                $storageManager->move($storage);
        }