68 lines · 2.3 KB
import { beforeEach, describe, expect, mock, test } from "bun:test";
import { Database } from "bun:sqlite";
import { readFileSync } from "node:fs";
import { fakeD1 } from "./fake-d1.test-helper";

let d1 = fakeD1();
mock.module("cloudflare:workers", () => ({
  env: {
    get DB() {
      return d1.binding;
    },
  },
  waitUntil: () => undefined,
}));
const { ACCOUNT_SCHEMA } = await import("../scoped-db/schema.gen");
const { leaderboardRows, publishUsageLeaderboard } = await import("./leaderboard");

const NOW = Date.parse("2026-10-01T00:03:00Z");

function account(id: string, usage: Array<[string, string, number]>) {
  const db = new Database(":memory:");
  for (const statement of ACCOUNT_SCHEMA) db.run(statement);
  for (const [meter, period, quantity] of usage) {
    db.query(
      "INSERT INTO usage_periods (account_id, meter, period, quantity, reserved, updated_at) VALUES (?, ?, ?, ?, 0, 0)",
    ).run(id, meter, period, quantity);
  }
  return {
    db,
    sql: {
      exec: (query: string, ...params: Array<string | number | null>) => {
        const rows = db.query(query).all(...params) as never[];
        return { toArray: () => rows };
      },
    },
  };
}

beforeEach(() => {
  d1 = fakeD1();