Files
dev-intel-v2/test/test-repo-profiler.js

98 lines
2.7 KiB
JavaScript
Raw Normal View History

const assert = require('node:assert');
const fs = require('fs');
const path = require('path');
const { profileRepo, ARCHETYPES } = require('../repo-profiler');
const TEST_DIR = path.join(__dirname, 'temp-fixtures');
function setupFixture(name, files) {
const dir = path.join(TEST_DIR, name);
fs.mkdirSync(dir, { recursive: true });
for (const [file, content] of Object.entries(files)) {
fs.writeFileSync(path.join(dir, file), content);
}
return dir;
}
function teardownFixtures() {
if (fs.existsSync(TEST_DIR)) {
fs.rmSync(TEST_DIR, { recursive: true, force: true });
}
}
async function runTests() {
teardownFixtures();
try {
// 1. Test Infrastructure detection
const infraDir = setupFixture('infra', {
'Chart.yaml': 'apiVersion: v2\nname: my-chart',
'main.tf': 'resource "aws_vpc" "main" {}'
});
let result = profileRepo(infraDir);
assert.strictEqual(result.archetype, ARCHETYPES.INFRASTRUCTURE, 'Should detect Infrastructure');
assert.ok(result.confidence > 0.8, 'Confidence should be high');
// 2. Test Frontend SPA detection
const frontendDir = setupFixture('frontend', {
'package.json': JSON.stringify({
dependencies: {
react: '^18.0.0',
'react-dom': '^18.0.0'
},
devDependencies: {
vite: '^4.0.0'
}
})
});
result = profileRepo(frontendDir);
assert.strictEqual(result.archetype, ARCHETYPES.FRONTEND, 'Should detect Frontend SPA');
assert.ok(result.signals.includes('frontend_framework'));
// 3. Test Backend API detection
const backendDir = setupFixture('backend', {
'package.json': JSON.stringify({
dependencies: {
express: '^4.18.2'
}
})
});
result = profileRepo(backendDir);
assert.strictEqual(result.archetype, ARCHETYPES.BACKEND, 'Should detect Backend API');
// 4. Test Library detection
const libraryDir = setupFixture('library', {
'package.json': JSON.stringify({
main: 'index.js',
exports: {
'.': './index.js'
},
dependencies: {
lodash: '^4.17.21'
}
})
});
result = profileRepo(libraryDir);
assert.strictEqual(result.archetype, ARCHETYPES.LIBRARY, 'Should detect Library');
// 5. Monorepo detection
const monorepoDir = setupFixture('monorepo', {
'package.json': JSON.stringify({
workspaces: ['packages/*']
}),
'turbo.json': '{}'
});
result = profileRepo(monorepoDir);
assert.strictEqual(result.archetype, ARCHETYPES.MONOREPO, 'Should detect Monorepo');
console.log('✅ repo-profiler tests passed!');
} finally {
teardownFixtures();
}
}
runTests().catch(err => {
console.error(err);
process.exit(1);
});