import { describe, expect, mock, test } from "bun:test"; mock.module("cloudflare:workers", () => ({ env: {}, waitUntil: () => undefined })); const { assertNotArchived, repoPermission, repoReadOnlyReason, repoTakenDown } = await import("./repos"); describe("read-only repositories", () => { test("a disabled owner makes the repository read-only, like archiving", () => { expect(repoReadOnlyReason({ is_archived: 0, owner_disabled_at: null })).toBeNull(); expect(repoReadOnlyReason({ is_archived: 0 })).toBeNull(); expect(repoReadOnlyReason({ is_archived: 1, owner_disabled_at: null })).toContain("archived"); expect(repoReadOnlyReason({ is_archived: 0, owner_disabled_at: 1 })).toContain("account is disabled"); expect(() => assertNotArchived({ is_archived: 0, owner_disabled_at: 1 })).toThrow("account is disabled"); }); }); describe("taken-down repositories", () => { const repo = { id: "r1", owner_id: "owner", visibility: "public", owner_disabled_at: 1, owner_disabled_reason: "admin", } as Parameters[0]; const viewer = { id: "someone", name: "someone", displayName: null, email: "", isAdmin: false, emailVerified: true }; test("only an admin disable takes repositories down; a dispute keeps them readable", () => { expect(repoTakenDown({ owner_disabled_at: 1, owner_disabled_reason: "admin" })).toBe(true); expect(repoTakenDown({ owner_disabled_at: 1, owner_disabled_reason: "payment_dispute" })).toBe(false); expect(repoTakenDown({ owner_disabled_at: null, owner_disabled_reason: null })).toBe(false); }); test("a taken-down public repository is hidden from anonymous and signed-in viewers, readable by admins", async () => { expect(await repoPermission(repo, null)).toBe("none"); expect(await repoPermission(repo, viewer)).toBe("none"); expect(await repoPermission(repo, { ...viewer, isAdmin: true, emailVerified: true })).toBe("read"); }); });