40 lines · 1.9 KB
import { describe, expect, mock, test } from "bun:test";

mock.module("cloudflare:workers", () => ({ env: {} }));

const { isAdminEmail, mayBootstrapAdminAtSignup, mayBypassClosedSignups } = await import("./admin-bootstrap");

const PROD = { PUBLIC_URL: "https://gitfor.dev", ADMIN_EMAIL: "Owner@Gitfor.dev", BOOTSTRAP_TOKEN: "t".repeat(24) };
const DEV = { PUBLIC_URL: "http://localhost:3000", GITFOR_LOCAL: "true" };

describe("first-admin bootstrap (DEPLOY-P3 / AUTH-P5)", () => {
  test("in production the first signup is not admin without the bootstrap token", () => {
    expect(mayBootstrapAdminAtSignup(null, PROD)).toBe(false);
    expect(mayBootstrapAdminAtSignup("wrong", PROD)).toBe(false);
    expect(mayBootstrapAdminAtSignup("t".repeat(24), PROD)).toBe(true);
  });

  test("a short or unset BOOTSTRAP_TOKEN never matches", () => {
    expect(mayBootstrapAdminAtSignup("abc", { ...PROD, BOOTSTRAP_TOKEN: "abc" })).toBe(false);
    expect(mayBootstrapAdminAtSignup("", { ...PROD, BOOTSTRAP_TOKEN: "" })).toBe(false);
  });

  test("only loopback dev makes the first signup admin by itself", () => {
    expect(mayBootstrapAdminAtSignup(null, DEV)).toBe(true);
    expect(mayBootstrapAdminAtSignup(null, { ...DEV, PUBLIC_URL: "https://gitfor.dev" })).toBe(false);
    expect(mayBootstrapAdminAtSignup(null, { PUBLIC_URL: "http://localhost:3000" })).toBe(false);
  });

  test("ADMIN_EMAIL matches case-insensitively and only when set", () => {
    expect(isAdminEmail("owner@gitfor.dev", PROD)).toBe(true);
    expect(isAdminEmail("other@gitfor.dev", PROD)).toBe(false);
    expect(isAdminEmail("", { ...PROD, ADMIN_EMAIL: "" })).toBe(false);
  });

  test("closed signups admit only the token holder (or loopback dev), never a typed ADMIN_EMAIL", () => {
    expect(mayBypassClosedSignups(null, PROD)).toBe(false);
    expect(mayBypassClosedSignups("t".repeat(24), PROD)).toBe(true);
    expect(mayBypassClosedSignups(null, DEV)).toBe(true);
  });
});