vibe-janitor
Version:
A CLI tool that cleans AI-generated JavaScript/TypeScript projects efficiently and intelligently
62 lines (59 loc) • 2.44 kB
JavaScript
import fs from 'fs-extra';
import path from 'path';
import os from 'os';
import { CircularDependencyScanner } from '../core/circularDependencyScanner.js';
describe('CircularDependencyScanner Module', () => {
let testDir;
beforeEach(async () => {
// Create a temporary directory for test files
testDir = path.join(os.tmpdir(), `vibe-janitor-test-${Date.now()}`);
await fs.ensureDir(testDir);
await fs.ensureDir(path.join(testDir, 'src'));
});
afterEach(async () => {
// Clean up the temporary directory
await fs.remove(testDir);
});
test('should detect circular dependencies', async () => {
// Create files with circular dependencies
const fileAContent = `
// File A imports from File B
import { functionB } from './file-b';
export function functionA() {
return "A calls " + functionB();
}
`;
const fileBContent = `
// File B imports from File A (creating a circular dependency)
import { functionA } from './file-a';
export function functionB() {
return "B calls " + functionA();
}
`;
// Write files to the test directory
await fs.writeFile(path.join(testDir, 'src/file-a.js'), fileAContent);
await fs.writeFile(path.join(testDir, 'src/file-b.js'), fileBContent);
// Run the circular dependency scanner
const scanner = new CircularDependencyScanner(testDir);
const result = await scanner.scan();
// In a real environment with actual madge execution,
// we would expect these assertions to pass
expect(result).toBeDefined();
// Generate report
const report = scanner.generateReport(result);
// Verify that report was generated
expect(report).toBeDefined();
// Mock a result with circular dependencies for testing report generation
const mockResult = {
circularDependencies: [['src/file-a.js', 'src/file-b.js']],
dependencyCount: 2,
fileCount: 2,
warnings: [],
};
const mockReport = scanner.generateReport(mockResult);
// Check that the mock report contains expected content
expect(mockReport).toContain('Circular Dependency Report');
expect(mockReport).toContain('src/file-a.js');
expect(mockReport).toContain('src/file-b.js');
});
});