const { loadProjectConfig, generateReviewPrompt, getAIReview, getChanges, addReviewComment, processReview } = require('../index');
const fs = require('fs');
const path = require('path');
console.log('测试环境变量:');
console.log('GITLAB_TOKEN:', process.env.GITLAB_TOKEN ? '已设置' : '未设置');
console.log('GITLAB_URL:', process.env.GITLAB_URL);
console.log('DEEPSEEK_API_KEY:', process.env.DEEPSEEK_API_KEY ? '已设置' : '未设置');
console.log('CI_PROJECT_ID:', process.env.CI_PROJECT_ID);
console.log('CI_MERGE_REQUEST_IID:', process.env.CI_MERGE_REQUEST_IID);
console.log('CI_COMMIT_SHA:', process.env.CI_COMMIT_SHA);
console.log('CI_COMMIT_BRANCH:', process.env.CI_COMMIT_BRANCH);
console.log('CI_PIPELINE_SOURCE:', process.env.CI_PIPELINE_SOURCE);
console.log('CI_PROJECT_DIR:', process.env.CI_PROJECT_DIR);
console.log('----------------------------------------');
describe('Code Review System', () => {
describe('loadProjectConfig', () => {
it('should load project configuration correctly', async () => {
const config = loadProjectConfig();
console.log('项目配置:', JSON.stringify(config, null, 2));
expect(config).toBeDefined();
expect(config.language).toBeDefined();
expect(config.reviewGuidelines).toBeDefined();
expect(config.reviewRules).toBeDefined();
expect(config.ignoreFiles).toBeDefined();
});
});
describe('generateReviewPrompt', () => {
it('should generate review prompt correctly', () => {
const config = loadProjectConfig();
const changes = [
{
file: 'test.js',
diff: 'console.log("test");'
}
];
const prompt = generateReviewPrompt(config, JSON.stringify(changes));
console.log('评审提示词:', prompt);
expect(prompt).toContain(config.language);
expect(prompt).toContain(config.reviewGuidelines);
expect(prompt).toContain('test.js');
});
});
describe('getChanges', () => {
it('should get changes from merge request', async () => {
const changes = await getChanges(
process.env.CI_PROJECT_ID,
'merge_request',
process.env.CI_MERGE_REQUEST_IID
);
console.log('合并请求变更:', JSON.stringify(changes, null, 2));
expect(Array.isArray(changes)).toBe(true);
if (changes.length > 0) {
expect(changes[0]).toHaveProperty('file');
expect(changes[0]).toHaveProperty('diff');
}
}, 30000);
it('should get changes from push', async () => {
const changes = await getChanges(
process.env.CI_PROJECT_ID,
'push',
process.env.CI_COMMIT_SHA
);
console.log('推送变更:', JSON.stringify(changes, null, 2));
expect(Array.isArray(changes)).toBe(true);
if (changes.length > 0) {
expect(changes[0]).toHaveProperty('file');
expect(changes[0]).toHaveProperty('diff');
}
}, 30000);
});
describe('getAIReview', () => {
it('should get AI review for changes', async () => {
console.log('开始 AI 评审测试...');
console.log('加载项目配置...');
const config = loadProjectConfig();
console.log('项目配置加载完成');
console.log('获取代码变更...');
const sourceType = process.env.CI_PIPELINE_SOURCE === 'merge_request_event' ? 'merge_request' : 'push';
const sourceId = sourceType === 'merge_request' ? process.env.CI_MERGE_REQUEST_IID : process.env.CI_COMMIT_SHA;
console.log(`变更来源: ${sourceType}, ID: ${sourceId}`);
const changes = await getChanges(
process.env.CI_PROJECT_ID,
sourceType,
sourceId
);
console.log(`获取到 ${changes.length} 个文件变更`);
changes.forEach(change => {
console.log(`文件: ${change.file}`);
console.log(`变更内容:\n${change.diff}`);
});
console.log('生成评审提示词...');
const prompt = generateReviewPrompt(config, JSON.stringify(changes));
console.log('评审提示词生成完成');
console.log('调用 AI 进行评审...');
const review = await getAIReview(prompt);
console.log('AI 评审完成');
console.log('评审结果:', review);
expect(typeof review).toBe('string');
expect(review.length).toBeGreaterThan(0);
console.log('AI 评审测试完成');
}, 120000);
});
describe('addReviewComment', () => {
it('should add review comment to commit', async () => {
const review = 'Test review comment';
console.log('添加提交评论:', review);
await expect(addReviewComment(
process.env.CI_PROJECT_ID,
'push',
process.env.CI_COMMIT_SHA,
review
)).resolves.not.toThrow();
}, 30000);
});
describe('processReview', () => {
it('should process review for push', async () => {
console.log('开始处理推送评审...');
await expect(processReview(
process.env.CI_PROJECT_ID,
'push',
process.env.CI_COMMIT_SHA
)).resolves.not.toThrow();
console.log('推送评审完成');
}, 120000);
});
});