23 lines
861 B
TypeScript
23 lines
861 B
TypeScript
|
|
import { mkdtempSync, rmSync } from 'node:fs';
|
||
|
|
import { tmpdir } from 'node:os';
|
||
|
|
import path from 'node:path';
|
||
|
|
|
||
|
|
const TEST_DATA_DIR_SYMBOL = Symbol.for('open-design.daemon.vitestDataDir');
|
||
|
|
|
||
|
|
const globalState = globalThis as typeof globalThis & {
|
||
|
|
[TEST_DATA_DIR_SYMBOL]?: string;
|
||
|
|
};
|
||
|
|
|
||
|
|
if (!globalState[TEST_DATA_DIR_SYMBOL]) {
|
||
|
|
globalState[TEST_DATA_DIR_SYMBOL] = mkdtempSync(path.join(tmpdir(), 'od-daemon-vitest-'));
|
||
|
|
|
||
|
|
process.once('exit', () => {
|
||
|
|
rmSync(globalState[TEST_DATA_DIR_SYMBOL]!, { force: true, recursive: true });
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
// Server paths are resolved at module import time. Force every daemon test
|
||
|
|
// process to use one isolated data directory before any test imports server.ts,
|
||
|
|
// so tests can never read or overwrite the developer's real repo `.od` data.
|
||
|
|
process.env.OD_DATA_DIR = globalState[TEST_DATA_DIR_SYMBOL];
|