UNPKG

agentsqripts

Version:

Comprehensive static code analysis toolkit for identifying technical debt, security vulnerabilities, performance issues, and code quality problems

173 lines (132 loc) 5.14 kB
/** * @file Unit tests for CLI error handler utility * @description Tests error handling, logging, and exit code management for CLI tools */ const { handleAnalysisError, handleFileAccessError, exitOnSeverityThreshold } = require('./errorHandler'); const qtests = require('qtests'); /** * Mock console and process for testing */ const mockConsole = { error: jest.fn ? jest.fn() : () => {}, log: jest.fn ? jest.fn() : () => {} }; const mockProcess = { exit: jest.fn ? jest.fn() : () => {}, exitCode: 0 }; /** * Test runner for error handler */ async function runTests() { console.log('=== Testing CLI Error Handler ==='); const results = { total: 0, passed: 0 }; // Test handleAnalysisError with generic error results.total++; try { const testError = new Error('Test analysis error'); const originalConsoleError = console.error; const originalProcessExit = process.exit; let errorLogged = false; let exitCalled = false; // Mock console.error and process.exit console.error = (message) => { errorLogged = message.includes('analysis error'); }; process.exit = (code) => { exitCalled = code === 1; }; handleAnalysisError(testError, 'test analysis'); // Restore originals console.error = originalConsoleError; process.exit = originalProcessExit; qtests.assert(errorLogged, 'handleAnalysisError should log error message'); qtests.assert(exitCalled, 'handleAnalysisError should call process.exit(1)'); console.log('✓ handleAnalysisError correctly handles analysis errors'); results.passed++; } catch (error) { console.log(`✗ handleAnalysisError test failed: ${error.message}`); } // Test handleFileAccessError for file not found results.total++; try { const testError = Object.assign(new Error('ENOENT: no such file'), { code: 'ENOENT' }); const originalConsoleError = console.error; let errorLogged = false; console.error = (message) => { errorLogged = message.includes('not found'); }; handleFileAccessError(testError, '/test/path'); console.error = originalConsoleError; qtests.assert(errorLogged, 'handleFileAccessError should log file not found message'); console.log('✓ handleFileAccessError correctly handles ENOENT errors'); results.passed++; } catch (error) { console.log(`✗ handleFileAccessError test failed: ${error.message}`); } // Test exitOnSeverityThreshold with high severity issues results.total++; try { const testResults = { summary: { severityBreakdown: { HIGH: 3, MEDIUM: 2, LOW: 1 } } }; const originalProcessExit = process.exit; let exitCalled = false; process.exit = (code) => { exitCalled = code === 1; }; exitOnSeverityThreshold(testResults); process.exit = originalProcessExit; qtests.assert(exitCalled, 'exitOnSeverityThreshold should exit with code 1 for high severity issues'); console.log('✓ exitOnSeverityThreshold correctly exits on high severity'); results.passed++; } catch (error) { console.log(`✗ exitOnSeverityThreshold test failed: ${error.message}`); } // Test exitOnSeverityThreshold with no high severity issues results.total++; try { const testResults = { summary: { severityBreakdown: { HIGH: 0, MEDIUM: 2, LOW: 1 } } }; const originalProcessExit = process.exit; let exitCalled = false; process.exit = (code) => { exitCalled = true; }; exitOnSeverityThreshold(testResults); process.exit = originalProcessExit; qtests.assert(!exitCalled, 'exitOnSeverityThreshold should not exit for non-high severity issues'); console.log('✓ exitOnSeverityThreshold correctly handles low severity issues'); results.passed++; } catch (error) { console.log(`✗ exitOnSeverityThreshold low severity test failed: ${error.message}`); } // Test error categorization results.total++; try { const permissionError = Object.assign(new Error('EACCES: permission denied'), { code: 'EACCES' }); const originalConsoleError = console.error; let errorType = ''; console.error = (message) => { if (message.includes('permission')) errorType = 'permission'; }; handleFileAccessError(permissionError, '/test/path'); console.error = originalConsoleError; qtests.assert(errorType === 'permission', 'handleFileAccessError should categorize permission errors'); console.log('✓ handleFileAccessError correctly categorizes different error types'); results.passed++; } catch (error) { console.log(`✗ handleFileAccessError categorization test failed: ${error.message}`); } console.log(`=== Error Handler Test Results ===`); console.log(`Tests passed: ${results.passed}/${results.total}`); console.log(`Success rate: ${((results.passed / results.total) * 100).toFixed(1)}%`); return results; } module.exports = { runTests };