Files
WRNexusJS/packages/db/test/seed.test.ts
T
Clintchiz 46195462c3
Quality / quality (ubuntu-latest) (push) Failing after 11m1s
Quality / quality (windows-latest) (push) Canceled after 0s
feat: make queues durable by default and add seed helpers
2026-08-23 09:50:25 +05:30

38 lines
1.4 KiB
TypeScript

import { expect, test } from "bun:test";
import type { Db } from "../src/driver.ts";
import { addSeedData, removeSeedData, runSeedQuery } from "../src/seed.ts";
function fakeDb() {
const calls: Array<{ sql: string; parameters: unknown[] }> = [];
const db = {
exec: async (sql: string, parameters: unknown[] = []) => {
calls.push({ sql, parameters });
return { changes: 1 };
},
} as unknown as Db;
return { db, calls };
}
test("seed helpers parameterize object rows and removals", async () => {
const { db, calls } = fakeDb();
await addSeedData(db, [{ code: "free", credits: 10 }, { code: "pro", credits: 20 }], "plans", {
conflict: "ignore",
});
await removeSeedData(db, { code: "free" }, "plans");
expect(calls[0]).toEqual({
sql: "INSERT OR IGNORE INTO plans (code, credits) VALUES (?, ?)",
parameters: ["free", 10],
});
expect(calls[2]).toEqual({ sql: "DELETE FROM plans WHERE code = ?", parameters: ["free"] });
});
test("custom seed queries stay parameterized and unsafe identifiers are refused", async () => {
const { db, calls } = fakeDb();
await runSeedQuery(db, "UPDATE plans SET credits = ? WHERE code = ?", [50, "free"]);
expect(calls[0]?.parameters).toEqual([50, "free"]);
await expect(addSeedData(db, { id: 1 }, "plans; DROP TABLE plans")).rejects.toThrow(
"safe SQL identifier",
);
await expect(removeSeedData(db, {}, "plans")).rejects.toThrow("match fields");
});