mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-03-30 13:43:26 +08:00
- agents: cpp-build-resolver, cpp-reviewer - commands: cpp-build, cpp-review, cpp-test - rules: cpp/ (coding-style, hooks, patterns, security, testing) - tests: 9 new hook test files with comprehensive coverage Cherry-picked from PR #436.
109 lines
3.3 KiB
JavaScript
109 lines
3.3 KiB
JavaScript
/**
|
|
* Tests for scripts/hooks/check-hook-enabled.js
|
|
*
|
|
* Tests the CLI wrapper around isHookEnabled.
|
|
*
|
|
* Run with: node tests/hooks/check-hook-enabled.test.js
|
|
*/
|
|
|
|
const assert = require('assert');
|
|
const path = require('path');
|
|
const { spawnSync } = require('child_process');
|
|
|
|
const script = path.join(__dirname, '..', '..', 'scripts', 'hooks', 'check-hook-enabled.js');
|
|
|
|
function test(name, fn) {
|
|
try {
|
|
fn();
|
|
console.log(` \u2713 ${name}`);
|
|
return true;
|
|
} catch (err) {
|
|
console.log(` \u2717 ${name}`);
|
|
console.log(` Error: ${err.message}`);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function runScript(args = [], envOverrides = {}) {
|
|
const env = { ...process.env, ...envOverrides };
|
|
// Remove potentially interfering env vars unless explicitly set
|
|
if (!envOverrides.ECC_HOOK_PROFILE) delete env.ECC_HOOK_PROFILE;
|
|
if (!envOverrides.ECC_DISABLED_HOOKS) delete env.ECC_DISABLED_HOOKS;
|
|
|
|
const result = spawnSync('node', [script, ...args], {
|
|
encoding: 'utf8',
|
|
timeout: 10000,
|
|
env,
|
|
});
|
|
return {
|
|
code: result.status || 0,
|
|
stdout: result.stdout || '',
|
|
stderr: result.stderr || '',
|
|
};
|
|
}
|
|
|
|
function runTests() {
|
|
console.log('\n=== Testing check-hook-enabled.js ===\n');
|
|
|
|
let passed = 0;
|
|
let failed = 0;
|
|
|
|
console.log('No arguments:');
|
|
|
|
if (test('returns yes when no hookId provided', () => {
|
|
const result = runScript([]);
|
|
assert.strictEqual(result.stdout, 'yes');
|
|
})) passed++; else failed++;
|
|
|
|
console.log('\nDefault profile (standard):');
|
|
|
|
if (test('returns yes for hook with default profiles', () => {
|
|
const result = runScript(['my-hook']);
|
|
assert.strictEqual(result.stdout, 'yes');
|
|
})) passed++; else failed++;
|
|
|
|
if (test('returns yes for hook with standard,strict profiles', () => {
|
|
const result = runScript(['my-hook', 'standard,strict']);
|
|
assert.strictEqual(result.stdout, 'yes');
|
|
})) passed++; else failed++;
|
|
|
|
if (test('returns no for hook with only strict profile', () => {
|
|
const result = runScript(['my-hook', 'strict']);
|
|
assert.strictEqual(result.stdout, 'no');
|
|
})) passed++; else failed++;
|
|
|
|
if (test('returns no for hook with only minimal profile', () => {
|
|
const result = runScript(['my-hook', 'minimal']);
|
|
assert.strictEqual(result.stdout, 'no');
|
|
})) passed++; else failed++;
|
|
|
|
console.log('\nDisabled hooks:');
|
|
|
|
if (test('returns no when hook is disabled via env', () => {
|
|
const result = runScript(['my-hook'], { ECC_DISABLED_HOOKS: 'my-hook' });
|
|
assert.strictEqual(result.stdout, 'no');
|
|
})) passed++; else failed++;
|
|
|
|
if (test('returns yes when different hook is disabled', () => {
|
|
const result = runScript(['my-hook'], { ECC_DISABLED_HOOKS: 'other-hook' });
|
|
assert.strictEqual(result.stdout, 'yes');
|
|
})) passed++; else failed++;
|
|
|
|
console.log('\nProfile overrides:');
|
|
|
|
if (test('returns yes for strict profile with strict-only hook', () => {
|
|
const result = runScript(['my-hook', 'strict'], { ECC_HOOK_PROFILE: 'strict' });
|
|
assert.strictEqual(result.stdout, 'yes');
|
|
})) passed++; else failed++;
|
|
|
|
if (test('returns yes for minimal profile with minimal-only hook', () => {
|
|
const result = runScript(['my-hook', 'minimal'], { ECC_HOOK_PROFILE: 'minimal' });
|
|
assert.strictEqual(result.stdout, 'yes');
|
|
})) passed++; else failed++;
|
|
|
|
console.log(`\nResults: Passed: ${passed}, Failed: ${failed}`);
|
|
process.exit(failed > 0 ? 1 : 0);
|
|
}
|
|
|
|
runTests();
|