40 lines
1.3 KiB
TypeScript
40 lines
1.3 KiB
TypeScript
import { expect, test } from "bun:test";
|
|
import { rm } from "node:fs/promises";
|
|
import { isAbsolute, resolve } from "node:path";
|
|
import { tmpdir } from "node:os";
|
|
|
|
test("creates isolated test data when the Bun preload was not discovered", async () => {
|
|
const childEnv = { ...process.env };
|
|
delete childEnv.DATA_DIR;
|
|
delete childEnv.OVERLORD_TEST_DATA_DIR;
|
|
childEnv.NODE_ENV = "test";
|
|
// VS Code's Bun adapter injects inspector settings into the test process.
|
|
// A child that inherits them can wait for the same debugger and never exit.
|
|
delete childEnv.BUN_OPTIONS;
|
|
for (const key of Object.keys(childEnv)) {
|
|
if (key.startsWith("BUN_INSPECT")) delete childEnv[key];
|
|
}
|
|
|
|
const child = Bun.spawn([
|
|
process.execPath,
|
|
"-e",
|
|
'const { resolveDataDir } = await import("./src/paths.ts"); console.log(resolveDataDir());',
|
|
], {
|
|
cwd: resolve(import.meta.dirname, ".."),
|
|
env: childEnv,
|
|
stdout: "pipe",
|
|
stderr: "pipe",
|
|
});
|
|
const [exitCode, stdout, stderr] = await Promise.all([
|
|
child.exited,
|
|
new Response(child.stdout).text(),
|
|
new Response(child.stderr).text(),
|
|
]);
|
|
|
|
expect(exitCode, stderr).toBe(0);
|
|
const dataDir = stdout.trim();
|
|
expect(isAbsolute(dataDir)).toBe(true);
|
|
expect(dataDir.toLowerCase().startsWith(resolve(tmpdir()).toLowerCase())).toBe(true);
|
|
await rm(dataDir, { recursive: true, force: true });
|
|
});
|