26 lines
1.1 KiB
TypeScript
26 lines
1.1 KiB
TypeScript
import { expect, test } from "bun:test";
|
|
import { createDb, defineLedger, upsertSeedData } from "../src/index.ts";
|
|
import { sqlite } from "../src/adapters/sqlite.ts";
|
|
|
|
test("portable seed upserts and ledgers remove application boilerplate", async () => {
|
|
const db = createDb(sqlite(":memory:"));
|
|
await db.exec("CREATE TABLE plans (code TEXT PRIMARY KEY, credits INTEGER NOT NULL)");
|
|
await upsertSeedData(db, { code: "free", credits: 10 }, "plans", { key: "code" });
|
|
await upsertSeedData(db, { code: "free", credits: 20 }, "plans", { key: "code" });
|
|
expect((await db.one<{ credits: number }>("SELECT credits FROM plans"))?.credits).toBe(20);
|
|
await db.exec(
|
|
"CREATE TABLE ledger (id INTEGER PRIMARY KEY, user_id TEXT, delta INTEGER, kind TEXT, reason TEXT, ref TEXT)",
|
|
);
|
|
const ledger = defineLedger({
|
|
db: () => db,
|
|
table: "ledger",
|
|
subjectColumn: "user_id",
|
|
amountColumn: "delta",
|
|
});
|
|
await ledger.credit("u1", 10, "grant");
|
|
expect(await ledger.debit("u1", 4, "use")).toBe(true);
|
|
expect(await ledger.balance("u1")).toBe(6);
|
|
expect(await ledger.debit("u1", 7, "too much")).toBe(false);
|
|
await db.close();
|
|
});
|