import "../setup.ts"; import { assertEquals } from "@std/assert"; import { DatabaseSync } from "node:sqlite"; import { runMigrations } from "../../db/migrate.ts"; const SCHEMA = Deno.readTextFileSync( new URL("../../db/schema.sql", import.meta.url), ); function freshDb(): DatabaseSync { const db = new DatabaseSync(":memory:"); db.exec(SCHEMA); return db; } function schemaOf(db: DatabaseSync): string[] { return (db.prepare( `SELECT sql FROM sqlite_master WHERE sql IS NOT NULL AND name != 'schema_migrations' ORDER BY name;`, ).all() as { sql: string }[]).map((r) => r.sql); } Deno.test("runMigrations: a fresh database is left as schema.sql made it", () => { const db = freshDb(); const before = schemaOf(db); runMigrations(db); assertEquals(schemaOf(db), before); const applied = db.prepare(`SELECT COUNT(*) as n FROM schema_migrations;`) .get() as { n: number; }; assertEquals(applied.n, 19); // Running again applies nothing. runMigrations(db); assertEquals( (db.prepare(`SELECT COUNT(*) as n FROM schema_migrations;`).get() as { n: number; }).n, 19, ); db.close(); });