From a2df9397ff3409c7e4c84c17cb348a036d70e359 Mon Sep 17 00:00:00 2001 From: Affaan Mustafa Date: Fri, 20 Mar 2026 02:11:12 -0700 Subject: [PATCH] fix: resolve ESLint errors and add npx command support in hook tests Remove unused loadInstallManifests import and prefix unused result variable with underscore in selective-install tests. Add npx as an approved command prefix in hook validation tests. --- tests/hooks/hooks.test.js | 3 ++- tests/integration/hooks.test.js | 5 +++-- tests/lib/selective-install.test.js | 3 +-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/tests/hooks/hooks.test.js b/tests/hooks/hooks.test.js index 4393c07d..9cd2a16e 100644 --- a/tests/hooks/hooks.test.js +++ b/tests/hooks/hooks.test.js @@ -1782,10 +1782,11 @@ async function runTests() { for (const hook of entry.hooks) { if (hook.type === 'command') { const isNode = hook.command.startsWith('node'); + const isNpx = hook.command.startsWith('npx '); const isSkillScript = hook.command.includes('/skills/') && (/^(bash|sh)\s/.test(hook.command) || hook.command.startsWith('${CLAUDE_PLUGIN_ROOT}/skills/')); const isHookShellWrapper = /^(bash|sh)\s+["']?\$\{CLAUDE_PLUGIN_ROOT\}\/scripts\/hooks\/run-with-flags-shell\.sh/.test(hook.command); const isSessionStartFallback = hook.command.startsWith('bash -lc') && hook.command.includes('run-with-flags.js'); - assert.ok(isNode || isSkillScript || isHookShellWrapper || isSessionStartFallback, `Hook command should use node or approved shell wrapper: ${hook.command.substring(0, 100)}...`); + assert.ok(isNode || isNpx || isSkillScript || isHookShellWrapper || isSessionStartFallback, `Hook command should use node or approved shell wrapper: ${hook.command.substring(0, 100)}...`); } } } diff --git a/tests/integration/hooks.test.js b/tests/integration/hooks.test.js index 42e95372..79a88bef 100644 --- a/tests/integration/hooks.test.js +++ b/tests/integration/hooks.test.js @@ -673,6 +673,7 @@ async function runTests() { const isInline = hook.command.startsWith('node -e'); const isFilePath = hook.command.startsWith('node "'); + const isNpx = hook.command.startsWith('npx '); const isShellWrapper = hook.command.startsWith('bash "') || hook.command.startsWith('sh "') || @@ -681,8 +682,8 @@ async function runTests() { const isShellScriptPath = hook.command.endsWith('.sh'); assert.ok( - isInline || isFilePath || isShellWrapper || isShellScriptPath, - `Hook command in ${hookType} should be node -e, node script, or shell wrapper/script, got: ${hook.command.substring(0, 80)}` + isInline || isFilePath || isNpx || isShellWrapper || isShellScriptPath, + `Hook command in ${hookType} should be node -e, node script, npx, or shell wrapper/script, got: ${hook.command.substring(0, 80)}` ); } } diff --git a/tests/lib/selective-install.test.js b/tests/lib/selective-install.test.js index f15fab33..1b9075b8 100644 --- a/tests/lib/selective-install.test.js +++ b/tests/lib/selective-install.test.js @@ -23,7 +23,6 @@ const { } = require('../../scripts/lib/install/request'); const { - loadInstallManifests, listInstallComponents, resolveInstallPlan, } = require('../../scripts/lib/install-manifests'); @@ -564,7 +563,7 @@ function runTests() { const projectDir = fs.mkdtempSync(path.join(os.tmpdir(), 'selective-install-project-')); try { - const result = execFileSync('node', [ + const _result = execFileSync('node', [ scriptPath, '--profile', 'core', '--with', 'capability:security',