first commit
This commit is contained in:
42
tests/Kernel/DatabaseReadinessTest.php
Normal file
42
tests/Kernel/DatabaseReadinessTest.php
Normal file
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Tests\Kernel;
|
||||
|
||||
use Netig\Netslim\Kernel\Persistence\Infrastructure\DatabaseNotProvisionedException;
|
||||
use Netig\Netslim\Kernel\Persistence\Infrastructure\DatabaseReadiness;
|
||||
use PDO;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
final class DatabaseReadinessTest extends TestCase
|
||||
{
|
||||
public function testAssertProvisionedFailsWhenModuleTablesAreMissing(): void
|
||||
{
|
||||
$db = new PDO('sqlite::memory:');
|
||||
$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 = new PDO('sqlite::memory:');
|
||||
|
||||
$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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user