fix: update hook integration tests for auto-tmux-dev behavior

PR #344 replaced the blocking dev-server hook with auto-tmux-dev.js
which transforms commands into tmux sessions (exit 0) instead of
blocking them (exit 2). Updated 2 tests to match the new behavior.
This commit is contained in:
Affaan Mustafa
2026-03-07 22:45:44 -08:00
parent e3314f41e4
commit 6090401ccd

View File

@@ -251,19 +251,20 @@ async function runTests() {
assert.ok(result.stderr.includes('[PreCompact]'), 'Should output to stderr with prefix'); assert.ok(result.stderr.includes('[PreCompact]'), 'Should output to stderr with prefix');
})) passed++; else failed++; })) passed++; else failed++;
if (await asyncTest('blocking hooks output BLOCKED message', async () => { if (await asyncTest('dev server hook transforms command to tmux session', async () => {
// Test the dev server blocking hook — must send a matching command // Test the auto-tmux dev hook — transforms dev commands to run in tmux
const blockingCommand = hooks.hooks.PreToolUse[0].hooks[0].command; const hookCommand = hooks.hooks.PreToolUse[0].hooks[0].command;
const result = await runHookCommand(blockingCommand, { const result = await runHookCommand(hookCommand, {
tool_input: { command: 'npm run dev' } tool_input: { command: 'npm run dev' }
}); });
// Hook only blocks on non-Windows platforms (tmux is Unix-only) assert.strictEqual(result.code, 0, 'Hook should exit 0 (transforms, does not block)');
if (process.platform === 'win32') { // On Unix with tmux, stdout contains transformed JSON with tmux command
assert.strictEqual(result.code, 0, 'On Windows, hook should not block (exit 0)'); // On Windows or without tmux, stdout contains original JSON passthrough
} else { const output = result.stdout.trim();
assert.ok(result.stderr.includes('BLOCKED'), 'Blocking hook should output BLOCKED'); if (output) {
assert.strictEqual(result.code, 2, 'Blocking hook should exit with code 2'); const parsed = JSON.parse(output);
assert.ok(parsed.tool_input, 'Should output valid JSON with tool_input');
} }
})) passed++; else failed++; })) passed++; else failed++;
@@ -277,18 +278,20 @@ async function runTests() {
assert.strictEqual(result.code, 0, 'Non-blocking hook should exit 0'); assert.strictEqual(result.code, 0, 'Non-blocking hook should exit 0');
})) passed++; else failed++; })) passed++; else failed++;
if (await asyncTest('blocking hooks exit with code 2', async () => { if (await asyncTest('dev server hook transforms yarn dev to tmux session', async () => {
// The dev server blocker blocks when a dev server command is detected // The auto-tmux dev hook transforms dev commands (yarn dev, npm run dev, etc.)
const blockingCommand = hooks.hooks.PreToolUse[0].hooks[0].command; const hookCommand = hooks.hooks.PreToolUse[0].hooks[0].command;
const result = await runHookCommand(blockingCommand, { const result = await runHookCommand(hookCommand, {
tool_input: { command: 'yarn dev' } tool_input: { command: 'yarn dev' }
}); });
// Hook only blocks on non-Windows platforms (tmux is Unix-only) // Hook always exits 0 — it transforms, never blocks
if (process.platform === 'win32') { assert.strictEqual(result.code, 0, 'Hook should exit 0 (transforms, does not block)');
assert.strictEqual(result.code, 0, 'On Windows, hook should not block (exit 0)'); const output = result.stdout.trim();
} else { if (output) {
assert.strictEqual(result.code, 2, 'Blocking hook should exit 2'); const parsed = JSON.parse(output);
assert.ok(parsed.tool_input, 'Should output valid JSON with tool_input');
assert.ok(parsed.tool_input.command, 'Should have a command in output');
} }
})) passed++; else failed++; })) passed++; else failed++;