Files
dev-intel-v2/test/test-eval-generator.js

73 lines
2.9 KiB
JavaScript
Raw Normal View History

const assert = require('node:assert');
const fs = require('fs');
const path = require('path');
const os = require('os');
const { generateQuestions } = require('../eval-generator');
async function runTests() {
console.log('Running test-eval-generator.js...');
// Create a temp directory with mock snapshot and minimal repo structure
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'eval-gen-test-'));
const mockRepoDir = path.join(tmpDir, 'repo');
fs.mkdirSync(mockRepoDir, { recursive: true });
// Write the mock graph as a snapshot file
const mockGraph = require('./fixtures/mock-express-graph.json');
const snapshotPath = path.join(tmpDir, 'snapshot.json');
fs.writeFileSync(snapshotPath, JSON.stringify(mockGraph));
// Create a minimal package.json so repo-profiler can detect it
fs.writeFileSync(path.join(mockRepoDir, 'package.json'), JSON.stringify({
name: 'test-api',
dependencies: { express: '^4.18.0' }
}));
try {
// 1. Test that generator runs without crashing on a small repo
const questions = generateQuestions(snapshotPath, mockRepoDir);
// 2. Test that questions are returned as an array
assert.ok(Array.isArray(questions), 'Should return an array');
console.log(` Generated ${questions.length} questions from mock repo`);
// 3. Test that each question has required fields
for (const q of questions) {
assert.ok(q.question, 'Missing question field');
assert.ok(q.expected_answer || q.answer, 'Missing expected_answer/answer field');
assert.ok(q.category, 'Missing category field');
assert.ok(q.source_entity || q.source, 'Missing source_entity/source field');
}
// 4. Test no Foxtrot-specific strings
for (const q of questions) {
const str = JSON.stringify(q).toLowerCase();
assert.ok(!str.includes('foxtrot'), `Should not contain "foxtrot": ${q.question}`);
assert.ok(!str.includes('vpc_cidr'), `Should not contain "vpc_cidr": ${q.question}`);
assert.ok(!str.includes('mdm-app'), `Should not contain "mdm-app": ${q.question}`);
}
// 5. Test that a real repo (Foxtrot) generates >= 20 questions
const foxtrotSnapshot = path.resolve(__dirname, '../snapshots/foxtrot-clean.json');
const foxtrotRepo = '/home/node/.openclaw/workspace/agents/max/foxtrot/';
if (fs.existsSync(foxtrotSnapshot) && fs.existsSync(foxtrotRepo)) {
const foxtrotQuestions = generateQuestions(foxtrotSnapshot, foxtrotRepo);
assert.ok(foxtrotQuestions.length >= 20,
`Foxtrot should generate >= 20 questions, got ${foxtrotQuestions.length}`);
console.log(` Foxtrot: ${foxtrotQuestions.length} questions generated`);
} else {
console.log(' Skipping Foxtrot integration test (snapshot/repo not found)');
}
console.log('✅ eval-generator tests passed!');
} finally {
// Cleanup
fs.rmSync(tmpDir, { recursive: true, force: true });
}
}
runTests().catch(err => {
console.error(err);
process.exit(1);
});