import { env } from "cloudflare:test";
import { describe, expect, it } from "vitest";

describe("D1 schema", () => {
  it("creates all six tables", async () => {
    const rows = await env.DB.prepare(
      "SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE '\\_%' ESCAPE '\\' AND name NOT LIKE 'sqlite%' ORDER BY name",
    ).all<{ name: string }>();
    expect(rows.results.map((r) => r.name)).toEqual([
      "blobs",
      "buckets",
      "d1_migrations",
      "licenses",
      "sites",
      "snapshots",
      "usage_log",
    ]);
  });

  it("enforces blob status check constraint", async () => {
    await env.DB.prepare(
      "INSERT INTO licenses (license_key, plan, storage_bytes_limit, retention_days, max_sites, status) VALUES ('L1','test',1000,30,1,'active')",
    ).run();
    await env.DB.prepare(
      "INSERT INTO buckets (id, name, region, site_count) VALUES (1,'b','eu-central-1',0)",
    ).run();
    await env.DB.prepare(
      "INSERT INTO sites (id, license_key, site_url, bucket_id) VALUES ('s1','L1','https://a.tld',1)",
    ).run();
    await expect(
      env.DB.prepare(
        "INSERT INTO blobs (site_id, sha256, size_bytes, status) VALUES ('s1','deadbeef',1,'bogus')",
      ).run(),
    ).rejects.toThrow();
  });
});
