From dc9aefbee1e0adbf9d878d357b97f15250d58860 Mon Sep 17 00:00:00 2001 From: Affaan Mustafa Date: Thu, 12 Feb 2026 16:41:58 -0800 Subject: [PATCH] fix: set USERPROFILE in tests for Windows os.homedir() compatibility On Windows, os.homedir() uses USERPROFILE env var instead of HOME. Tests that override HOME to a temp dir must also set USERPROFILE for the session-manager, session-aliases, and session-start hook tests to find files in the correct directory. --- tests/hooks/hooks.test.js | 8 ++++---- tests/lib/session-aliases.test.js | 9 ++++++++- tests/lib/session-manager.test.js | 10 +++++++++- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/tests/hooks/hooks.test.js b/tests/hooks/hooks.test.js index 0acff0a0..39c9024a 100644 --- a/tests/hooks/hooks.test.js +++ b/tests/hooks/hooks.test.js @@ -110,7 +110,7 @@ async function runTests() { fs.mkdirSync(path.join(isoHome, '.claude', 'skills', 'learned'), { recursive: true }); try { const result = await runScript(path.join(scriptsDir, 'session-start.js'), '', { - HOME: isoHome + HOME: isoHome, USERPROFILE: isoHome }); assert.strictEqual(result.code, 0, `Exit code should be 0, got ${result.code}`); } finally { @@ -138,7 +138,7 @@ async function runTests() { try { const result = await runScript(path.join(scriptsDir, 'session-start.js'), '', { - HOME: isoHome + HOME: isoHome, USERPROFILE: isoHome }); assert.strictEqual(result.code, 0); // stdout should NOT contain the template content @@ -163,7 +163,7 @@ async function runTests() { try { const result = await runScript(path.join(scriptsDir, 'session-start.js'), '', { - HOME: isoHome + HOME: isoHome, USERPROFILE: isoHome }); assert.strictEqual(result.code, 0); assert.ok( @@ -191,7 +191,7 @@ async function runTests() { try { const result = await runScript(path.join(scriptsDir, 'session-start.js'), '', { - HOME: isoHome + HOME: isoHome, USERPROFILE: isoHome }); assert.strictEqual(result.code, 0); assert.ok( diff --git a/tests/lib/session-aliases.test.js b/tests/lib/session-aliases.test.js index 22431642..913a61b0 100644 --- a/tests/lib/session-aliases.test.js +++ b/tests/lib/session-aliases.test.js @@ -17,7 +17,9 @@ const os = require('os'); const tmpHome = path.join(os.tmpdir(), `ecc-alias-test-${Date.now()}`); fs.mkdirSync(path.join(tmpHome, '.claude'), { recursive: true }); const origHome = process.env.HOME; +const origUserProfile = process.env.USERPROFILE; process.env.HOME = tmpHome; +process.env.USERPROFILE = tmpHome; // Windows: os.homedir() uses USERPROFILE const aliases = require('../../scripts/lib/session-aliases'); @@ -496,8 +498,13 @@ function runTests() { assert.ok(data.metadata.lastUpdated); })) passed++; else failed++; - // Cleanup + // Cleanup — restore both HOME and USERPROFILE (Windows) process.env.HOME = origHome; + if (origUserProfile !== undefined) { + process.env.USERPROFILE = origUserProfile; + } else { + delete process.env.USERPROFILE; + } try { fs.rmSync(tmpHome, { recursive: true, force: true }); } catch { diff --git a/tests/lib/session-manager.test.js b/tests/lib/session-manager.test.js index d1dcc918..6a6a8096 100644 --- a/tests/lib/session-manager.test.js +++ b/tests/lib/session-manager.test.js @@ -332,10 +332,12 @@ src/main.ts console.log('\ngetAllSessions:'); // Override HOME to a temp dir for isolated getAllSessions/getSessionById tests + // On Windows, os.homedir() uses USERPROFILE, not HOME — set both for cross-platform const tmpHome = path.join(os.tmpdir(), `ecc-session-mgr-test-${Date.now()}`); const tmpSessionsDir = path.join(tmpHome, '.claude', 'sessions'); fs.mkdirSync(tmpSessionsDir, { recursive: true }); const origHome = process.env.HOME; + const origUserProfile = process.env.USERPROFILE; // Create test session files with controlled modification times const testSessions = [ @@ -354,6 +356,7 @@ src/main.ts } process.env.HOME = tmpHome; + process.env.USERPROFILE = tmpHome; if (test('getAllSessions returns all sessions', () => { const result = sessionManager.getAllSessions({ limit: 100 }); @@ -578,8 +581,13 @@ src/main.ts assert.ok(!isNaN(result.datetime.getTime()), 'datetime should be valid'); })) passed++; else failed++; - // Cleanup + // Cleanup — restore both HOME and USERPROFILE (Windows) process.env.HOME = origHome; + if (origUserProfile !== undefined) { + process.env.USERPROFILE = origUserProfile; + } else { + delete process.env.USERPROFILE; + } try { fs.rmSync(tmpHome, { recursive: true, force: true }); } catch {