integration test fix

This commit is contained in:
Yuri Kuznetsov
2023-02-28 11:59:31 +02:00
parent ed867d1b95
commit 01d5091aa3
2 changed files with 52 additions and 32 deletions

View File

@@ -306,8 +306,8 @@ class Tester
die("Permission denied for directory [".$this->installPath."].\n");
}
Utils::checkCreateDatabase($configData['database']);
$this->reset($fileManager, $latestEspoDir);
Utils::fixUndefinedVariables();
chdir($this->installPath);
@@ -327,6 +327,7 @@ class Tester
$installer->saveConfig($configData);
$this->createDatabase();
$this->dropTables();
$installer = new \Installer(); //reload installer to get all config data
@@ -334,6 +335,45 @@ class Tester
$installer->setSuccess();
}
private function createDatabase(): void
{
$app = new Application();
$databaseHelper = $app->getContainer()
->getByClass(InjectableFactory::class)
->create(DatabaseHelper::class);
$config = $app->getContainer()->getByClass(Config::class);
$pdo = $databaseHelper->getPDO();
$platform = $databaseHelper->getDbalConnection()->getDatabasePlatform();
$dbname = $config->get('database.dbname');
if (!$dbname) {
throw new \RuntimeException('No "dbname" in database config.');
}
$quotedDbname = $platform->quoteIdentifier($dbname);
$sql = "CREATE DATABASE IF NOT EXISTS {$quotedDbname}";
if ($config->get('database.platform') === 'Postgresql') {
$sqlCheck = "SELECT datname FROM pg_database WHERE datname = " . $platform->quoteStringLiteral($dbname);
$sth = $pdo->prepare($sqlCheck);
$sth->execute();
if ($sth->fetch()) {
return;
}
$sql = "CREATE DATABASE {$quotedDbname}";
}
$pdo->query($sql);
}
private function dropTables(): void
{
$app = new Application();
@@ -345,7 +385,17 @@ class Tester
$pdo = $databaseHelper->getPDO();
$platform = $databaseHelper->getDbalConnection()->getDatabasePlatform();
$rows = $pdo->query("SHOW TABLES");
$config = $app->getContainer()->getByClass(Config::class);
$showTablesSql = "SHOW TABLES";
if ($config->get('database.platform') === 'Postgresql') {
$showTablesSql =
"SELECT table_name FROM information_schema.tables " .
"WHERE table_schema='public' AND table_type='BASE TABLE'";
}
$rows = $pdo->query($showTablesSql);
while ($row = $rows->fetch(\PDO::FETCH_NUM)) {
$table = $row[0];

View File

@@ -29,9 +29,6 @@
namespace tests\integration\Core;
use Espo\Core\Exceptions\Error;
use PDO;
class Utils
{
/**
@@ -139,31 +136,4 @@ class Utils
}
}
}
public static function checkCreateDatabase(array $databaseParams): void
{
if (!isset($databaseParams['dbname'])) {
throw new \RuntimeException('Option "dbname" is not found.');
}
$dbname = $databaseParams['dbname'];
unset($databaseParams['dbname']);
$sql = "CREATE DATABASE IF NOT EXISTS `{$dbname}`";
$pdo = static::createPdoConnection($databaseParams);
$pdo->query($sql);
}
private static function createPdoConnection(array $params): PDO
{
$platform = !empty($params['platform']) ? strtolower($params['platform']) : 'mysql';
$port = empty($params['port']) ? '' : ';port=' . $params['port'];
$dbname = empty($params['dbname']) ? '' : ';dbname=' . $params['dbname'];
$dsn = $platform . ':host=' . $params['host'] . $port . $dbname;
return new PDO($dsn, $params['user'], $params['password']);
}
}