feat: add application productivity foundations
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
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();
|
||||
});
|
||||
Reference in New Issue
Block a user