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
JavaScript
// 🔗 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 };