import { beforeEach, describe, expect, mock, test } from "bun:test";
import { Database } from "bun:sqlite";
import { readdirSync, readFileSync } from "node:fs";
import { join } from "node:path";
class StubEntrypoint {}
mock.module("cloudflare:workers", () => ({
env: { PUBLIC_URL: "http://localhost:8787", SECRETS_KEY: "test-key", RATE_LIMITS_DISABLED: "true" },
waitUntil: () => undefined,
WorkflowEntrypoint: StubEntrypoint,
DurableObject: StubEntrypoint,
WorkerEntrypoint: StubEntrypoint,
}));
mock.module("@tanstack/react-start/server", () => ({
getRequestHeader: () => undefined,
getCookie: () => undefined,
setCookie: () => undefined,
deleteCookie: () => undefined,
}));
const db = new Database(":memory:");
const migrations = join(import.meta.dir, "../../migrations");
for (const file of readdirSync(migrations).sort()) db.exec(readFileSync(join(migrations, file), "utf8"));
mock.module("./db", () => ({
first: async (sql: string, ...params: unknown[]) => db.query(sql).get(...(params as never[])) ?? null,
all: async (sql: string, ...params: unknown[]) => db.query(sql).all(...(params as never[])),
run: async (sql: string, ...params: unknown[]) => {
const result = db.query(sql).run(...(params as never[]));
return { meta: { changes: result.changes } };
},
batch: async (statements: { sql: string; params: unknown[] }[]) => {
for (const statement of statements) db.query(statement.sql).run(...(statement.params as never[]));
return [];
},
stmt: (sql: string, ...params: unknown[]) => ({
sql,
params,
run: async () => db.query(sql).run(...(params as never[])),
}),