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(); });