loqatevars
Version:
Locate JavaScript files with 'const' or 'process.env' usage in LLM-generated codebases
56 lines (46 loc) • 2.06 kB
JavaScript
// Mock globby to avoid ESM loading issues
jest.mock('globby');
const { findMatchingFilesDetailed } = require('../lib/utils');
const fs = require('fs-extra');
const path = require('path');
describe('findMatchingFilesDetailed', () => {
const testDir = path.join(__dirname, 'detailed-data');
beforeAll(() => {
fs.ensureDirSync(testDir);
fs.writeFileSync(path.join(testDir, 'file1.js'), 'const x = 1;');
fs.writeFileSync(path.join(testDir, 'file2.js'), 'process.env.USER;');
});
afterAll(() => {
fs.removeSync(testDir);
});
test('should return details for matching files', async () => {
const result = await findMatchingFilesDetailed(testDir, []);
expect(result.matches.length).toBe(2);
const paths = result.matches.map(m => m.relativePath);
expect(paths).toContain('file1.js');
expect(paths).toContain('file2.js');
expect(result.summary.scannedFiles).toBe(2);
expect(result.summary.matchingFiles).toBe(2);
});
test('should throw error for invalid directory', async () => {
await expect(findMatchingFilesDetailed('./nonexistent')).rejects.toThrow('DIRECTORY_NOT_FOUND');
});
test('should classify reasons for each file case', async () => {
const caseDir = path.join(__dirname, 'reason-data');
try {
fs.ensureDirSync(caseDir); // ensure test directory
fs.writeFileSync(path.join(caseDir, 'envOnly.js'), 'console.log(process.env.API_KEY);');
fs.writeFileSync(path.join(caseDir, 'constOnly.js'), 'const a = 1;');
fs.writeFileSync(path.join(caseDir, 'both.js'), 'const b = 2; console.log(process.env.NODE_ENV);');
const result = await findMatchingFilesDetailed(caseDir, []);
expect(result.matches.length).toBe(3);
const reasons = {};
result.matches.forEach(m => { reasons[m.relativePath] = m.reason; });
expect(reasons['envOnly.js']).toBe('process.env');
expect(reasons['constOnly.js']).toBe('variables');
expect(reasons['both.js']).toBe('both');
} finally {
fs.removeSync(caseDir); // cleanup
}
});
});