Files
WRNexusJS/packages/metering/test/metering.test.ts
T
Clintchiz 2e12656060
Quality / quality (ubuntu-latest) (push) Failing after 9m56s
Quality / quality (windows-latest) (push) Canceled after 0s
feat: close application architecture gaps
2026-08-23 11:45:57 +05:30

43 lines
1.3 KiB
TypeScript

import { expect, test } from "bun:test";
import { defineEntitlements, defineMeter, definePacks } from "../src/index.ts";
test("resolves fallback entitlements and features", async () => {
const entitlements = defineEntitlements({
plans: () => [
{ code: "free", name: "Free", features: [], allowance: 10 },
{ code: "pro", name: "Pro", features: ["schedule"], allowance: 100 },
],
subscriptionFor: async () => "pro",
fallback: "free",
});
expect(await entitlements.enabled("u1", "schedule")).toBe(true);
expect(await entitlements.allowance("u1")).toBe(100);
});
test("packs are immutable and selected only by code", () => {
const packs = definePacks([{ code: "small", units: 100, label: "Small" }]);
expect(packs.get("constructor")).toBeUndefined();
expect(packs.get("small")?.units).toBe(100);
});
test("meter distinguishes refusals from storage faults", async () => {
const meter = defineMeter({
store: {
balance: async () => 5,
reserve: async (_subject, units) => units <= 5,
write: async () => {
throw new Error("offline");
},
},
});
expect(await meter.reserve("u1", 6, "send")).toEqual({
ok: false,
reason: "insufficient balance",
});
expect(await meter.grant("u1", 5, "plan")).toEqual({
ok: false,
reason: "offline",
fault: true,
});
});