import { afterEach, beforeEach, describe, expect, test, vi } from "vitest"; const ENV_KEYS = [ "NEXT_PUBLIC_BACKEND_BASE_URL", "NEXT_PUBLIC_STATIC_WEBSITE_ONLY", ] as const; type EnvSnapshot = Partial< Record<(typeof ENV_KEYS)[number], string | undefined> >; function snapshotEnv(): EnvSnapshot { const snapshot: EnvSnapshot = {}; for (const key of ENV_KEYS) { snapshot[key] = process.env[key]; } return snapshot; } function setEnv(key: (typeof ENV_KEYS)[number], value: string | undefined) { const env = process.env as Record; if (value === undefined) { delete env[key]; } else { env[key] = value; } } function restoreEnv(snapshot: EnvSnapshot) { for (const key of ENV_KEYS) { setEnv(key, snapshot[key]); } } async function loadFreshArtifactUtils() { vi.resetModules(); return await import("@/core/artifacts/utils"); } describe("artifact URL helpers", () => { let saved: EnvSnapshot; beforeEach(() => { saved = snapshotEnv(); setEnv("NEXT_PUBLIC_BACKEND_BASE_URL", undefined); setEnv("NEXT_PUBLIC_STATIC_WEBSITE_ONLY", undefined); }); afterEach(() => { restoreEnv(saved); }); test("maps static demo artifact paths to bundled public files", async () => { setEnv("NEXT_PUBLIC_STATIC_WEBSITE_ONLY", "true"); const { resolveArtifactURL, urlOfArtifact } = await loadFreshArtifactUtils(); expect( urlOfArtifact({ filepath: "/mnt/user-data/outputs/index.html", threadId: "thread-1", }), ).toBe("/demo/threads/thread-1/user-data/outputs/index.html"); expect( resolveArtifactURL("/mnt/user-data/outputs/style.css", "thread-1"), ).toBe("/demo/threads/thread-1/user-data/outputs/style.css"); }); });