fixing auto install tests

This commit is contained in:
Philipp Holzer 2019-04-13 21:59:05 +02:00
parent 677cb205f5
commit 3a0664d827
No known key found for this signature in database
GPG key ID: 517BE60E2CE5C8A5
5 changed files with 47 additions and 48 deletions

View file

@ -166,8 +166,6 @@ HELP;
} }
$installer->createConfig($configCache); $installer->createConfig($configCache);
return 1;
} }
$this->out(" Complete!\n\n"); $this->out(" Complete!\n\n");

View file

@ -142,8 +142,6 @@ class Installer
$url = $configCache->get('system', 'url'); $url = $configCache->get('system', 'url');
print_r("URL - " . $url . PHP_EOL);
$tpl = Renderer::getMarkupTemplate('local.config.tpl'); $tpl = Renderer::getMarkupTemplate('local.config.tpl');
$txt = Renderer::replaceMacros($tpl, [ $txt = Renderer::replaceMacros($tpl, [
'$dbhost' => $configCache->get('database', 'hostname'), '$dbhost' => $configCache->get('database', 'hostname'),

View file

@ -69,6 +69,9 @@ trait AppMockTrait
$this->app $this->app
->shouldReceive('getConfigCache') ->shouldReceive('getConfigCache')
->andReturn($this->configMock); ->andReturn($this->configMock);
$this->app
->shouldReceive('getConfig')
->andReturn($config);
$this->app $this->app
->shouldReceive('getTemplateEngine') ->shouldReceive('getTemplateEngine')
->andReturn(new FriendicaSmartyEngine()); ->andReturn(new FriendicaSmartyEngine());

View file

@ -15,9 +15,9 @@ trait RendererMockTrait
/** /**
* Mocking the method 'Renderer::getMarkupTemplate()' * Mocking the method 'Renderer::getMarkupTemplate()'
* *
* @param string $templateName The name of the template which should get * @param string $templateName The name of the template which should get
* @param string $return the return value of the mock (should be defined to have it later for followUp use) * @param string $return the return value of the mock (should be defined to have it later for followUp use)
* @param null|int $times How often the method will get used * @param null|int $times How often the method will get used
*/ */
public function mockGetMarkupTemplate($templateName, $return = '', $times = null) public function mockGetMarkupTemplate($templateName, $return = '', $times = null)
{ {
@ -35,12 +35,13 @@ trait RendererMockTrait
/** /**
* Mocking the method 'Renderer::replaceMacros()' * Mocking the method 'Renderer::replaceMacros()'
* *
* @param string $template The template to use (normally, it is the mock result of 'mockGetMarkupTemplate()' * @param string $template The template to use (normally, it is the mock result of 'mockGetMarkupTemplate()'
* @param array|\Closure|null $args The arguments to pass to the macro * @param array|\Closure|null $args The arguments to pass to the macro
* @param string $return the return value of the mock * @param bool $overwriteURL if the URL should get overwritten
* @param null|int $times How often the method will get used * @param string $return the return value of the mock
* @param null|int $times How often the method will get used
*/ */
public function mockReplaceMacros($template, $args = null, $return = '', $times = null) public function mockReplaceMacros($template, $args = null, $overwriteURL = true, $return = '', $times = null)
{ {
if (!isset($this->rendererMock)) { if (!isset($this->rendererMock)) {
$this->rendererMock = \Mockery::mock('alias:' . Renderer::class); $this->rendererMock = \Mockery::mock('alias:' . Renderer::class);
@ -50,10 +51,18 @@ trait RendererMockTrait
$args = []; $args = [];
} }
$this->rendererMock if ($overwriteURL) {
->shouldReceive('replaceMacros') $this->rendererMock
->with($template, $args) ->shouldReceive('replaceMacros')
->times($times) ->with($template, $args)
->andReturn($return); ->times($times)
->andReturn($return);
} else {
$this->rendererMock
->shouldReceive('replaceMacros')
->with($template, $args, false)
->times($times)
->andReturn($return);
}
} }
} }

View file

@ -10,13 +10,12 @@ use Friendica\Test\Util\DBAMockTrait;
use Friendica\Test\Util\DBStructureMockTrait; use Friendica\Test\Util\DBStructureMockTrait;
use Friendica\Test\Util\L10nMockTrait; use Friendica\Test\Util\L10nMockTrait;
use Friendica\Test\Util\RendererMockTrait; use Friendica\Test\Util\RendererMockTrait;
use Friendica\Util\BaseURL;
use Friendica\Util\Logger\VoidLogger; use Friendica\Util\Logger\VoidLogger;
use org\bovigo\vfs\vfsStream; use org\bovigo\vfs\vfsStream;
use org\bovigo\vfs\vfsStreamFile; use org\bovigo\vfs\vfsStreamFile;
/** /**
* @runTestsInSeparateProcesses
* @preserveGlobalState disabled
* @requires PHP 7.0 * @requires PHP 7.0
*/ */
class AutomaticInstallationConsoleTest extends ConsoleTest class AutomaticInstallationConsoleTest extends ConsoleTest
@ -104,7 +103,7 @@ class AutomaticInstallationConsoleTest extends ConsoleTest
'basepath' => '', 'basepath' => '',
'urlpath' => '', 'urlpath' => '',
'url' => 'http://friendica.local', 'url' => 'http://friendica.local',
'ssl_policy' => '', 'ssl_policy' => 0,
'default_timezone' => '', 'default_timezone' => '',
'language' => '', 'language' => '',
], ],
@ -253,7 +252,7 @@ FIN;
$this->assertEquals($finished, $txt); $this->assertEquals($finished, $txt);
} }
private function assertStuckHostnam($txt) private function assertStuckURL($txt)
{ {
$finished = <<<FIN $finished = <<<FIN
Initializing setup... Initializing setup...
@ -270,7 +269,7 @@ Checking environment...
Creating config file... Creating config file...
The Friendica hostname has to be set during CLI installation. The Friendica URL has to be set during CLI installation.
FIN; FIN;
@ -326,7 +325,7 @@ FIN;
$this->assertConfigEntry('system', 'language', $assertion, ($default) ? Installer::DEFAULT_LANG : null); $this->assertConfigEntry('system', 'language', $assertion, ($default) ? Installer::DEFAULT_LANG : null);
$this->assertConfigEntry('system', 'url', $assertion); $this->assertConfigEntry('system', 'url', $assertion);
$this->assertConfigEntry('system', 'urlpath', $assertion); $this->assertConfigEntry('system', 'urlpath', $assertion);
$this->assertConfigEntry('system', 'ssl_policy', $assertion, ($default) ? SSL_POLICY_NONE : null); $this->assertConfigEntry('system', 'ssl_policy', $assertion, ($default) ? BaseURL::DEFAULT_SSL_SCHEME : null);
$this->assertConfigEntry('system', 'basepath', ($realBasepath) ? $this->root->url() : $assertion); $this->assertConfigEntry('system', 'basepath', ($realBasepath) ? $this->root->url() : $assertion);
} }
@ -340,14 +339,14 @@ FIN;
$txt = $this->dumpExecute($console); $txt = $this->dumpExecute($console);
$this->assertStuckHostnam($txt); $this->assertStuckURL($txt);
} }
/** /**
* Test the automatic installation without any parameter/setting * Test the automatic installation without any parameter/setting
* except hostname * except URL
*/ */
public function testEmptyWithHostname() public function testEmptyWithURL()
{ {
$this->mockConnect(true, 1); $this->mockConnect(true, 1);
$this->mockConnected(true, 1); $this->mockConnected(true, 1);
@ -355,17 +354,17 @@ FIN;
$this->mockUpdate([$this->root->url(), false, true, true], null, 1); $this->mockUpdate([$this->root->url(), false, true, true], null, 1);
$this->mockGetMarkupTemplate('local.config.tpl', 'testTemplate', 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 = new AutomaticInstallation($this->consoleArgv);
$console->setOption('n', 'friendica.local'); $console->setOption('url', 'http://friendica.local');
$txt = $this->dumpExecute($console); $txt = $this->dumpExecute($console);
$this->assertFinished($txt, true, false); $this->assertFinished($txt, true, false);
$this->assertTrue($this->root->hasChild('config' . DIRECTORY_SEPARATOR . 'local.config.php')); $this->assertTrue($this->root->hasChild('config' . DIRECTORY_SEPARATOR . 'local.config.php'));
$this->assertConfig(['config' => ['hostname' => 'friendica.local'], 'system' => ['url' => 'http://friendica.local']], false, true, true, true); $this->assertConfig(['config' => ['hostname' => 'friendica.local'], 'system' => ['url' => 'http://friendica.local', 'ssl_policy' => 0, 'urlPath' => '']], false, true, true, true);
} }
/** /**
@ -457,7 +456,7 @@ CONF;
$this->mockUpdate([$this->root->url(), false, true, true], null, 1); $this->mockUpdate([$this->root->url(), false, true, true], null, 1);
$this->mockGetMarkupTemplate('local.config.tpl', 'testTemplate', 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_HOST=' . $data['database']['hostname']));
$this->assertTrue(putenv('MYSQL_PORT=' . $data['database']['port'])); $this->assertTrue(putenv('MYSQL_PORT=' . $data['database']['port']));
@ -467,12 +466,11 @@ CONF;
$this->assertTrue(putenv('FRIENDICA_HOSTNAME=' . $data['config']['hostname'])); $this->assertTrue(putenv('FRIENDICA_HOSTNAME=' . $data['config']['hostname']));
$this->assertTrue(putenv('FRIENDICA_BASE_PATH=' . $data['system']['basepath'])); $this->assertTrue(putenv('FRIENDICA_BASE_PATH=' . $data['system']['basepath']));
$this->assertTrue(putenv('FRIENDICA_URL_PATH=' . $data['system']['urlpath'])); $this->assertTrue(putenv('FRIENDICA_URL=' . $data['system']['url']));
$this->assertTrue(putenv('FRIENDICA_PHP_PATH=' . $data['config']['php_path'])); $this->assertTrue(putenv('FRIENDICA_PHP_PATH=' . $data['config']['php_path']));
$this->assertTrue(putenv('FRIENDICA_ADMIN_MAIL=' . $data['config']['admin_email'])); $this->assertTrue(putenv('FRIENDICA_ADMIN_MAIL=' . $data['config']['admin_email']));
$this->assertTrue(putenv('FRIENDICA_TZ=' . $data['system']['default_timezone'])); $this->assertTrue(putenv('FRIENDICA_TZ=' . $data['system']['default_timezone']));
$this->assertTrue(putenv('FRIENDICA_LANG=' . $data['system']['language'])); $this->assertTrue(putenv('FRIENDICA_LANG=' . $data['system']['language']));
$this->assertTrue(putenv('FRIENDICA_SSL_POLICY=' . $data['system']['ssl_policy']));
$console = new AutomaticInstallation($this->consoleArgv); $console = new AutomaticInstallation($this->consoleArgv);
$console->setOption('savedb', true); $console->setOption('savedb', true);
@ -496,7 +494,7 @@ CONF;
$this->mockUpdate([$this->root->url(), false, true, true], null, 1); $this->mockUpdate([$this->root->url(), false, true, true], null, 1);
$this->mockGetMarkupTemplate('local.config.tpl', 'testTemplate', 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_HOST=' . $data['database']['hostname']));
$this->assertTrue(putenv('MYSQL_PORT=' . $data['database']['port'])); $this->assertTrue(putenv('MYSQL_PORT=' . $data['database']['port']));
@ -506,12 +504,11 @@ CONF;
$this->assertTrue(putenv('FRIENDICA_HOSTNAME=' . $data['config']['hostname'])); $this->assertTrue(putenv('FRIENDICA_HOSTNAME=' . $data['config']['hostname']));
$this->assertTrue(putenv('FRIENDICA_BASE_PATH=' . $data['system']['basepath'])); $this->assertTrue(putenv('FRIENDICA_BASE_PATH=' . $data['system']['basepath']));
$this->assertTrue(putenv('FRIENDICA_URL_PATH=' . $data['system']['urlpath'])); $this->assertTrue(putenv('FRIENDICA_URL=' . $data['system']['url']));
$this->assertTrue(putenv('FRIENDICA_PHP_PATH=' . $data['config']['php_path'])); $this->assertTrue(putenv('FRIENDICA_PHP_PATH=' . $data['config']['php_path']));
$this->assertTrue(putenv('FRIENDICA_ADMIN_MAIL=' . $data['config']['admin_email'])); $this->assertTrue(putenv('FRIENDICA_ADMIN_MAIL=' . $data['config']['admin_email']));
$this->assertTrue(putenv('FRIENDICA_TZ=' . $data['system']['default_timezone'])); $this->assertTrue(putenv('FRIENDICA_TZ=' . $data['system']['default_timezone']));
$this->assertTrue(putenv('FRIENDICA_LANG=' . $data['system']['language'])); $this->assertTrue(putenv('FRIENDICA_LANG=' . $data['system']['language']));
$this->assertTrue(putenv('FRIENDICA_SSL_POLICY=' . $data['system']['ssl_policy']));
$console = new AutomaticInstallation($this->consoleArgv); $console = new AutomaticInstallation($this->consoleArgv);
@ -533,7 +530,7 @@ CONF;
$this->mockUpdate([$this->root->url(), false, true, true], null, 1); $this->mockUpdate([$this->root->url(), false, true, true], null, 1);
$this->mockGetMarkupTemplate('local.config.tpl', 'testTemplate', 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 = new AutomaticInstallation($this->consoleArgv);
@ -547,14 +544,12 @@ CONF;
$option('dbuser' , 'database', 'username'); $option('dbuser' , 'database', 'username');
$option('dbpass' , 'database', 'password'); $option('dbpass' , 'database', 'password');
$option('dbdata' , 'database', 'database'); $option('dbdata' , 'database', 'database');
$option('urlpath' , 'system' , 'urlpath'); $option('url' , 'system' , 'url');
$option('phppath' , 'config' , 'php_path'); $option('phppath' , 'config' , 'php_path');
$option('admin' , 'config' , 'admin_email'); $option('admin' , 'config' , 'admin_email');
$option('tz' , 'system' , 'default_timezone'); $option('tz' , 'system' , 'default_timezone');
$option('lang' , 'system' , 'language'); $option('lang' , 'system' , 'language');
$option('hostname' , 'config' , 'hostname');
$option('basepath' , 'system' , 'basepath'); $option('basepath' , 'system' , 'basepath');
$option('sslpolicy' , 'system' , 'ssl_policy');
$txt = $this->dumpExecute($console); $txt = $this->dumpExecute($console);
@ -570,17 +565,17 @@ CONF;
$this->mockConnect(false, 1); $this->mockConnect(false, 1);
$this->mockGetMarkupTemplate('local.config.tpl', 'testTemplate', 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 = new AutomaticInstallation($this->consoleArgv);
$console->setOption('n', 'friendica.local'); $console->setOption('url', 'http://friendica.local');
$txt = $this->dumpExecute($console); $txt = $this->dumpExecute($console);
$this->assertStuckDB($txt); $this->assertStuckDB($txt);
$this->assertTrue($this->root->hasChild('config' . DIRECTORY_SEPARATOR . 'local.config.php')); $this->assertTrue($this->root->hasChild('config' . DIRECTORY_SEPARATOR . 'local.config.php'));
$this->assertConfig(['config' => ['hostname' => 'friendica.local'], 'system' => ['url' => 'http://friendica.local']], false, true, false, true); $this->assertConfig(['config' => ['hostname' => 'friendica.local'], 'system' => ['url' => 'http://friendica.local', 'ssl_policy' => 0, 'urlpath' => '']], false, true, false, true);
} }
public function testGetHelp() public function testGetHelp()
@ -608,11 +603,9 @@ Options
-d|--dbdata <database> The name of the mysql/mariadb database (env MYSQL_DATABASE) -d|--dbdata <database> The name of the mysql/mariadb database (env MYSQL_DATABASE)
-U|--dbuser <username> The username of the mysql/mariadb database login (env MYSQL_USER or MYSQL_USERNAME) -U|--dbuser <username> The username of the mysql/mariadb database login (env MYSQL_USER or MYSQL_USERNAME)
-P|--dbpass <password> The password of the mysql/mariadb database login (env MYSQL_PASSWORD) -P|--dbpass <password> The password of the mysql/mariadb database login (env MYSQL_PASSWORD)
-U|--urlpath <url_path> The URL path of Friendica - f.e. '/friendica' (env FRIENDICA_URL_PATH) -U|--url <url> The full base URL of Friendica - f.e. 'https://friendica.local/sub' (env FRIENDICA_URL)
-B|--phppath <php_path> The path of the PHP binary (env FRIENDICA_PHP_PATH) -B|--phppath <php_path> The path of the PHP binary (env FRIENDICA_PHP_PATH)
-b|--basepath <base_path> The basepath of Friendica(env FRIENDICA_BASE_PATH) -b|--basepath <base_path> The basepath of Friendica(env FRIENDICA_BASE_PATH)
-S|--sslpolicy <ssl_policy> The SSL policy of Friendica (env FRIENDICA_SSL_POLICY)
-n|--hostname <hostname> The hostname of Friendica (env FRIENDICA_PHP_HOSTNAME)
-t|--tz <timezone> The timezone of Friendica (env FRIENDICA_TZ) -t|--tz <timezone> The timezone of Friendica (env FRIENDICA_TZ)
-L|--lang <language> The language of Friendica (env FRIENDICA_LANG) -L|--lang <language> The language of Friendica (env FRIENDICA_LANG)
@ -622,12 +615,10 @@ Environment variables
MYSQL_USERNAME|MYSQL_USER The username of the mysql/mariadb database login (MYSQL_USERNAME is for mysql, MYSQL_USER for mariadb) 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_PASSWORD The password of the mysql/mariadb database login
MYSQL_DATABASE The name of the mysql/mariadb database MYSQL_DATABASE The name of the mysql/mariadb database
FRIENDICA_URL_PATH The URL path of Friendica (f.e. '/friendica') - leave empty for auto detection 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_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_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_ADMIN_MAIL The admin email address of Friendica (this email will be used for admin access)
FRIENDICA_SSL_POLICY The SSL policy of Friendica (default is NO SSL)
FRIENDICA_HOSTNAME The hostname of Friendica - leave empty for auto detection
FRIENDICA_TZ The timezone of Friendica FRIENDICA_TZ The timezone of Friendica
FRIENDICA_LANG The langauge of Friendica FRIENDICA_LANG The langauge of Friendica