Files
WRNexusJS/packages/db/test/ledger-seed.test.ts
T
Clintchiz 64ab20cc95
Quality / quality (ubuntu-latest) (push) Failing after 22s
Quality / quality (windows-latest) (push) Canceled after 0s
feat: add application productivity foundations
2026-08-23 11:13:03 +05:30

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