slackbot-staging / scripts /setups /vitest-setup-server.ts
abidlabs's picture
abidlabs HF Staff
Deploy PR 2687 isolated staging with Space OAuth
3f49e8f verified
Raw History Blame Contribute Delete
2.54 kB
import { vi, afterAll } from "vitest";
import dotenv from "dotenv";
import { resolve } from "path";
import fs from "fs";
import { MongoMemoryServer } from "mongodb-memory-server";
import { MODELS_FIXTURE, TEST_OPENAI_BASE_URL } from "../../src/lib/server/__fixtures__/models";
let mongoServer: MongoMemoryServer;
// Load the .env file
const envPath = resolve(__dirname, "../../.env");
dotenv.config({ path: envPath });
// Read the .env file content
const envContent = fs.readFileSync(envPath, "utf-8");
// Parse the .env content
const envVars = dotenv.parse(envContent);
// Separate public and private variables
const publicEnv = {};
const privateEnv = {};
for (const [key, value] of Object.entries(envVars)) {
if (key.startsWith("PUBLIC_")) {
publicEnv[key] = value;
} else {
privateEnv[key] = value;
}
}
/*
* Serve the model registry from a fixture instead of the network.
*
* `src/lib/server/models.ts` runs `await buildModels()` at module scope, guarded only by
* `building` — which is false under Vitest. Any spec that transitively imports it therefore
* used to hit the live upstream. This intercept keeps the real `buildModels()` code path
* intact (fetch -> zod parse -> capability derivation -> override merge) while removing the
* third-party dependency. Everything else falls through to the real `fetch`, so specs that
* genuinely exercise the network (e.g. the SSRF/DNS suites) are unaffected.
*
* This must be installed before any module-scope `fetch` runs, which is why it lives in the
* setup file body rather than in a `beforeAll`.
*/
const realFetch = globalThis.fetch;
const MODELS_URL = `${TEST_OPENAI_BASE_URL}/models`;
globalThis.fetch = (async (input: RequestInfo | URL, init?: RequestInit) => {
const url = input instanceof Request ? input.url : String(input);
if (url === MODELS_URL) {
return new Response(JSON.stringify(MODELS_FIXTURE), {
status: 200,
headers: { "content-type": "application/json" },
});
}
return realFetch(input, init);
}) as typeof fetch;
vi.mock("$env/dynamic/public", () => ({
env: publicEnv,
}));
vi.mock("$env/dynamic/private", async () => {
mongoServer = await MongoMemoryServer.create();
return {
env: {
...privateEnv,
MONGODB_URL: mongoServer.getUri(),
// Pin the model registry at the intercepted fixture host. Must stay in sync with
// the intercept above.
OPENAI_BASE_URL: TEST_OPENAI_BASE_URL,
},
};
});
afterAll(async () => {
globalThis.fetch = realFetch;
if (mongoServer) {
await mongoServer.stop();
}
});