// src/lib/db/assert-test-db.test.ts — pure unit tests (no DB) for the
// safety-guard predicate. The guard's actual `assertTestDb()` call is
// exercised transitively by every DB integration test (DB_TESTS=1).
import { describe, expect, test } from "bun:test";
import { isSeedableDbName, isTestDbName } from "./assert-test-db";

describe("isTestDbName", () => {
  test("accepts the canonical test DB name", () => {
    expect(isTestDbName("seo_insight_test")).toBe(true);
  });

  test("accepts a strict suffixed variant (e.g. per-worker/CI DBs)", () => {
    expect(isTestDbName("seo_insight_test_ci")).toBe(true);
    expect(isTestDbName("seo_insight_test_w1")).toBe(true);
  });

  test("rejects dev/prod database names", () => {
    expect(isTestDbName("seo_insight")).toBe(false);
    expect(isTestDbName("seo_insight_dev")).toBe(false);
    expect(isTestDbName("postgres")).toBe(false);
  });

  test("rejects unrelated *_test databases (the old regex was too loose)", () => {
    expect(isTestDbName("some_other_db_test")).toBe(false);
    expect(isTestDbName("prod_test")).toBe(false);
  });

  test("rejects empty/unknown names", () => {
    expect(isTestDbName("")).toBe(false);
  });
});

describe("isSeedableDbName", () => {
  test("accepts the dev and test databases (seed.ts targets both — SETUP.md)", () => {
    expect(isSeedableDbName("seo_insight_dev")).toBe(true);
    expect(isSeedableDbName("seo_insight_test")).toBe(true);
    expect(isSeedableDbName("seo_insight_test_ci")).toBe(true);
  });

  test("rejects anything else, in particular a would-be prod name", () => {
    expect(isSeedableDbName("seo_insight")).toBe(false);
    expect(isSeedableDbName("seo_insight_prod")).toBe(false);
    expect(isSeedableDbName("postgres")).toBe(false);
    expect(isSeedableDbName("")).toBe(false);
  });
});
