import { join } from "node:path"; import { expect, it } from "vitest"; import { isolatedEnvironment, selectedTasks, within } from "./e2e.mjs"; it("keeps E2E browser, agent, cache, and temporary state inside one run root", () => { const root = "/tmp/pi-ext-e2e-example"; const env = isolatedEnvironment(root, { HOME: "/home/owner", XDG_DATA_HOME: "/home/owner/.local/share", XDG_CONFIG_HOME: "/home/owner/.config", PLAYWRIGHT_BROWSERS_PATH: "/home/owner/.cache/ms-playwright", PI_CODING_AGENT_DIR: "/home/owner/.pi/agent", TMPDIR: "/home/owner/project/.pi/tmp", PI_BAK_S3_ENDPOINT: "https://example.invalid", }); for (const key of [ "HOME", "USERPROFILE", "XDG_CONFIG_HOME", "XDG_CACHE_HOME", "XDG_DATA_HOME", "XDG_STATE_HOME", "TMPDIR", "TMP", "TEMP", "PLAYWRIGHT_BROWSERS_PATH", "PI_CODING_AGENT_DIR", "npm_config_cache", "MISE_CACHE_DIR", "MISE_STATE_DIR", ]) expect(within(root, env[key] ?? "/missing")).toBe(true); expect(env.MISE_DATA_DIR).toBe("/home/owner/.local/share/mise"); expect(env.MISE_CONFIG_DIR).toBe("/home/owner/.config/mise"); expect(env.PI_BAK_S3_ENDPOINT).toBeUndefined(); expect(env.PI_BAK_E2E_S3).toBe("0"); expect(env.PI_EXT_E2E_ROOT).toBe(root); expect(env.MISE_AUTO_INSTALL).toBe("0"); }); it("filters only listed local E2E suites", () => { const tasks = ["//extensions/strata:e2e", "//extensions/chrome-cdp:e2e"]; expect(selectedTasks(tasks, "strata")).toEqual([tasks[0]]); expect(() => selectedTasks(tasks, "bak")).toThrow(/No local E2E task/); expect(() => selectedTasks(tasks, "../bak")).toThrow(/extension slug/); }); it("rejects a temporary root inside the repository", () => { const repo = "/home/owner/project"; expect(within(repo, join(repo, ".pi/tmp"))).toBe(true); expect(within(repo, "/tmp/pi-ext-e2e-example")).toBe(false); });