fix(tui/utils): corrected state restoration for TTY and environment variables

- Corrected TTY property restoration to properly delete injected properties instead of redefining them as truthy values.
- Updated environment restoration to modify process.env keys individually to prevent breaking environment object reference bindings.
- Prevented pollution of TTY-gated code and environment variable state across test suites.
This commit is contained in:
can1357
2026-06-24 15:30:29 +02:00
parent ea01c3998c
commit c58ec21242
2 changed files with 15 additions and 3 deletions
@@ -132,7 +132,12 @@ export function createProcessTerminalRenderHarness(
setTerminalHeadless(previousHeadless);
for (const spy of spies) spy.mockRestore();
for (const [target, key, descriptor] of PRISTINE) {
// A piped test run has no own `isTTY`/`columns`/`rows` descriptor, so
// the captured pristine value is `undefined`. Deleting the forced
// property restores that absent state — skipping it would leak
// `isTTY = true` and poison TTY-gated code (e.g. mermaid color auto-detect).
if (descriptor) Object.defineProperty(target, key, descriptor);
else Reflect.deleteProperty(target, key);
}
},
};
@@ -12,18 +12,25 @@ import { logger } from "@oh-my-pi/pi-utils";
*/
let tempDir: string;
let restoredEnv: NodeJS.ProcessEnv;
let prevAgentDir: string | undefined;
beforeAll(() => {
tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "pi-logger-error-"));
restoredEnv = { ...process.env };
// `getLogsDir()` honors OMP_AGENT_DIR / HOME for its base; pin to our tmp.
// Restore only this key on teardown — reassigning `process.env` wholesale
// would replace the live binding with a plain object, diverging it from
// `Bun.env` and poisoning every env-reading test that runs afterwards.
prevAgentDir = process.env.OMP_AGENT_DIR;
process.env.OMP_AGENT_DIR = tempDir;
logger.setTransports({ file: tempDir, console: false });
});
afterAll(() => {
process.env = restoredEnv;
if (prevAgentDir === undefined) {
delete process.env.OMP_AGENT_DIR;
} else {
process.env.OMP_AGENT_DIR = prevAgentDir;
}
logger.setTransports({ file: false, console: false });
fs.rmSync(tempDir, { force: true, recursive: true });
});