fix: use settings as source of truth for hooks config state (#633)

This commit is contained in:
jnjpng
2026-01-22 12:09:42 -08:00
committed by GitHub
parent b9ac39e74d
commit dccc18ee46
5 changed files with 102 additions and 249 deletions

View File

@@ -6,7 +6,6 @@ import { mkdirSync, rmSync, writeFileSync } from "node:fs";
import { tmpdir } from "node:os";
import { join } from "node:path";
import {
clearHooksCache,
hasHooks,
runNotificationHooks,
runPermissionRequestHooks,
@@ -20,6 +19,7 @@ import {
runSubagentStopHooks,
runUserPromptSubmitHooks,
} from "../../hooks";
import { settingsManager } from "../../settings-manager";
// Skip on Windows - test commands use bash syntax (&&, >&2, etc.)
// The executor itself is cross-platform, but these test commands are bash-specific
@@ -30,7 +30,10 @@ describe.skipIf(isWindows)("Hooks Integration Tests", () => {
let fakeHome: string;
let originalHome: string | undefined;
beforeEach(() => {
beforeEach(async () => {
// Reset settings manager FIRST before changing HOME
await settingsManager.reset();
const baseDir = join(
tmpdir(),
`hooks-integration-${process.pid}-${Math.random().toString(36).slice(2)}`,
@@ -43,10 +46,15 @@ describe.skipIf(isWindows)("Hooks Integration Tests", () => {
// Override HOME to isolate from real global hooks
originalHome = process.env.HOME;
process.env.HOME = fakeHome;
clearHooksCache();
// Initialize settings manager with new HOME
await settingsManager.initialize();
});
afterEach(() => {
afterEach(async () => {
// Wait for pending writes and reset
await settingsManager.reset();
// Restore HOME
process.env.HOME = originalHome;
try {
@@ -56,7 +64,6 @@ describe.skipIf(isWindows)("Hooks Integration Tests", () => {
} catch {
// Ignore cleanup errors
}
clearHooksCache();
});
// Helper to create hook config