84 lines · 3.2 KB
import { describe, expect, mock, test } from "bun:test";
import type { Viewer } from "~/lib/types";

type Handler = (input: { data: Record<string, unknown>; context: { viewer: Viewer | null } }) => 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 actualLimits = await import("~/server/limits");
mock.module("~/server/limits", () => ({ ...actualLimits, limitBrowse: async () => undefined }));

const takenDown = {
  id: "evil",
  name: "evil",
  kind: "user",
  avatar_key: "evil-abc",
  disabled_at: 5,
  disabled_reason: "admin",
  show: 0,
  followers: 0,
  repos: 0,
  created_at: 0,
};
const actualDb = await import("~/server/db");
mock.module("~/server/db", () => ({
  ...actualDb,
  first: async (sql: string) => (/FROM accounts/.test(sql) ? takenDown : null),