X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=tests%2Fsrc%2FCore%2FConsole%2FAutomaticInstallationConsoleTest.php;h=813277ebbd730322c57734184613dad42c5fb81c;hb=c5558cc4595263e2654bb614f54d61273d79bc5f;hp=da009a84c148878df34416d1ab359f55dab7ddeb;hpb=4a82708cbffc87b441a26c92ce6418da2142c686;p=friendica.git diff --git a/tests/src/Core/Console/AutomaticInstallationConsoleTest.php b/tests/src/Core/Console/AutomaticInstallationConsoleTest.php index da009a84c1..813277ebbd 100644 --- a/tests/src/Core/Console/AutomaticInstallationConsoleTest.php +++ b/tests/src/Core/Console/AutomaticInstallationConsoleTest.php @@ -2,7 +2,13 @@ namespace Friendica\Test\src\Core\Console; +use Friendica\Core\Console\AutomaticInstallation; +use Friendica\Test\Util\DBAMockTrait; +use Friendica\Test\Util\DBStructureMockTrait; +use Friendica\Test\Util\L10nMockTrait; +use Friendica\Test\Util\RendererMockTrait; use org\bovigo\vfs\vfsStream; +use org\bovigo\vfs\vfsStreamFile; /** * @runTestsInSeparateProcesses @@ -11,32 +17,68 @@ use org\bovigo\vfs\vfsStream; */ class AutomaticInstallationConsoleTest extends ConsoleTest { + use L10nMockTrait; + use DBAMockTrait; + use DBStructureMockTrait; + use RendererMockTrait; + private $db_host; private $db_port; private $db_data; private $db_user; private $db_pass; + /** + * @var vfsStreamFile Assert file without DB credentials + */ + private $assertFile; + /** + * @var vfsStreamFile Assert file with DB credentials + */ + private $assertFileDb; + public function setUp() { parent::setUp(); - if ($this->root->hasChild('config' . DIRECTORY_SEPARATOR . 'local.ini.php')) { + if ($this->root->hasChild('config' . DIRECTORY_SEPARATOR . 'local.config.php')) { $this->root->getChild('config') - ->removeChild('local.ini.php'); + ->removeChild('local.config.php'); } $this->db_host = getenv('MYSQL_HOST'); - $this->db_port = (!empty(getenv('MYSQL_PORT'))) ? getenv('MYSQL_PORT') : null; + $this->db_port = !empty(getenv('MYSQL_PORT')) ? getenv('MYSQL_PORT') : null; $this->db_data = getenv('MYSQL_DATABASE'); $this->db_user = getenv('MYSQL_USERNAME') . getenv('MYSQL_USER'); $this->db_pass = getenv('MYSQL_PASSWORD'); + + $this->mockConfigGet('config', 'php_path', false); + + $this->mockL10nT(); } - private function assertConfig($family, $key, $value) + /** + * Creates the arguments which is asserted to be passed to 'replaceMacros()' for creating the local.config.php + * + * @param bool $withDb if true, DB will get saved too + * + * @return array The arguments to pass to the mock for 'replaceMacros()' + */ + private function createArgumentsForMacro($withDb) { - $config = $this->execute(['config', $family, $key]); - $this->assertEquals($family . "." . $key . " => " . $value . "\n", $config); + $args = [ + '$phpath' => trim(shell_exec('which php')), + '$dbhost' => (($withDb) ? $this->db_host . (isset($this->db_port) ? ':' . $this->db_port : '') : ''), + '$dbuser' => (($withDb) ? $this->db_user : ''), + '$dbpass' => (($withDb) ? $this->db_pass : ''), + '$dbdata' => (($withDb) ? $this->db_data : ''), + '$timezone' => 'Europe/Berlin', + '$language' => 'de', + '$urlpath' => '/friendica', + '$adminmail' => 'admin@friendica.local' + ]; + + return $args; } private function assertFinished($txt, $withconfig = false, $copyfile = false) @@ -48,6 +90,8 @@ class AutomaticInstallationConsoleTest extends ConsoleTest Creating config file... + + Complete! CFG; } @@ -56,20 +100,23 @@ CFG; Copying config file... + + Complete! CFG; } $finished = <<mockConnect(true, 1); + $this->mockConnected(true, 1); + $this->mockExistsTable('user', false, 1); + $this->mockUpdate([false, true, true], null, 1); -[system] -default_timezone = UTC - -language = en -INI; -// Keep this line + $config = << [ + 'hostname' => '', + 'username' => '', + 'password' => '', + 'database' => '', + 'charset' => 'utf8mb4', + ], + + // **************************************************************** + // The configuration below will be overruled by the admin panel. + // Changes made below will only have an effect if the database does + // not contain any configuration for the friendica system. + // **************************************************************** + + 'config' => [ + 'admin_email' => '', + 'sitename' => 'Friendica Social Network', + 'register_policy' => REGISTER_OPEN, + 'register_text' => '', + ], + 'system' => [ + 'default_timezone' => 'UTC', + 'language' => 'en', + ], +]; CONF; - vfsStream::newFile('prepared.ini.php') + vfsStream::newFile('prepared.config.php') ->at($this->root) ->setContent($config); - $txt = $this->execute(['autoinstall', '-f', 'prepared.ini.php']); + $console = new AutomaticInstallation($this->consoleArgv); + $console->setOption('f', 'prepared.config.php'); + + $txt = $this->dumpExecute($console); $this->assertFinished($txt, false, true); - $this->assertTrue($this->root->hasChild('config' . DIRECTORY_SEPARATOR . 'local.ini.php')); + $this->assertTrue($this->root->hasChild('config' . DIRECTORY_SEPARATOR . 'local.config.php')); } /** @@ -178,48 +238,50 @@ CONF; */ public function testWithEnvironmentAndSave() { + $this->mockConnect(true, 1); + $this->mockConnected(true, 1); + $this->mockExistsTable('user', false, 1); + $this->mockUpdate([false, true, true], null, 1); + + $this->mockGetMarkupTemplate('local.config.tpl', 'testTemplate', 1); + $this->mockReplaceMacros('testTemplate', $this->createArgumentsForMacro(true), '', 1); + $this->assertTrue(putenv('FRIENDICA_ADMIN_MAIL=admin@friendica.local')); $this->assertTrue(putenv('FRIENDICA_TZ=Europe/Berlin')); $this->assertTrue(putenv('FRIENDICA_LANG=de')); + $this->assertTrue(putenv('FRIENDICA_URL_PATH=/friendica')); - $txt = $this->execute(['autoinstall', '--savedb']); - - $this->assertFinished($txt, true); + $console = new AutomaticInstallation($this->consoleArgv); + $console->setOption('savedb', true); - $this->assertTrue($this->root->hasChild('config' . DIRECTORY_SEPARATOR . 'local.ini.php')); + $txt = $this->dumpExecute($console); - $this->assertConfig('database', 'hostname', $this->db_host . (!empty($this->db_port) ? ':' . $this->db_port : '')); - $this->assertConfig('database', 'username', $this->db_user); - $this->assertConfig('database', 'database', $this->db_data); - $this->assertConfig('config', 'admin_email', 'admin@friendica.local'); - $this->assertConfig('system', 'default_timezone', 'Europe/Berlin'); - $this->assertConfig('system', 'language', 'de'); + $this->assertFinished($txt, true); } - /** * @medium */ public function testWithEnvironmentWithoutSave() { + $this->mockConnect(true, 1); + $this->mockConnected(true, 1); + $this->mockExistsTable('user', false, 1); + $this->mockUpdate([false, true, true], null, 1); + + $this->mockGetMarkupTemplate('local.config.tpl', 'testTemplate', 1); + $this->mockReplaceMacros('testTemplate', $this->createArgumentsForMacro(false), '', 1); + $this->assertTrue(putenv('FRIENDICA_ADMIN_MAIL=admin@friendica.local')); $this->assertTrue(putenv('FRIENDICA_TZ=Europe/Berlin')); $this->assertTrue(putenv('FRIENDICA_LANG=de')); $this->assertTrue(putenv('FRIENDICA_URL_PATH=/friendica')); - $txt = $this->execute(['autoinstall']); - - $this->assertFinished($txt, true); + $console = new AutomaticInstallation($this->consoleArgv); - $this->assertTrue($this->root->hasChild('config' . DIRECTORY_SEPARATOR . 'local.ini.php')); + $txt = $this->dumpExecute($console); - $this->assertConfig('database', 'hostname', ''); - $this->assertConfig('database', 'username', ''); - $this->assertConfig('database', 'database', ''); - $this->assertConfig('config', 'admin_email', 'admin@friendica.local'); - $this->assertConfig('system', 'default_timezone', 'Europe/Berlin'); - $this->assertConfig('system', 'language', 'de'); - $this->assertConfig('system', 'urlpath', '/friendica'); + $this->assertFinished($txt, true); } /** @@ -227,45 +289,35 @@ CONF; */ public function testWithArguments() { - $args = ['autoinstall']; - array_push($args, '--dbhost'); - array_push($args, $this->db_host); - array_push($args, '--dbuser'); - array_push($args, $this->db_user); + $this->mockConnect(true, 1); + $this->mockConnected(true, 1); + $this->mockExistsTable('user', false, 1); + $this->mockUpdate([false, true, true], null, 1); + + $this->mockGetMarkupTemplate('local.config.tpl', 'testTemplate', 1); + $this->mockReplaceMacros('testTemplate', $this->createArgumentsForMacro(true), '', 1); + + $console = new AutomaticInstallation($this->consoleArgv); + + $console->setOption('dbhost', $this->db_host); + $console->setOption('dbuser', $this->db_user); if (!empty($this->db_pass)) { - array_push($args, '--dbpass'); - array_push($args, $this->db_pass); + $console->setOption('dbpass', $this->db_pass); } if (!empty($this->db_port)) { - array_push($args, '--dbport'); - array_push($args, $this->db_port); + $console->setOption('dbport', $this->db_port); } - array_push($args, '--dbdata'); - array_push($args, $this->db_data); + $console->setOption('dbdata', $this->db_data); - array_push($args, '--admin'); - array_push($args, 'admin@friendica.local'); - array_push($args, '--tz'); - array_push($args, 'Europe/Berlin'); - array_push($args, '--lang'); - array_push($args, 'de'); + $console->setOption('admin', 'admin@friendica.local'); + $console->setOption('tz', 'Europe/Berlin'); + $console->setOption('lang', 'de'); - array_push($args, '--urlpath'); - array_push($args, '/friendica'); + $console->setOption('urlpath', '/friendica'); - $txt = $this->execute($args); + $txt = $this->dumpExecute($console); $this->assertFinished($txt, true); - - $this->assertTrue($this->root->hasChild('config' . DIRECTORY_SEPARATOR . 'local.ini.php')); - - $this->assertConfig('database', 'hostname', $this->db_host . (!empty($this->db_port) ? ':' . $this->db_port : '')); - $this->assertConfig('database', 'username', $this->db_user); - $this->assertConfig('database', 'database', $this->db_data); - $this->assertConfig('config', 'admin_email', 'admin@friendica.local'); - $this->assertConfig('system', 'default_timezone', 'Europe/Berlin'); - $this->assertConfig('system', 'language', 'de'); - $this->assertConfig('system', 'urlpath', '/friendica'); } /** @@ -274,15 +326,19 @@ CONF; */ public function testNoDatabaseConnection() { - // TODO DBA mocking for whole console tests make this test work again - $this->markTestSkipped('DBA is already loaded, we have to mock the whole App to make it work'); + $this->mockConnect(false, 1); - $dbaMock = \Mockery::mock('alias:Friendica\Database\DBA'); - $dbaMock - ->shouldReceive('connected') - ->andReturn(false); + $this->mockGetMarkupTemplate('local.config.tpl', 'testTemplate', 1); + $this->mockReplaceMacros('testTemplate', $this->createArgumentsForMacro(false), '', 1); - $txt = $this->execute(['autoinstall']); + $this->assertTrue(putenv('FRIENDICA_ADMIN_MAIL=admin@friendica.local')); + $this->assertTrue(putenv('FRIENDICA_TZ=Europe/Berlin')); + $this->assertTrue(putenv('FRIENDICA_LANG=de')); + $this->assertTrue(putenv('FRIENDICA_URL_PATH=/friendica')); + + $console = new AutomaticInstallation($this->consoleArgv); + + $txt = $this->dumpExecute($console); $this->assertStuckDB($txt); } @@ -296,7 +352,7 @@ Synopsis bin/console autoinstall [-h|--help|-?] [-v] [-a] [-f] Description - Installs Friendica with data based on the local.ini.php file or environment variables + Installs Friendica with data based on the local.config.php file or environment variables Notes Not checking .htaccess/URL-Rewrite during CLI installation. @@ -305,7 +361,7 @@ Options -h|--help|-? Show help information -v Show more debug information. -a All setup checks are required (except .htaccess) - -f|--file prepared config file (e.g. "config/local.ini.php" itself) which will override every other config option - except the environment variables) + -f|--file prepared config file (e.g. "config/local.config.php" itself) which will override every other config option - except the environment variables) -s|--savedb Save the DB credentials to the file (if environment variables is used) -H|--dbhost The host of the mysql/mariadb database (env MYSQL_HOST) -p|--dbport The port of the mysql/mariadb database (env MYSQL_PORT) @@ -331,18 +387,21 @@ Environment variables FRIENDICA_LANG The langauge of Friendica Examples - bin/console autoinstall -f 'input.ini.php - Installs Friendica with the prepared 'input.ini.php' file + bin/console autoinstall -f 'input.config.php + Installs Friendica with the prepared 'input.config.php' file bin/console autoinstall --savedb - Installs Friendica with environment variables and saves them to the 'config/local.ini.php' file + Installs Friendica with environment variables and saves them to the 'config/local.config.php' file bin/console autoinstall -h localhost -p 3365 -U user -P passwort1234 -d friendica Installs Friendica with a local mysql database with credentials HELP; - $txt = $this->execute(['autoinstall', '-h']); + $console = new AutomaticInstallation($this->consoleArgv); + $console->setOption('help', true); + + $txt = $this->dumpExecute($console); $this->assertEquals($txt, $theHelp); }