X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=tests%2Fsrc%2FCore%2FConsole%2FAutomaticInstallationConsoleTest.php;h=9ed3d404f21a57bed039c9bada2a6503ed5c5989;hb=2d1e7711783828b9be17d24706055c3345531fae;hp=f24f56cdb54281132eb14159fa451df442266f82;hpb=ef0545645a3054a6433340e7ac170c1933e670cc;p=friendica.git diff --git a/tests/src/Core/Console/AutomaticInstallationConsoleTest.php b/tests/src/Core/Console/AutomaticInstallationConsoleTest.php index f24f56cdb5..9ed3d404f2 100644 --- a/tests/src/Core/Console/AutomaticInstallationConsoleTest.php +++ b/tests/src/Core/Console/AutomaticInstallationConsoleTest.php @@ -10,6 +10,7 @@ use Friendica\Test\Util\DBAMockTrait; use Friendica\Test\Util\DBStructureMockTrait; use Friendica\Test\Util\L10nMockTrait; use Friendica\Test\Util\RendererMockTrait; +use Friendica\Util\BaseURL; use Friendica\Util\Logger\VoidLogger; use org\bovigo\vfs\vfsStream; use org\bovigo\vfs\vfsStreamFile; @@ -56,7 +57,7 @@ class AutomaticInstallationConsoleTest extends ConsoleTest $this->configCache->set('config', 'php_path', trim(shell_exec('which php'))); $this->configCache->set('system', 'theme', 'smarty3'); - $this->mockApp($this->root, null, true); + $this->mockApp($this->root, true); $this->configMock->shouldReceive('set')->andReturnUsing(function ($cat, $key, $value) { if ($key !== 'basepath') { @@ -97,10 +98,14 @@ class AutomaticInstallationConsoleTest extends ConsoleTest ], 'config' => [ 'php_path' => '', + 'hostname' => 'friendica.local', 'admin_email' => '', ], 'system' => [ + 'basepath' => '', 'urlpath' => '', + 'url' => 'http://friendica.local', + 'ssl_policy' => 0, 'default_timezone' => '', 'language' => '', ], @@ -117,10 +122,14 @@ class AutomaticInstallationConsoleTest extends ConsoleTest ], 'config' => [ 'php_path' => '', + 'hostname' => 'friendica.local', 'admin_email' => 'admin@philipp.info', ], 'system' => [ 'urlpath' => 'test/it', + 'url' => 'http://friendica.local/test/it', + 'basepath' => '', + 'ssl_policy' => '2', 'default_timezone' => 'en', 'language' => 'Europe/Berlin', ], @@ -137,10 +146,14 @@ class AutomaticInstallationConsoleTest extends ConsoleTest ], 'config' => [ 'php_path' => '', + 'hostname' => 'friendica.local', 'admin_email' => 'admin@philipp.info', ], 'system' => [ 'urlpath' => 'test/it', + 'url' => 'https://friendica.local/test/it', + 'basepath' => '', + 'ssl_policy' => '1', 'default_timezone' => 'en', 'language' => 'Europe/Berlin', ], @@ -236,6 +249,30 @@ Checking database... Could not connect to database.: +FIN; + + $this->assertEquals($finished, $txt); + } + + private function assertStuckURL($txt) + { + $finished = <<assertEquals($finished, $txt); @@ -269,8 +306,9 @@ FIN; * @param boolean $saveDb True, if the db credentials should get saved to the file * @param boolean $default True, if we use the default values * @param boolean $defaultDb True, if we use the default value for the DB + * @param boolean $realBasepath True, if we use the real basepath of the installation, not the mocked one */ - public function assertConfig($assertion = null, $saveDb = false, $default = true, $defaultDb = true) + public function assertConfig($assertion = null, $saveDb = false, $default = true, $defaultDb = true, $realBasepath = false) { if (!empty($assertion['database']['hostname'])) { $assertion['database']['hostname'] .= (!empty($assertion['database']['port']) ? ':' . $assertion['database']['port'] : ''); @@ -283,34 +321,52 @@ FIN; $this->assertConfigEntry('config', 'admin_email', $assertion); $this->assertConfigEntry('config', 'php_path', trim(shell_exec('which php'))); + $this->assertConfigEntry('config', 'hostname', $assertion); $this->assertConfigEntry('system', 'default_timezone', $assertion, ($default) ? Installer::DEFAULT_TZ : null); $this->assertConfigEntry('system', 'language', $assertion, ($default) ? Installer::DEFAULT_LANG : null); + $this->assertConfigEntry('system', 'url', $assertion); + $this->assertConfigEntry('system', 'urlpath', $assertion); + $this->assertConfigEntry('system', 'ssl_policy', $assertion, ($default) ? BaseURL::DEFAULT_SSL_SCHEME : null); + $this->assertConfigEntry('system', 'basepath', ($realBasepath) ? $this->root->url() : $assertion); } /** * Test the automatic installation without any parameter/setting + * Should stuck because of missing hostname */ public function testEmpty() { - $this->app->shouldReceive('getURLPath')->andReturn('')->atLeast()->once(); + $console = new AutomaticInstallation($this->consoleArgv); + $txt = $this->dumpExecute($console); + + $this->assertStuckURL($txt); + } + + /** + * Test the automatic installation without any parameter/setting + * except URL + */ + public function testEmptyWithURL() + { $this->mockConnect(true, 1); $this->mockConnected(true, 1); $this->mockExistsTable('user', false, 1); $this->mockUpdate([$this->root->url(), false, true, true], null, 1); $this->mockGetMarkupTemplate('local.config.tpl', 'testTemplate', 1); - $this->mockReplaceMacros('testTemplate', \Mockery::any(), '', 1); + $this->mockReplaceMacros('testTemplate', \Mockery::any(), false, '', 1); $console = new AutomaticInstallation($this->consoleArgv); + $console->setOption('url', 'http://friendica.local'); $txt = $this->dumpExecute($console); $this->assertFinished($txt, true, false); $this->assertTrue($this->root->hasChild('config' . DIRECTORY_SEPARATOR . 'local.config.php')); - $this->assertConfig(); + $this->assertConfig(['config' => ['hostname' => 'friendica.local'], 'system' => ['url' => 'http://friendica.local', 'ssl_policy' => 0, 'urlPath' => '']], false, true, true, true); } /** @@ -356,12 +412,16 @@ return [ 'config' => [ 'admin_email' => '{$conf('config', 'admin_email')}', + 'hostname' => '{$conf('config', 'hostname')}', 'sitename' => 'Friendica Social Network', 'register_policy' => \Friendica\Module\Register::OPEN, 'register_text' => '', ], 'system' => [ + 'basepath' => '{$conf('system', 'basepath')}', 'urlpath' => '{$conf('system', 'urlpath')}', + 'url' => '{$conf('system', 'url')}', + 'ssl_policy' => '{$conf('system', 'ssl_policy')}', 'default_timezone' => '{$conf('system', 'default_timezone')}', 'language' => '{$conf('system', 'language')}', ], @@ -392,15 +452,13 @@ CONF; */ public function testWithEnvironmentAndSave(array $data) { - $this->app->shouldReceive('getURLPath')->andReturn('')->atLeast()->once(); - $this->mockConnect(true, 1); $this->mockConnected(true, 1); $this->mockExistsTable('user', false, 1); $this->mockUpdate([$this->root->url(), false, true, true], null, 1); $this->mockGetMarkupTemplate('local.config.tpl', 'testTemplate', 1); - $this->mockReplaceMacros('testTemplate', \Mockery::any(), '', 1); + $this->mockReplaceMacros('testTemplate', \Mockery::any(), false, '', 1); $this->assertTrue(putenv('MYSQL_HOST=' . $data['database']['hostname'])); $this->assertTrue(putenv('MYSQL_PORT=' . $data['database']['port'])); @@ -408,7 +466,9 @@ CONF; $this->assertTrue(putenv('MYSQL_USERNAME=' . $data['database']['username'])); $this->assertTrue(putenv('MYSQL_PASSWORD=' . $data['database']['password'])); - $this->assertTrue(putenv('FRIENDICA_URL_PATH=' . $data['system']['urlpath'])); + $this->assertTrue(putenv('FRIENDICA_HOSTNAME=' . $data['config']['hostname'])); + $this->assertTrue(putenv('FRIENDICA_BASE_PATH=' . $data['system']['basepath'])); + $this->assertTrue(putenv('FRIENDICA_URL=' . $data['system']['url'])); $this->assertTrue(putenv('FRIENDICA_PHP_PATH=' . $data['config']['php_path'])); $this->assertTrue(putenv('FRIENDICA_ADMIN_MAIL=' . $data['config']['admin_email'])); $this->assertTrue(putenv('FRIENDICA_TZ=' . $data['system']['default_timezone'])); @@ -420,7 +480,7 @@ CONF; $txt = $this->dumpExecute($console); $this->assertFinished($txt, true); - $this->assertConfig($data, true, true, false); + $this->assertConfig($data, true, true, false, true); } /** @@ -430,15 +490,13 @@ CONF; */ public function testWithEnvironmentWithoutSave(array $data) { - $this->app->shouldReceive('getURLPath')->andReturn('')->atLeast()->once(); - $this->mockConnect(true, 1); $this->mockConnected(true, 1); $this->mockExistsTable('user', false, 1); $this->mockUpdate([$this->root->url(), false, true, true], null, 1); $this->mockGetMarkupTemplate('local.config.tpl', 'testTemplate', 1); - $this->mockReplaceMacros('testTemplate', \Mockery::any(), '', 1); + $this->mockReplaceMacros('testTemplate', \Mockery::any(), false, '', 1); $this->assertTrue(putenv('MYSQL_HOST=' . $data['database']['hostname'])); $this->assertTrue(putenv('MYSQL_PORT=' . $data['database']['port'])); @@ -446,18 +504,20 @@ CONF; $this->assertTrue(putenv('MYSQL_USERNAME=' . $data['database']['username'])); $this->assertTrue(putenv('MYSQL_PASSWORD=' . $data['database']['password'])); - $this->assertTrue(putenv('FRIENDICA_URL_PATH=' . $data['system']['urlpath'])); - $this->assertTrue(putenv('FRIENDICA_PHP_PATH=' . $data['config']['php_path'])); + $this->assertTrue(putenv('FRIENDICA_HOSTNAME=' . $data['config']['hostname'])); + $this->assertTrue(putenv('FRIENDICA_BASE_PATH=' . $data['system']['basepath'])); + $this->assertTrue(putenv('FRIENDICA_URL=' . $data['system']['url'])); + $this->assertTrue(putenv('FRIENDICA_PHP_PATH=' . $data['config']['php_path'])); $this->assertTrue(putenv('FRIENDICA_ADMIN_MAIL=' . $data['config']['admin_email'])); - $this->assertTrue(putenv('FRIENDICA_TZ=' . $data['system']['default_timezone'])); - $this->assertTrue(putenv('FRIENDICA_LANG=' . $data['system']['language'])); + $this->assertTrue(putenv('FRIENDICA_TZ=' . $data['system']['default_timezone'])); + $this->assertTrue(putenv('FRIENDICA_LANG=' . $data['system']['language'])); $console = new AutomaticInstallation($this->consoleArgv); $txt = $this->dumpExecute($console); $this->assertFinished($txt, true); - $this->assertConfig($data, false, true); + $this->assertConfig($data, false, true, false, true); } /** @@ -466,15 +526,13 @@ CONF; */ public function testWithArguments(array $data) { - $this->app->shouldReceive('getURLPath')->andReturn('')->atLeast()->once(); - $this->mockConnect(true, 1); $this->mockConnected(true, 1); $this->mockExistsTable('user', false, 1); $this->mockUpdate([$this->root->url(), false, true, true], null, 1); $this->mockGetMarkupTemplate('local.config.tpl', 'testTemplate', 1); - $this->mockReplaceMacros('testTemplate', \Mockery::any(), '', 1); + $this->mockReplaceMacros('testTemplate', \Mockery::any(), false, '', 1); $console = new AutomaticInstallation($this->consoleArgv); @@ -483,21 +541,22 @@ CONF; $console->setOption($var, $data[$cat][$key]); } }; - $option('dbhost' , 'database', 'hostname'); - $option('dbport' , 'database', 'port'); - $option('dbuser' , 'database', 'username'); - $option('dbpass' , 'database', 'password'); - $option('dbdata' , 'database', 'database'); - $option('urlpath' , 'system' , 'urlpath'); - $option('phppath' , 'config' , 'php_path'); - $option('admin' , 'config' , 'admin_email'); - $option('tz' , 'system' , 'default_timezone'); - $option('lang' , 'system' , 'language'); + $option('dbhost' , 'database', 'hostname'); + $option('dbport' , 'database', 'port'); + $option('dbuser' , 'database', 'username'); + $option('dbpass' , 'database', 'password'); + $option('dbdata' , 'database', 'database'); + $option('url' , 'system' , 'url'); + $option('phppath' , 'config' , 'php_path'); + $option('admin' , 'config' , 'admin_email'); + $option('tz' , 'system' , 'default_timezone'); + $option('lang' , 'system' , 'language'); + $option('basepath' , 'system' , 'basepath'); $txt = $this->dumpExecute($console); $this->assertFinished($txt, true); - $this->assertConfig($data, true, true, true); + $this->assertConfig($data, true, true, true, true); } /** @@ -505,20 +564,20 @@ CONF; */ public function testNoDatabaseConnection() { - $this->app->shouldReceive('getURLPath')->andReturn('')->atLeast()->once(); $this->mockConnect(false, 1); $this->mockGetMarkupTemplate('local.config.tpl', 'testTemplate', 1); - $this->mockReplaceMacros('testTemplate', \Mockery::any(), '', 1); + $this->mockReplaceMacros('testTemplate', \Mockery::any(), false, '', 1); $console = new AutomaticInstallation($this->consoleArgv); + $console->setOption('url', 'http://friendica.local'); $txt = $this->dumpExecute($console); $this->assertStuckDB($txt); $this->assertTrue($this->root->hasChild('config' . DIRECTORY_SEPARATOR . 'local.config.php')); - $this->assertConfig(null, false, true, false); + $this->assertConfig(['config' => ['hostname' => 'friendica.local'], 'system' => ['url' => 'http://friendica.local', 'ssl_policy' => 0, 'urlpath' => '']], false, true, false, true); } public function testGetHelp() @@ -540,17 +599,17 @@ Options -v Show more debug information. -a All setup checks are required (except .htaccess) -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) - -d|--dbdata The name of the mysql/mariadb database (env MYSQL_DATABASE) - -U|--dbuser The username of the mysql/mariadb database login (env MYSQL_USER or MYSQL_USERNAME) - -P|--dbpass The password of the mysql/mariadb database login (env MYSQL_PASSWORD) - -u|--urlpath The URL path of Friendica - f.e. '/friendica' (env FRIENDICA_URL_PATH) - -b|--phppath The path of the PHP binary (env FRIENDICA_PHP_PATH) - -A|--admin The admin email address of Friendica (env FRIENDICA_ADMIN_MAIL) - -T|--tz The timezone of Friendica (env FRIENDICA_TZ) - -L|--lang The language of Friendica (env FRIENDICA_LANG) + -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) + -d|--dbdata The name of the mysql/mariadb database (env MYSQL_DATABASE) + -U|--dbuser The username of the mysql/mariadb database login (env MYSQL_USER or MYSQL_USERNAME) + -P|--dbpass The password of the mysql/mariadb database login (env MYSQL_PASSWORD) + -U|--url The full base URL of Friendica - f.e. 'https://friendica.local/sub' (env FRIENDICA_URL) + -B|--phppath The path of the PHP binary (env FRIENDICA_PHP_PATH) + -b|--basepath The basepath of Friendica (env FRIENDICA_BASE_PATH) + -t|--tz The timezone of Friendica (env FRIENDICA_TZ) + -L|--lang The language of Friendica (env FRIENDICA_LANG) Environment variables MYSQL_HOST The host of the mysql/mariadb database (mandatory if mysql and environment is used) @@ -558,8 +617,9 @@ Environment variables MYSQL_USERNAME|MYSQL_USER The username of the mysql/mariadb database login (MYSQL_USERNAME is for mysql, MYSQL_USER for mariadb) MYSQL_PASSWORD The password of the mysql/mariadb database login MYSQL_DATABASE The name of the mysql/mariadb database - FRIENDICA_URL_PATH The URL path of Friendica (f.e. '/friendica') - FRIENDICA_PHP_PATH The path of the PHP binary + FRIENDICA_URL The full base URL of Friendica - f.e. 'https://friendica.local/sub' + FRIENDICA_PHP_PATH The path of the PHP binary - leave empty for auto detection + FRIENDICA_BASE_PATH The basepath of Friendica - leave empty for auto detection FRIENDICA_ADMIN_MAIL The admin email address of Friendica (this email will be used for admin access) FRIENDICA_TZ The timezone of Friendica FRIENDICA_LANG The langauge of Friendica