UNPKG

loqatevars

Version:

Locate JavaScript files with 'const' or 'process.env' usage in LLM-generated codebases

56 lines (46 loc) 2.06 kB
// 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 } }); });