Skip to content

Commit

Permalink
fix installationtest
Browse files Browse the repository at this point in the history
  • Loading branch information
TonisOrmisson committed Jan 11, 2018
1 parent 426c906 commit 5dfa1b1
Showing 1 changed file with 163 additions and 45 deletions.
208 changes: 163 additions & 45 deletions tests/acceptance/admin/InstallationControllerTest.php
Expand Up @@ -13,63 +13,181 @@

namespace LimeSurvey\tests\acceptance\admin;

use Facebook\WebDriver\WebDriverBy;
use LimeSurvey\tests\TestBaseClassWeb;
use LimeSurvey\tests\DummyController;
use LimeSurvey\tests\TestBaseClass;

/**
* @since 2017-10-15
* @group tempcontr
* @group template
* @since 2017-11-24
* @group inst
*/
class TemplateControllerTest extends TestBaseClass
class InstallationControllerTest extends TestBaseClassWeb
{
/**
* Test copy a template.
* @group copytemplate
*
*/
public function testCopyTemplate()
public static function setupBeforeClass()
{
\Yii::app()->session['loginID'] = 1;
\Yii::import('application.controllers.admin.themes', true);
\Yii::import('application.helpers.globalsettings_helper', true);
// Clean up from last test.
$templateName = 'foobartest';
\TemplateConfiguration::uninstall($templateName);
\Template::model()->deleteAll('name = \'foobartest\'');
\Permission::model()->deleteAllByAttributes(array('permission' => $templateName,'entity' => 'template'));
// Remove folder from last test.
$newname = 'foobartest';
$newdirname = \Yii::app()->getConfig('userthemerootdir') . "/" . $newname;
if (file_exists($newdirname)) {
exec('rm -r ' . $newdirname);
// NB: Does not call parent, because there might not
// be a database (happens if this test is run multiple
// times with failures).
self::$testHelper = new TestHelper();
self::$webDriver = self::$testHelper->getWebDriver();
self::$domain = getenv('DOMAIN');
}
/**
*
*/
public static function teardownAfterClass()
{
$configFile = \Yii::app()->getBasePath() . '/config/config.php';
if (file_exists($configFile)) {
self::$testHelper->connectToOriginalDatabase();
}
$config = require(\Yii::app()->getBasePath() . '/config/config-defaults.php');
// Simulate a POST.
$_POST['newname'] = $newname;
// NB: If default theme is not installed, this test will fail.
$_POST['copydir'] = $config['defaulttheme'];
$_SERVER['SERVER_NAME'] = 'localhost';
$contr = new \themes(new \ls\tests\DummyController('dummyid'));
$contr->templatecopy();
$flashes = \Yii::app()->user->getFlashes();
$this->assertEmpty($flashes, 'No flash messages');
$template = \Template::model()->find(
sprintf(
'name = \'%s\'',
$templateName
)
);
$this->assertNotEmpty($template);
$this->assertEquals($templateName, $template->name);
// Clean up.
\Template::model()->deleteAll('name = \'foobartest\'');
}
/**
* @todo Copy template folder that does not exist.
*
* @throws \CException
*/
/*
public function testCopyWrongFolder()
public function testBasic()
{
//$this->checkFolders();
$configFile = \Yii::app()->getBasePath() . '/config/config.php';
$databaseName = 'limesurvey';
$username = getenv('ADMINUSERNAME');
if (!$username) {
$username = 'admin';
}
$password = getenv('PASSWORD');
if (!$password) {
$password = 'password';
}
$dbuser = getenv('DBUSER');
if (!$dbuser) {
$dbuser = 'root';
echo 'Default to database user "root". Use DBUSER=... from command-line to override this.' . PHP_EOL;
}
$dbpwd = getenv('DBPASSWORD');
if (!$dbpwd) {
$dbpwd = '';
echo 'Default to empty database password. Use DBPASSWORD=... from command-line to override this.' . PHP_EOL;
}
if (file_exists($configFile)) {
// Delete possible previous database.
try {
$dbo = \Yii::app()->getDb();
$dbo->createCommand('DROP DATABASE ' . $databaseName)->execute();
} catch (\CDbException $ex) {
$msg = $ex->getMessage();
// Only this error is OK.
self::assertTrue(
strpos($msg, "database doesn't exist") !== false,
'Could drop database. Error message: ' . $msg
);
}
// Remove config.php if present.
$result = unlink($configFile);
$this->assertTrue($result, 'Could unlink config.php');
}
// Run installer.
$urlMan = \Yii::app()->urlManager;
$urlMan->setBaseUrl('http://' . self::$domain . '/index.php');
$url = $urlMan->createUrl('');
try {
// Installer start page.
self::$webDriver->get($url);
// Click "Start installation".
$start = self::$webDriver->findElement(WebDriverBy::id('ls-start-installation'));
$start->click();
// Accept license.
$accept = self::$webDriver->findElement(WebDriverBy::id('ls-accept-license'));
$accept->click();
// Click next at pre-check.
$next = self::$webDriver->findElement(WebDriverBy::id('ls-next'));
$next->click();
// Fill in database form.
$dbuserDbType = self::$webDriver->findElement(WebDriverBy::cssSelector('select[name="InstallerConfigForm[dbtype]"] option[value="mysql"]'));
$dbuserInput = self::$webDriver->findElement(WebDriverBy::cssSelector('input[name="InstallerConfigForm[dbuser]"]'));
$dbpwdInput = self::$webDriver->findElement(WebDriverBy::cssSelector('input[name="InstallerConfigForm[dbpwd]"]'));
$dbnameInput = self::$webDriver->findElement(WebDriverBy::cssSelector('input[name="InstallerConfigForm[dbname]"]'));

$dbuserDbType->click();
$dbuserInput->clear()->sendKeys($dbuser);
$dbpwdInput->clear()->sendKeys($dbpwd);
$dbnameInput->sendKeys($databaseName);
// Click next.
$next = self::$webDriver->findElement(WebDriverBy::id('ls-next'));
$next->click();
// Click "Create database".
$button = self::$webDriver->findElement(WebDriverBy::cssSelector('input[type="submit"]'));
$button->click();
// Click "Populate".
$button = self::$webDriver->findElement(WebDriverBy::cssSelector('input[type="submit"]'));
$button->click();
// Fill in admin username/password.
$adminLoginName = self::$webDriver->findElement(WebDriverBy::cssSelector('input[name="InstallerConfigForm[adminLoginName]"]'));
$adminLoginPwd = self::$webDriver->findElement(WebDriverBy::cssSelector('input[name="InstallerConfigForm[adminLoginPwd]"]'));
$confirmPwd = self::$webDriver->findElement(WebDriverBy::cssSelector('input[name="InstallerConfigForm[confirmPwd]"]'));
$adminLoginName->clear()->sendKeys($username);
$adminLoginPwd->clear()->sendKeys($password);
$confirmPwd->clear()->sendKeys($password);
// Confirm optional settings (admin password etc).
$button = self::$webDriver->findElement(WebDriverBy::cssSelector('input[type="submit"]'));
$button->click();
// Go to administration.
$button = self::$webDriver->findElement(WebDriverBy::id('ls-administration'));
$button->click();
// Set debug=2
/* TODO: Can't write to config.php after installation.
$configFile = \Yii::app()->getBasePath() . '/config/config.php';
$data = file($configFile);
$data = array_map(function($data) {
return stristr($data, "'debug'=>0") ? "'debug'=>2," : $data;
}, $data);
$output = [];
exec('chmod 777 ' . $configFile, $output);
var_dump($output);
$result = file_put_contents($configFile, implode('', $data));
$this->assertTrue($result > 0, 'Wrote config');
*/
// Reset urlManager to adapt to latest config.
$config = require($configFile);
$urlMan = \Yii::app()->urlManager;
$urlMan->setUrlFormat($config['components']['urlManager']['urlFormat']);
// Login.
self::adminLogin($username, $password);
} catch (NoSuchElementException $ex) {
self::$testHelper->takeScreenshot(self::$webDriver, (new \ReflectionClass($this))->getShortName() . '_' . __FUNCTION__);
$this->assertFalse(
true,
self::$testHelper->javaTrace($ex)
);
}
}
/**
* Check that upload/tmp folders are writable.
* @todo Does not work.
*/
public function checkFolders()
{
$instContr = new \InstallerController('dummyvalue');
$data = [];
$folder = \Yii::app()->getConfig('tempdir') . '/';
$tempdirIsWritable = $instContr->checkDirectoryWriteable(
$folder,
$data,
'tmpdir',
'tperror',
true
);
$this->assertTrue($tempdirIsWritable, 'Can write to tmp/');
$folder = \Yii::app()->getConfig('uploaddir') . '/';
$uploadIsWritable = $instContr->checkDirectoryWriteable(
$folder,
$data,
'uploaddir',
'uerror',
true
);
$this->assertTrue($uploadIsWritable, 'Can write to upload/');
}
}

0 comments on commit 5dfa1b1

Please sign in to comment.