53 lines
1.9 KiB
TypeScript
53 lines
1.9 KiB
TypeScript
import { describe, it, expect } from "vitest";
|
|
import Database from "better-sqlite3";
|
|
import { initSchema } from "./schema";
|
|
|
|
describe("initSchema", () => {
|
|
it("should create all 12 tables", () => {
|
|
const db = new Database(":memory:");
|
|
initSchema(db);
|
|
const tables = db
|
|
.prepare(
|
|
"SELECT name FROM sqlite_master WHERE type='table' ORDER BY name"
|
|
)
|
|
.all() as { name: string }[];
|
|
const tableNames = tables.map((t) => t.name);
|
|
expect(tableNames).toContain("modules");
|
|
expect(tableNames).toContain("files");
|
|
expect(tableNames).toContain("symbols");
|
|
expect(tableNames).toContain("calls");
|
|
expect(tableNames).toContain("file_imports");
|
|
expect(tableNames).toContain("module_deps");
|
|
expect(tableNames).toContain("tech_tags");
|
|
expect(tableNames).toContain("symbol_tech_tags");
|
|
expect(tableNames).toContain("permissions");
|
|
expect(tableNames).toContain("routes");
|
|
expect(tableNames).toContain("db_tables");
|
|
expect(tableNames).toContain("scan_meta");
|
|
});
|
|
|
|
it("should create all indexes", () => {
|
|
const db = new Database(":memory:");
|
|
initSchema(db);
|
|
const indexes = db
|
|
.prepare(
|
|
"SELECT name FROM sqlite_master WHERE type='index' AND name LIKE 'idx_%' ORDER BY name"
|
|
)
|
|
.all() as { name: string }[];
|
|
const indexNames = indexes.map((i) => i.name);
|
|
expect(indexNames).toContain("idx_symbols_file");
|
|
expect(indexNames).toContain("idx_symbols_name");
|
|
expect(indexNames).toContain("idx_calls_caller");
|
|
expect(indexNames).toContain("idx_calls_callee");
|
|
expect(indexNames).toContain("idx_file_imports_source");
|
|
expect(indexNames).toContain("idx_file_imports_target");
|
|
expect(indexNames).toContain("idx_symbol_tech_tags_tag");
|
|
});
|
|
|
|
it("should be idempotent", () => {
|
|
const db = new Database(":memory:");
|
|
expect(() => initSchema(db)).not.toThrow();
|
|
expect(() => initSchema(db)).not.toThrow();
|
|
});
|
|
});
|