repositories / pi-ext
pi-ext
bugabingas pi extensions
owned by admin
scripts/e2e.test.ts
Rawimport { join } from "node:path";
import { expect, it } from "vitest";
import { isolatedEnvironment, selectedTasks, within } from "./e2e.ts";
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(join("/home/owner/.local/share", "mise"));
expect(env["MISE_CONFIG_DIR"]).toBe(join("/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("reuses only explicitly configured CI binary and download caches", () => {
const env = isolatedEnvironment("/tmp/isolated", {
HOME: "/tmp/ci-home",
CI: "true",
PI_EXT_CI_CACHE_ROOT: "/cache/toolchains",
NPM_CONFIG_CACHE: "/cache/npm",
});
expect(env["PLAYWRIGHT_BROWSERS_PATH"]).toBe(
join("/cache/toolchains", "browsers"),
);
expect(env["npm_config_cache"]).toBe("/cache/npm");
expect(env["MISE_CACHE_DIR"]).toBe(join("/cache/toolchains", "downloads"));
expect(env["MISE_STATE_DIR"]).toBe(join("/tmp/isolated", "mise-state"));
expect(env["HOME"]).toBe(join("/tmp/isolated", "home"));
const local = isolatedEnvironment("/tmp/isolated", {
HOME: "/home/owner",
PI_EXT_CI_CACHE_ROOT: "/cache/toolchains",
});
expect(local["PLAYWRIGHT_BROWSERS_PATH"]).toBe(
join("/tmp/isolated", "browsers"),
);
});
it("preserves Windows Mise installations before sandboxing AppData", () => {
const parent = {
USERPROFILE: "C:/Users/owner",
LOCALAPPDATA: "D:/AppData/Local",
};
expect(
isolatedEnvironment("C:/Temp/run", parent, "win32")["MISE_DATA_DIR"],
).toBe(join(parent.LOCALAPPDATA, "mise"));
expect(
isolatedEnvironment(
"C:/Temp/run",
{ USERPROFILE: parent.USERPROFILE },
"win32",
)["MISE_DATA_DIR"],
).toBe(join(parent.USERPROFILE, "AppData", "Local", "mise"));
expect(
isolatedEnvironment(
"C:/Temp/run",
{ ...parent, XDG_DATA_HOME: "D:/xdg" },
"win32",
)["MISE_DATA_DIR"],
).toBe(join("D:/xdg", "mise"));
expect(
isolatedEnvironment(
"C:/Temp/run",
{ ...parent, XDG_DATA_HOME: "D:/xdg", MISE_DATA_DIR: "D:/explicit" },
"win32",
)["MISE_DATA_DIR"],
).toBe("D:/explicit");
});
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);
});