agentsqripts
Version:
Comprehensive static code analysis toolkit for identifying technical debt, security vulnerabilities, performance issues, and code quality problems
129 lines (104 loc) • 4.67 kB
JavaScript
/**
* @file Grade Utils test bridge
* @description Bridge test file to import from grade-calculation module
*/
const qtests = require('qtests');
const { scoreToGrade, gradeToEmoji, calculateGradeFromIssues, getGradeColor, formatGradeDisplay } = require('./grade-calculation');
async function runTests() {
console.log('\n=== Testing Grade Calculation Utilities ===');
const results = { total: 0, passed: 0 };
// Test scoreToGrade function
results.total++;
try {
qtests.assert(scoreToGrade(95) === 'A', 'Score 95 should be A');
qtests.assert(scoreToGrade(85) === 'B', 'Score 85 should be B');
qtests.assert(scoreToGrade(75) === 'C', 'Score 75 should be C');
qtests.assert(scoreToGrade(65) === 'D', 'Score 65 should be D');
qtests.assert(scoreToGrade(55) === 'F', 'Score 55 should be F');
console.log('✓ scoreToGrade correctly converts scores to grades');
results.passed++;
} catch (error) {
console.log(`✗ scoreToGrade test failed: ${error.message}`);
}
// Test gradeToEmoji function
results.total++;
try {
const emojiA = gradeToEmoji('A');
qtests.assert(typeof emojiA === 'string', 'gradeToEmoji should return string');
qtests.assert(emojiA.length > 0, 'Emoji should not be empty');
const emojiF = gradeToEmoji('F');
qtests.assert(emojiF !== emojiA, 'Different grades should have different emojis');
console.log('✓ gradeToEmoji correctly converts grades to emojis');
results.passed++;
} catch (error) {
console.log(`✗ gradeToEmoji test failed: ${error.message}`);
}
// Test calculateGradeFromIssues function
results.total++;
try {
const grade0 = calculateGradeFromIssues(0, 1);
qtests.assert(grade0 === 'A', 'No issues should be A grade');
const grade1 = calculateGradeFromIssues(1, 1);
qtests.assert(grade1 === 'B', 'One issue per file should be B grade');
const gradeMany = calculateGradeFromIssues(10, 1);
qtests.assert(gradeMany === 'F', 'Many issues should be F grade');
console.log('✓ calculateGradeFromIssues correctly calculates grades from issue counts');
results.passed++;
} catch (error) {
console.log(`✗ calculateGradeFromIssues test failed: ${error.message}`);
}
// Test getGradeColor function
results.total++;
try {
const colorA = getGradeColor('A');
qtests.assert(typeof colorA === 'string', 'getGradeColor should return string');
qtests.assert(colorA === 'green', 'A grade should be green');
const colorF = getGradeColor('F');
qtests.assert(colorF === 'red', 'F grade should be red');
console.log('✓ getGradeColor correctly maps grades to colors');
results.passed++;
} catch (error) {
console.log(`✗ getGradeColor test failed: ${error.message}`);
}
// Test formatGradeDisplay function
results.total++;
try {
const display = formatGradeDisplay('A', true);
qtests.assert(typeof display === 'string', 'formatGradeDisplay should return string');
qtests.assert(display.includes('A'), 'Display should include grade letter');
const displayNoEmoji = formatGradeDisplay('A', false);
qtests.assert(displayNoEmoji === 'A', 'Display without emoji should be just letter');
console.log('✓ formatGradeDisplay correctly formats grade displays');
results.passed++;
} catch (error) {
console.log(`✗ formatGradeDisplay test failed: ${error.message}`);
}
// Test edge cases
results.total++;
try {
qtests.assert(scoreToGrade(100) === 'A', 'Perfect score should be A');
qtests.assert(scoreToGrade(0) === 'F', 'Zero score should be F');
// Test boundary values
qtests.assert(scoreToGrade(90) === 'A', 'Boundary 90 should be A');
qtests.assert(scoreToGrade(80) === 'B', 'Boundary 80 should be B');
console.log('✓ Grade utilities correctly handle edge cases');
results.passed++;
} catch (error) {
console.log(`✗ Edge cases test failed: ${error.message}`);
}
// Test perfect score calculation
results.total++;
try {
const perfectGrade = calculateGradeFromIssues(0, 5);
qtests.assert(perfectGrade === 'A', 'No issues across multiple files should be A');
console.log('✓ Grade calculation handles perfect scores correctly');
results.passed++;
} catch (error) {
console.log(`✗ Perfect score test failed: ${error.message}`);
}
console.log(`=== Grade Utilities Test Results ===`);
console.log(`Tests passed: ${results.passed}/${results.total}`);
console.log(`Success rate: ${((results.passed / results.total) * 100).toFixed(1)}%\n`);
return results;
}
module.exports = { runTests };