From 54de5ad3faaa07355062673a5832687bd20dc7c1 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Fri, 26 Dec 2025 11:45:16 +0000 Subject: [PATCH] test: isolate vitest home --- CHANGELOG.md | 1 + test/setup.ts | 40 ++++++++++++++++++++++++++++++++++++++++ vitest.config.ts | 1 + 3 files changed, 42 insertions(+) create mode 100644 test/setup.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index efc4f9d78..6503a3c86 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -68,6 +68,7 @@ ### Tests - Coverage added for models config merging, WhatsApp reply context, QR login flows, auto-reply behavior, and gateway SIGTERM timeouts. - Added gateway webhook coverage (auth, validation, and summary posting). +- Vitest now isolates HOME/XDG config roots so tests never touch a real `~/.clawdis` install. ## 2.0.0-beta2 — 2025-12-21 diff --git a/test/setup.ts b/test/setup.ts new file mode 100644 index 000000000..733d4347f --- /dev/null +++ b/test/setup.ts @@ -0,0 +1,40 @@ +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; + +const originalHome = process.env.HOME; +const originalUserProfile = process.env.USERPROFILE; +const originalXdgConfigHome = process.env.XDG_CONFIG_HOME; +const originalXdgDataHome = process.env.XDG_DATA_HOME; +const originalXdgStateHome = process.env.XDG_STATE_HOME; +const originalXdgCacheHome = process.env.XDG_CACHE_HOME; +const originalTestHome = process.env.CLAWDIS_TEST_HOME; + +const tempHome = fs.mkdtempSync(path.join(os.tmpdir(), "clawdis-test-home-")); +process.env.HOME = tempHome; +process.env.USERPROFILE = tempHome; +process.env.CLAWDIS_TEST_HOME = tempHome; +process.env.XDG_CONFIG_HOME = path.join(tempHome, ".config"); +process.env.XDG_DATA_HOME = path.join(tempHome, ".local", "share"); +process.env.XDG_STATE_HOME = path.join(tempHome, ".local", "state"); +process.env.XDG_CACHE_HOME = path.join(tempHome, ".cache"); + +const restoreEnv = (key: string, value: string | undefined) => { + if (value === undefined) delete process.env[key]; + else process.env[key] = value; +}; + +process.on("exit", () => { + restoreEnv("HOME", originalHome); + restoreEnv("USERPROFILE", originalUserProfile); + restoreEnv("XDG_CONFIG_HOME", originalXdgConfigHome); + restoreEnv("XDG_DATA_HOME", originalXdgDataHome); + restoreEnv("XDG_STATE_HOME", originalXdgStateHome); + restoreEnv("XDG_CACHE_HOME", originalXdgCacheHome); + restoreEnv("CLAWDIS_TEST_HOME", originalTestHome); + try { + fs.rmSync(tempHome, { recursive: true, force: true }); + } catch { + // ignore cleanup errors + } +}); diff --git a/vitest.config.ts b/vitest.config.ts index c3b4a251d..20c37d2e2 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -3,6 +3,7 @@ import { defineConfig } from "vitest/config"; export default defineConfig({ test: { include: ["src/**/*.test.ts", "test/format-error.test.ts"], + setupFiles: ["test/setup.ts"], exclude: [ "dist/**", "apps/macos/**",