Przeglądaj źródła

feat: Allow to change the Configuration in the _construct

So, now we can change the Configuration class, override it even if we
want.
Jacques Bodin-Hullin 1 rok temu
rodzic
commit
c04a551215
2 zmienionych plików z 20 dodań i 3 usunięć
  1. 5 3
      lib/Controller.php
  2. 15 0
      tst/ControllerTest.php

+ 5 - 3
lib/Controller.php

@@ -112,10 +112,12 @@ class Controller
      *
      * initializes and runs PrivateBin
      *
+     * @param ?Configuration $config
+     *
      * @access public
      * @throws Exception
      */
-    public function __construct()
+    public function __construct(?Configuration $config = null)
     {
         if (version_compare(PHP_VERSION, self::MIN_PHP_VERSION) < 0) {
             error_log(I18n::_('%s requires php %s or above to work. Sorry.', I18n::_('PrivateBin'), self::MIN_PHP_VERSION));
@@ -126,7 +128,8 @@ class Controller
             return;
         }
 
-        // load config from ini file, initialize required classes
+        // load config (using ini file by default) & initialize required classes
+        $this->_conf = $config ?? new Configuration();
         $this->_init();
 
         switch ($this->_request->getOperation()) {
@@ -174,7 +177,6 @@ class Controller
      */
     private function _init()
     {
-        $this->_conf    = new Configuration;
         $this->_model   = new Model($this->_conf);
         $this->_request = new Request;
         $this->_urlBase = $this->_request->getRequestUri();

+ 15 - 0
tst/ControllerTest.php

@@ -1,6 +1,7 @@
 <?php declare(strict_types=1);
 
 use PHPUnit\Framework\TestCase;
+use PrivateBin\Configuration;
 use PrivateBin\Controller;
 use PrivateBin\Data\Filesystem;
 use PrivateBin\Persistence\ServerSalt;
@@ -147,6 +148,20 @@ class ControllerTest extends TestCase
         new Controller;
     }
 
+    /**
+     * @runInSeparateProcess
+     */
+    public function testNonDefaultConf()
+    {
+        $newConfig   = new class extends Configuration {};
+        $configValue = (new ReflectionClass(Controller::class))->getProperty('_conf');
+        $configValue->setAccessible(true);
+        ob_start();
+        $controller = new Controller($newConfig);
+        ob_end_clean();
+        $this->assertSame($newConfig, $configValue->getValue($controller));
+    }
+
     /**
      * @runInSeparateProcess
      */