security-scanner-pagination-test.jsā¢6.63 kB
/**
* Test Enhanced scan_security_vulnerabilities with Pagination
*/
import { handleSecurityScanner } from '../lib/tools/security-scanner.js';
async function testSecurityScannerPagination() {
console.log('š Testing Enhanced scan_security_vulnerabilities with Pagination');
console.log('================================================================');
// Test 1: Basic pagination functionality
console.log('ā Testing basic pagination functionality...');
try {
const result1 = await handleSecurityScanner({
projectPath: '.',
format: 'detailed',
limit: 5,
offset: 0,
sortBy: 'severity',
sortOrder: 'desc'
});
console.log('ā
Basic pagination test completed');
console.log(' - Response type:', typeof result1.content[0].text);
const output = result1.content[0].text;
console.log(' - Contains pagination info:', output.includes('š Results:'));
console.log(' - Contains sorting info:', output.includes('š Sorted by:'));
} catch (error) {
console.log('ā Basic pagination test failed:', error.message);
}
// Test 2: Different sorting options
console.log('ā Testing different sorting options...');
try {
const sortTests = [
{ sortBy: 'severity', sortOrder: 'desc' },
{ sortBy: 'package', sortOrder: 'asc' },
{ sortBy: 'title', sortOrder: 'asc' }
];
for (const sortTest of sortTests) {
const result = await handleSecurityScanner({
projectPath: '.',
format: 'detailed',
limit: 3,
...sortTest
});
const output = result.content[0].text;
const hasSortInfo = output.includes(`š Sorted by: ${sortTest.sortBy} (${sortTest.sortOrder})`);
console.log(`ā
${sortTest.sortBy} ${sortTest.sortOrder} sorting: ${hasSortInfo ? 'included' : 'missing'}`);
}
} catch (error) {
console.log('ā Sorting options test failed:', error.message);
}
// Test 3: Pagination navigation
console.log('ā Testing pagination navigation...');
try {
// Test first page
const page1 = await handleSecurityScanner({
projectPath: '.',
limit: 2,
offset: 0,
sortBy: 'severity'
});
// Test second page
const page2 = await handleSecurityScanner({
projectPath: '.',
limit: 2,
offset: 2,
sortBy: 'severity'
});
const output1 = page1.content[0].text;
const output2 = page2.content[0].text;
console.log('ā
Pagination navigation test completed');
console.log(' - Page 1 has pagination:', output1.includes('š Pagination:'));
console.log(' - Page 2 has pagination:', output2.includes('š Pagination:'));
console.log(' - Page 1 has next nav:', output1.includes('ā Next:'));
console.log(' - Page 2 has prev nav:', output2.includes('ā Previous:'));
} catch (error) {
console.log('ā Pagination navigation test failed:', error.message);
}
// Test 4: Limit boundary testing
console.log('ā Testing limit boundary conditions...');
try {
const limits = [1, 10, 50, 100];
for (const limit of limits) {
const result = await handleSecurityScanner({
projectPath: '.',
limit,
offset: 0,
format: 'summary'
});
console.log(`ā
Limit ${limit}: handled successfully`);
}
} catch (error) {
console.log('ā Limit boundary test failed:', error.message);
}
// Test 5: Edge cases
console.log('ā Testing edge cases...');
try {
// Test with high offset (beyond available data)
const highOffsetResult = await handleSecurityScanner({
projectPath: '.',
limit: 10,
offset: 1000,
sortBy: 'severity'
});
console.log('ā
High offset test completed');
// Test with zero limit (should use default)
const zeroLimitResult = await handleSecurityScanner({
projectPath: '.',
limit: 0, // Should be handled gracefully
offset: 0
});
console.log('ā
Zero limit test completed');
} catch (error) {
console.log('ā Edge cases test failed:', error.message);
}
// Test 6: Format compatibility
console.log('ā Testing format compatibility...');
try {
const formats = ['summary', 'detailed'];
for (const format of formats) {
const result = await handleSecurityScanner({
projectPath: '.',
format,
limit: 5,
offset: 0,
sortBy: 'severity'
});
const output = result.content[0].text;
console.log(`ā
Format ${format}: contains scan results header:`,
output.includes('š Security Vulnerability Scan Results'));
}
} catch (error) {
console.log('ā Format compatibility test failed:', error.message);
}
console.log('ā
Enhanced scan_security_vulnerabilities pagination testing completed');
}
async function testSecurityScannerPerformance() {
console.log('\nā” Testing scan_security_vulnerabilities Performance');
console.log('==================================================');
try {
console.log('ā Testing performance with different configurations...');
const configs = [
{ name: 'Small page', limit: 5, offset: 0 },
{ name: 'Medium page', limit: 20, offset: 0 },
{ name: 'Large page', limit: 50, offset: 0 }
];
for (const config of configs) {
const startTime = Date.now();
await handleSecurityScanner({
projectPath: '.',
format: 'detailed',
sortBy: 'severity',
...config
});
const endTime = Date.now();
console.log(`ā
${config.name}: ${endTime - startTime}ms`);
}
} catch (error) {
console.log('ā Performance test failed:', error.message);
}
}
async function runAllSecurityScannerTests() {
try {
await testSecurityScannerPagination();
await testSecurityScannerPerformance();
console.log('\nš Enhanced scan_security_vulnerabilities Test Summary:');
console.log('ā
All security scanner pagination tests completed successfully');
console.log('š Enhanced pagination and sorting for security scans is fully functional!');
return true;
} catch (error) {
console.error('ā Security scanner pagination tests failed:', error);
console.error(error.stack);
return false;
}
}
// Run tests if called directly
if (import.meta.url === `file://${process.argv[1]}`) {
runAllSecurityScannerTests().then(success => {
process.exit(success ? 0 : 1);
});
}
export { runAllSecurityScannerTests };