43 lines
2.3 KiB
PHP
43 lines
2.3 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Tests\Kernel;
|
|
|
|
use Netig\Netslim\Kernel\Persistence\Infrastructure\DatabaseNotProvisionedException;
|
|
use Netig\Netslim\Kernel\Persistence\Infrastructure\DatabaseReadiness;
|
|
use PHPUnit\Framework\TestCase;
|
|
use Tests\Support\TestDatabaseFactory;
|
|
|
|
final class DatabaseReadinessTest extends TestCase
|
|
{
|
|
public function testAssertProvisionedFailsWhenModuleTablesAreMissing(): void
|
|
{
|
|
$db = TestDatabaseFactory::createInMemory();
|
|
$db->exec('CREATE TABLE migrations (id INTEGER PRIMARY KEY AUTOINCREMENT, version TEXT, run_at TEXT)');
|
|
|
|
$this->expectException(DatabaseNotProvisionedException::class);
|
|
$this->expectExceptionMessage('users');
|
|
|
|
DatabaseReadiness::assertProvisioned($db);
|
|
}
|
|
|
|
public function testAssertProvisionedAcceptsCompleteCoreSchema(): void
|
|
{
|
|
$db = TestDatabaseFactory::createInMemory();
|
|
|
|
$db->exec('CREATE TABLE migrations (id INTEGER PRIMARY KEY AUTOINCREMENT, version TEXT, run_at TEXT)');
|
|
$db->exec('CREATE TABLE users (id INTEGER PRIMARY KEY, username TEXT, email TEXT, password_hash TEXT, role TEXT, session_version INTEGER, created_at TEXT)');
|
|
$db->exec('CREATE TABLE password_resets (id INTEGER PRIMARY KEY, user_id INTEGER, token_hash TEXT, expires_at TEXT, used_at TEXT, created_at TEXT)');
|
|
$db->exec('CREATE TABLE rate_limits (scope TEXT, rate_key TEXT, attempts INTEGER, locked_until TEXT, updated_at TEXT)');
|
|
$db->exec('CREATE TABLE settings (setting_key TEXT PRIMARY KEY, setting_value TEXT, value_type TEXT, updated_at TEXT)');
|
|
$db->exec('CREATE TABLE audit_log (id INTEGER PRIMARY KEY, action TEXT, resource_type TEXT, resource_id TEXT, actor_user_id INTEGER, context_json TEXT, created_at TEXT)');
|
|
$db->exec('CREATE TABLE notification_dispatches (id INTEGER PRIMARY KEY, recipient TEXT, subject TEXT, template TEXT, status TEXT, notification_key TEXT, error_message TEXT, created_at TEXT, sent_at TEXT)');
|
|
$db->exec('CREATE TABLE categories (id INTEGER PRIMARY KEY, name TEXT, slug TEXT)');
|
|
$db->exec('CREATE TABLE media (id INTEGER PRIMARY KEY, filename TEXT, url TEXT, hash TEXT, user_id INTEGER, created_at TEXT)');
|
|
|
|
DatabaseReadiness::assertProvisioned($db);
|
|
$this->addToAssertionCount(1);
|
|
}
|
|
}
|