UNPKG

agentsqripts

Version:

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

119 lines (103 loc) 4.17 kB
// 🔗 Tests: analyzeSRPViolations → scoreFileForSRP → generateSRPRecommendations const { analyzeSRPViolations, analyzeSingleFile, scoreFileForSRP } = require('./analyzeSRPViolations'); const fs = require('fs'); const path = require('path'); /** * Test runner for SRP analysis utilities */ async function runTests() { const results = { total: 0, passed: 0 }; console.log('=== Testing SRP Analysis Utilities ==='); // Test scoreFileForSRP with sample content results.total++; try { const sampleContent = ` export const getData = () => fetch('/api/data'); export const validateInput = (input) => input.length > 0; export const renderComponent = () => <div>Hello</div>; export const connectToDatabase = () => db.connect(); export const logError = (error) => console.error(error); `; const analysis = scoreFileForSRP(sampleContent, 'test.js'); if (typeof analysis.score === 'number' && Array.isArray(analysis.violations) && typeof analysis.severity === 'string' && analysis.details) { console.log('✓ scoreFileForSRP returns valid analysis structure'); results.passed++; } else { console.log('✗ scoreFileForSRP failed - invalid analysis structure'); } } catch (error) { console.log(`✗ scoreFileForSRP failed: ${error.message}`); } // Test analyzeSingleFile with this test file results.total++; try { const analysis = await analyzeSingleFile(__filename); if (analysis && typeof analysis.score === 'number' && typeof analysis.severity === 'string' && Array.isArray(analysis.violations) && Array.isArray(analysis.recommendations)) { console.log('✓ analyzeSingleFile returns valid analysis'); results.passed++; } else { console.log('✗ analyzeSingleFile failed - invalid analysis structure'); } } catch (error) { console.log(`✗ analyzeSingleFile failed: ${error.message}`); } // Test analyzeSRPViolations with current directory (limited scope) results.total++; try { const analysis = await analyzeSRPViolations('.', { extensions: ['.js'], minScore: 0, includeDetails: false }); if (analysis && analysis.summary && typeof analysis.summary.totalFiles === 'number' && typeof analysis.summary.violatingFiles === 'number' && Array.isArray(analysis.violations) && Array.isArray(analysis.recommendations)) { console.log('✓ analyzeSRPViolations returns valid project analysis'); results.passed++; } else { console.log('✗ analyzeSRPViolations failed - invalid project analysis structure'); } } catch (error) { console.log(`✗ analyzeSRPViolations failed: ${error.message}`); } // Test severity level detection results.total++; try { const highViolationContent = ` export const fetch1 = () => fetch('/api/1'); export const fetch2 = () => fetch('/api/2'); export const render1 = () => <div>1</div>; export const render2 = () => <div>2</div>; export const validate1 = (x) => x; export const validate2 = (y) => y; export const db1 = () => db.connect(); export const db2 = () => db.query(); // This is a very long file with many lines ${'// filler line\n'.repeat(350)} `; const analysis = scoreFileForSRP(highViolationContent, 'utils.js'); if (analysis.score > 5 && ['HIGH', 'CRITICAL'].includes(analysis.severity)) { console.log('✓ SRP analysis correctly identifies high violations'); results.passed++; } else { console.log(`✗ SRP analysis failed to identify high violations (score: ${analysis.score}, severity: ${analysis.severity})`); } } catch (error) { console.log(`✗ High violation detection test failed: ${error.message}`); } console.log(`=== SRP Analysis 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 };