import { describe, expect, test } from "bun:test"; import { existsSync, mkdirSync, rmSync } from "node:fs"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { createDatabase } from "../../../src/server/db/connection"; import { createMemoryLogger } from "../../../src/server/logger"; function makeTempDir(): string { const dir = join(tmpdir(), `db-test-${Date.now()}-${Math.random().toString(36).slice(2)}`); mkdirSync(dir, { recursive: true }); return dir; } describe("数据库初始化", () => { test("创建数据库文件并设置 PRAGMA", () => { const dir = makeTempDir(); const logger = createMemoryLogger(); try { const db = createDatabase(dir, logger); const journalMode = db.query("PRAGMA journal_mode").get() as { journal_mode: string }; expect(journalMode.journal_mode).toBe("wal"); const foreignKeys = db.query("PRAGMA foreign_keys").get() as { foreign_keys: number }; expect(foreignKeys.foreign_keys).toBe(1); // PRAGMA busy_timeout was set (Bun SQLite may return different formats) const timeoutResult = db.query("PRAGMA busy_timeout").get() as Record; expect(timeoutResult).not.toBeNull(); db.close(); } finally { rmSync(dir, { force: true, recursive: true }); } }); test("在空数据目录中创建 alfred.db", () => { const dir = makeTempDir(); const logger = createMemoryLogger(); try { const db = createDatabase(dir, logger); db.close(); expect(existsSync(join(dir, "alfred.db"))).toBe(true); } finally { rmSync(dir, { force: true, recursive: true }); } }); test("数据库连接可执行查询", () => { const dir = makeTempDir(); const logger = createMemoryLogger(); try { const db = createDatabase(dir, logger); db.exec("CREATE TABLE test (id TEXT PRIMARY KEY)"); db.exec("INSERT INTO test (id) VALUES ('1')"); const row = db.query("SELECT id FROM test WHERE id = '1'").get() as { id: string }; expect(row.id).toBe("1"); db.close(); } finally { rmSync(dir, { force: true, recursive: true }); } }); });