import { beforeEach, describe, expect, mock, test } from "bun:test";
import type { RepoRow, Viewer } from "~/lib/types";
type Handler = (input: { data: Record<string, unknown>; context: { viewer: Viewer } }) => Promise<unknown>;
type Builder = { middleware: () => Builder; validator: () => Builder; handler: (fn: Handler) => Handler };
function builder(): Builder {
const self: Builder = { middleware: () => self, validator: () => self, handler: (fn) => fn };
return self;
}
class StubEntrypoint {}
mock.module("cloudflare:workers", () => ({
env: { PUBLIC_URL: "https://forge.example.com" },
waitUntil: () => undefined,
WorkflowEntrypoint: StubEntrypoint,
DurableObject: StubEntrypoint,
WorkerEntrypoint: StubEntrypoint,
}));
mock.module("@tanstack/react-start", () => ({ createServerFn: () => builder(), createMiddleware: () => builder() }));
mock.module("./middleware", () => ({ viewerMiddleware: {}, requireViewer: (viewer: Viewer) => viewer }));
const repo = { id: "repo-1", owner_id: "u-owner", owner_name: "owner", name: "app", is_archived: 1 } as RepoRow;
const actualRepos = await import("~/server/repos");
mock.module("~/server/repos", () => ({
...actualRepos,
requireRepoAccess: async () => ({ repo, permission: "admin" }),
}));
const actualLimits = await import("~/server/limits");
mock.module("~/server/limits", () => ({
...actualLimits,
limitWrite: async () => undefined,
limitAccountWrite: async () => undefined,
}));
const calls: string[] = [];
const actualTokenWrite = await import("~/server/token-write");
mock.module("~/server/token-write", () => ({
...actualTokenWrite,
createDeployToken: async () => {