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<typeof repoPermission>[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");
});
});