fix(test): isolate route tests from the production ~/.codeman data dir

session-routes-workspace-hooks.test.ts wrote its h1/box/10.0.0.5 host
fixture into getDataDir()/remote-hosts.json. getDataDir() resolves via
homedir() → ~/.codeman (INSTANCE_SUFFIX='' by default), and overriding
HOME in test/setup.ts does NOT change os.homedir() on Linux — so every
full-suite run silently overwrote the PRODUCTION remote-hosts.json,
wiping user-defined remote hosts, emptying the launch-case dropdown and
breaking remote session creation (found live 2026-08-29).

The vitest v4 test.env config key is ignored (probe confirmed the
worker still saw CODEMAN_DATA_DIR=undefined), so the reliable fix is
stubbing the env inside the test: the fixture write now goes to a
throwaway /tmp dir via vi.stubEnv + finally unstub. Verified: prod
remote-hosts.json hash is identical before and after the suite run.
This commit is contained in:
timkjr
2026-09-02 20:40:58 -05:00
parent 1e24817b51
commit 2694d3f74a
4 changed files with 45 additions and 5 deletions
@@ -168,11 +168,22 @@ describe('POST /api/sessions workspace hooks', () => {
// `user@host:session` — locally a RELATIVE path, so a mkdir would create it
// as a junk directory under the server cwd. statusLineTelemetry rides along:
// applyStatusLineConfig mkdirs the same way and used to run for remote attaches.
await mkdir(getDataDir(), { recursive: true });
await writeFile(
join(getDataDir(), 'remote-hosts.json'),
JSON.stringify([{ id: 'h1', label: 'box', host: '10.0.0.5', username: 'dev' }])
);
// SAFETY (2026-08-29): `getDataDir()` is call-time so stub the env to a
// throwaway dir for this write — otherwise this test overwrites the PROD
// `~/.codeman/remote-hosts.json` with the fixture below, wiping every
// user-defined remote host (caught live: a full-suite run emptied the
// launch-case dropdown and broke remote session creation).
const fixtureDataDir = join(tmpdir(), `codeman-hook-fixture-${process.pid}`);
vi.stubEnv('CODEMAN_DATA_DIR', fixtureDataDir);
try {
await mkdir(getDataDir(), { recursive: true });
await writeFile(
join(getDataDir(), 'remote-hosts.json'),
JSON.stringify([{ id: 'h1', label: 'box', host: '10.0.0.5', username: 'dev' }])
);
} finally {
vi.unstubAllEnvs();
}
const res = await createSession({
name: 'hooks-remote',