63 lines
2.0 KiB
PHP
63 lines
2.0 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Tests\Support;
|
|
|
|
use App\Database\ConnectionFactory;
|
|
use PDO;
|
|
|
|
final class TestDatabase
|
|
{
|
|
public static function create(): PDO
|
|
{
|
|
$dbName = getenv('DB_TEST_NAME') ?: (getenv('DB_NAME') ?: 'galaxyforge');
|
|
return ConnectionFactory::create($dbName);
|
|
}
|
|
|
|
public static function reset(PDO $pdo): void
|
|
{
|
|
$tables = [
|
|
'user_permission_overrides',
|
|
'user_roles',
|
|
'role_permissions',
|
|
'permissions',
|
|
'roles',
|
|
'build_jobs',
|
|
'planet_buildings',
|
|
'planets',
|
|
'users',
|
|
];
|
|
foreach ($tables as $table) {
|
|
$pdo->exec("DROP TABLE IF EXISTS {$table} CASCADE");
|
|
}
|
|
|
|
$migration = __DIR__ . '/../../db/migrations/001_init.sql';
|
|
$sql = file_get_contents($migration);
|
|
if ($sql === false) {
|
|
throw new \RuntimeException('Migration nicht lesbar.');
|
|
}
|
|
$pdo->exec($sql);
|
|
}
|
|
|
|
public static function seedMinimal(PDO $pdo): array
|
|
{
|
|
$pdo->exec("INSERT INTO roles (key, name) VALUES ('player', 'Spieler')");
|
|
$pdo->exec("INSERT INTO roles (key, name) VALUES ('admin', 'Admin')");
|
|
|
|
$pdo->exec("INSERT INTO permissions (key, module, description) VALUES ('planet.public.view', 'planet', 'Planet ansehen')");
|
|
$pdo->exec("INSERT INTO permissions (key, module, description) VALUES ('planet.admin.generate', 'planet', 'Planeten generieren')");
|
|
|
|
$pdo->exec("INSERT INTO role_permissions (role_id, permission_id)
|
|
SELECT r.id, p.id FROM roles r JOIN permissions p ON r.key = 'player' AND p.key = 'planet.public.view'");
|
|
|
|
$pdo->exec("INSERT INTO users (username, race_key) VALUES ('tester', 'human')");
|
|
$userId = (int)$pdo->query("SELECT id FROM users WHERE username = 'tester'")->fetchColumn();
|
|
|
|
$pdo->exec("INSERT INTO user_roles (user_id, role_id)
|
|
SELECT {$userId}, r.id FROM roles r WHERE r.key = 'player'");
|
|
|
|
return ['user_id' => $userId];
|
|
}
|
|
}
|