21 lines · 1.0 KB
import { expect, test } from "bun:test";
import { Database } from "bun:sqlite";
import { readFileSync } from "node:fs";

const migration = readFileSync(new URL("../../../migrations/0047_billing_release.sql", import.meta.url), "utf8");

test("0047 backfills past_due_since for subscriptions already past_due at deploy", () => {
  const db = new Database(":memory:");
  db.exec(`CREATE TABLE usage_days (account_id TEXT, meter TEXT, day TEXT, quantity REAL);
    CREATE TABLE billing_customers (account_id TEXT PRIMARY KEY, stripe_customer_id TEXT, subscription_status TEXT);
    INSERT INTO billing_customers VALUES ('a', 'cus_a', 'past_due'), ('b', 'cus_b', 'active');`);
  const before = Date.now() - 1000;
  db.exec(migration);
  const rows = db.query("SELECT past_due_since AS since FROM billing_customers ORDER BY account_id").all() as {
    since: number | null;
  }[];
  expect(rows[0].since).toBeGreaterThanOrEqual(before);
  expect(rows[0].since).toBeLessThanOrEqual(Date.now() + 1000);
  expect(rows[1].since).toBeNull();
});