]> git.mxchange.org Git - friendica.git/blobdiff - tests/src/Core/Console/ConsoleTest.php
Refactoring Logging to use Configuration
[friendica.git] / tests / src / Core / Console / ConsoleTest.php
index 0cc5c633591b1825f90872776bfa447b078ea522..f733175d3434bd0cc0d47f06f727225b2997c2b7 100644 (file)
 
 namespace Friendica\Test\src\Core\Console;
 
-use Friendica\App;
-use Friendica\BaseObject;
-use Friendica\Database\DBA;
+use Asika\SimpleConsole\Console;
+use Friendica\Core\Config\Configuration;
+use Friendica\Test\MockedTest;
+use Friendica\Test\Util\AppMockTrait;
 use Friendica\Test\Util\Intercept;
-use org\bovigo\vfs\vfsStream;
-use org\bovigo\vfs\vfsStreamDirectory;
-use PHPUnit\Framework\TestCase;
+use Friendica\Test\Util\VFSTrait;
+use Friendica\Util\Profiler;
 
-abstract class ConsoleTest extends TestCase
+abstract class ConsoleTest extends MockedTest
 {
-       /**
-        * @var MultiUseConsole Extension of the basic Friendica Console for testing purpose
-        */
-       private $console;
-       /**
-        * @var App The Friendica App
-        */
-       protected $app;
+       use VFSTrait;
+       use AppMockTrait;
 
        /**
-        * @var vfsStreamDirectory The Stream Directory
+        * @var array The default argv for a Console Instance
         */
-       protected $root;
-
-       protected $stdout;
+       protected $consoleArgv = [ 'consoleTest.php' ];
 
        protected function setUp()
        {
                parent::setUp();
 
-               Intercept::setUp();
-
                if (!getenv('MYSQL_DATABASE')) {
                        $this->markTestSkipped('Please set the MYSQL_* environment variables to your test database credentials.');
                }
 
-               $this->setUpVfsDir();
-
-               // Reusable App object
-               $this->app = new App($this->root->url());
-               BaseObject::setApp($this->app);
-               $this->console = new MultiUseConsole();
-       }
-
-       public function execute($args) {
-               DBA::disconnect();
-               $this->app->reload();
-
-               array_unshift($args, $this->getExecutablePath());
-               Intercept::reset();
-               $this->console->reset();
-               $this->console->parseTestArgv($args);
-               $this->console->execute();
+               Intercept::setUp();
 
-               $returnStr = Intercept::$cache;
-               Intercept::reset();
-               return $returnStr;
+               $this->setUpVfsDir();
+               $configMock = \Mockery::mock(Configuration::class);
+               $this->mockApp($this->root, $configMock);
+               $profileMock = \Mockery::mock(Profiler::class);
+               $this->app->shouldReceive('getProfiler')->andReturn($profileMock);
        }
 
        /**
-        * @return string returns the path to the console executable during tests
+        * Dumps the execution of an console output to a string and returns it
+        *
+        * @param Console $console The current console instance
+        *
+        * @return string the output of the execution
         */
-       protected function getExecutablePath() {
-               return $this->root->getChild('bin' . DIRECTORY_SEPARATOR . 'console.php')->url();
-       }
-
-       private function setUpVfsDir() {
-               // the used directories inside the App class
-               $structure = [
-                       'config' => [],
-                       'bin' => []
-               ];
-
-               // create a virtual directory and copy all needed files and folders to it
-               $this->root = vfsStream::setup('friendica', null, $structure);
-
-               $this->setConfigFile('config.ini.php');
-               $this->setConfigFile('settings.ini.php');
-               $this->setConfigFile('local.ini.php');
-               $this->setConfigFile('dbstructure.json');
-
-               // fake console.php for setting an executable
-               vfsStream::newFile('console.php')
-                       ->at($this->root->getChild('bin'))
-                       ->setContent('<? php');
-       }
-
-       private function setConfigFile($filename)
+       protected function dumpExecute($console)
        {
-               $file = dirname(__DIR__) . DIRECTORY_SEPARATOR .
-                       '..' . DIRECTORY_SEPARATOR .
-                       '..' . DIRECTORY_SEPARATOR .
-                       '..' . DIRECTORY_SEPARATOR .
-                       'config' . DIRECTORY_SEPARATOR .
-                       $filename;
+               Intercept::reset();
+               $console->execute();
+               $returnStr = Intercept::$cache;
+               Intercept::reset();
 
-               if (file_exists($file)) {
-                       vfsStream::newFile($filename)
-                               ->at($this->root->getChild('config'))
-                               ->setContent(file_get_contents($file));
-               }
+               return $returnStr;
        }
 }