Fixing some AutomaticInstallationConsoleTests
[friendica.git/.git] / tests / Util / AppMockTrait.php
index c04b5d7..23920ff 100644 (file)
@@ -4,7 +4,10 @@ namespace Friendica\Test\Util;
 
 use Friendica\App;
 use Friendica\BaseObject;
+use Friendica\Core\Config;
 use Friendica\Render\FriendicaSmartyEngine;
+use Friendica\Util\Profiler;
+use Mockery\MockInterface;
 use org\bovigo\vfs\vfsStreamDirectory;
 
 /**
@@ -12,50 +15,61 @@ use org\bovigo\vfs\vfsStreamDirectory;
  */
 trait AppMockTrait
 {
-       use ConfigMockTrait;
-       use DBAMockTrait;
-
        /**
-        * @var App The Friendica global App Mock
+        * @var MockInterface|App The mocked Friendica\App
         */
        protected $app;
 
+       /**
+        * @var MockInterface|Config\Configuration The mocked Config Cache
+        */
+       protected $configMock;
+
+       /**
+        * @var MockInterface|Profiler The mocked profiler
+        */
+       protected $profilerMock;
+
+       /**
+        * @var MockInterface|App\Mode The mocked App mode
+        */
+       protected $mode;
+
        /**
         * Mock the App
         *
         * @param vfsStreamDirectory $root The root directory
+        * @param Config\Cache\ConfigCache $configCache
+        * @param bool $raw If true, no config mocking will be done
         */
-       public function mockApp($root)
+       public function mockApp(vfsStreamDirectory $root, $configCache = null, $raw = false)
        {
-               /// @todo This mock is ugly. We return an empty string for each translation - no workaround yet
-               $l10nMock = \Mockery::mock('alias:Friendica\Core\L10n');
-               $l10nMock->shouldReceive('t')
-                       ->andReturn('');
+               $this->configMock = \Mockery::mock(Config\Cache\IConfigCache::class);
+               $this->mode = \Mockery::mock(App\Mode::class);
+               $configAdapterMock = \Mockery::mock(Config\Adapter\IConfigAdapter::class);
+               // Disable the adapter
+               $configAdapterMock->shouldReceive('isConnected')->andReturn(false);
 
-               $this->mockConfigGet('system', 'theme', 'testtheme');
+               $config = new Config\Configuration((isset($configCache) ? $configCache : $this->configMock), $configAdapterMock);
+               // Initialize empty Config
+               Config::init($config);
 
                // Mocking App and most used functions
-               $this->app = \Mockery::mock('Friendica\App');
+               $this->app = \Mockery::mock(App::class);
                $this->app
                        ->shouldReceive('getBasePath')
                        ->andReturn($root->url());
 
                $this->app
-                       ->shouldReceive('getConfigValue')
-                       ->with('database', 'hostname')
-                       ->andReturn(getenv('MYSQL_HOST'));
-               $this->app
-                       ->shouldReceive('getConfigValue')
-                       ->with('database', 'username')
-                       ->andReturn(getenv('MYSQL_USERNAME'));
-               $this->app
-                       ->shouldReceive('getConfigValue')
-                       ->with('database', 'password')
-                       ->andReturn(getenv('MYSQL_PASSWORD'));
+                       ->shouldReceive('getMode')
+                       ->andReturn($this->mode);
+
+               $this->profilerMock = \Mockery::mock(Profiler::class);
+               $this->profilerMock->shouldReceive('saveTimestamp');
+
                $this->app
-                       ->shouldReceive('getConfigValue')
-                       ->with('database', 'database')
-                       ->andReturn(getenv('MYSQL_DATABASE'));
+                       ->shouldReceive('getConfigCache')
+                       ->andReturn((isset($configCache) ? $configCache : $this->configMock));
                $this->app
                        ->shouldReceive('getTemplateEngine')
                        ->andReturn(new FriendicaSmartyEngine());
@@ -63,28 +77,46 @@ trait AppMockTrait
                        ->shouldReceive('getCurrentTheme')
                        ->andReturn('Smarty3');
                $this->app
-                       ->shouldReceive('getTemplateLeftDelimiter')
-                       ->with('smarty3')
-                       ->andReturn('{{');
-               $this->app
-                       ->shouldReceive('getTemplateRightDelimiter')
-                       ->with('smarty3')
-                       ->andReturn('}}');
-               $this->app
-                       ->shouldReceive('saveTimestamp')
-                       ->andReturn(true);
+                       ->shouldReceive('getProfiler')
+                       ->andReturn($this->profilerMock);
                $this->app
                        ->shouldReceive('getBaseUrl')
-                       ->andReturn('http://friendica.local');
-
-               // Mocking the Theme
-               // Necessary for macro engine with template files
-               $themeMock = \Mockery::mock('alias:Friendica\Core\Theme');
-               $themeMock
-                       ->shouldReceive('install')
-                       ->with('testtheme')
-                       ->andReturn(true);
+                       ->andReturnUsing(function () {
+                               return $this->app->getConfigCache()->get('system', 'url');
+                       });
 
                BaseObject::setApp($this->app);
+
+               if ($raw) {
+                       return;
+               }
+
+               $this->configMock
+                       ->shouldReceive('has')
+                       ->andReturn(true);
+               $this->configMock
+                       ->shouldReceive('get')
+                       ->with('database', 'hostname')
+                       ->andReturn(getenv('MYSQL_HOST'));
+               $this->configMock
+                       ->shouldReceive('get')
+                       ->with('database', 'username')
+                       ->andReturn(getenv('MYSQL_USERNAME'));
+               $this->configMock
+                       ->shouldReceive('get')
+                       ->with('database', 'password')
+                       ->andReturn(getenv('MYSQL_PASSWORD'));
+               $this->configMock
+                       ->shouldReceive('get')
+                       ->with('database', 'database')
+                       ->andReturn(getenv('MYSQL_DATABASE'));
+               $this->configMock
+                       ->shouldReceive('get')
+                       ->with('config', 'hostname')
+                       ->andReturn('localhost');
+               $this->configMock
+                       ->shouldReceive('get')
+                       ->with('system', 'theme')
+                       ->andReturn('system_theme');
        }
 }