42 lines
1.1 KiB
TypeScript
42 lines
1.1 KiB
TypeScript
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, 21);
|
|
// Running again applies nothing.
|
|
runMigrations(db);
|
|
assertEquals(
|
|
(db.prepare(`SELECT COUNT(*) as n FROM schema_migrations;`).get() as {
|
|
n: number;
|
|
}).n,
|
|
21,
|
|
);
|
|
db.close();
|
|
});
|