refactor: 确立独立子工程架构 (backend, admin, mpuniapp) 并同步更新 AGENTS.md 规范
这个提交包含在:
@@ -0,0 +1,168 @@
|
||||
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); // 设置超时时间为 30 秒
|
||||
|
||||
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);
|
||||
});
|
||||
|
||||
// 测试 AI 评审
|
||||
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); // 设置测试超时时间为 120 秒
|
||||
});
|
||||
|
||||
// 测试添加评审评论
|
||||
describe('addReviewComment', () => {
|
||||
// it('should add review comment to merge request', async () => {
|
||||
// const review = 'Test review comment';
|
||||
// console.log('添加合并请求评论:', review);
|
||||
// await expect(addReviewComment(
|
||||
// process.env.CI_PROJECT_ID,
|
||||
// 'merge_request',
|
||||
// process.env.CI_MERGE_REQUEST_IID,
|
||||
// review
|
||||
// )).resolves.not.toThrow();
|
||||
// }, 30000);
|
||||
|
||||
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 merge request', async () => {
|
||||
// console.log('开始处理合并请求评审...');
|
||||
// await expect(processReview(
|
||||
// process.env.CI_PROJECT_ID,
|
||||
// 'merge_request',
|
||||
// process.env.CI_MERGE_REQUEST_IID
|
||||
// )).resolves.not.toThrow();
|
||||
// console.log('合并请求评审完成');
|
||||
// }, 120000); // 设置超时时间为 120 秒
|
||||
|
||||
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);
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,25 @@
|
||||
// 设置测试环境变量
|
||||
process.env.NODE_ENV = 'test';
|
||||
|
||||
// GitLab 相关配置
|
||||
process.env.GITLAB_TOKEN = process.env.TEST_GITLAB_TOKEN;
|
||||
process.env.GITLAB_URL = process.env.TEST_GITLAB_URL || 'http://git.dcloud.io';
|
||||
|
||||
// DeepSeek API 配置
|
||||
process.env.DEEPSEEK_API_KEY = process.env.TEST_DEEPSEEK_API_KEY;
|
||||
|
||||
// 测试项目配置
|
||||
process.env.TEST_PROJECT_ID = '602';
|
||||
process.env.TEST_MERGE_REQUEST_IID = '1';
|
||||
process.env.TEST_COMMIT_SHA = 'f07f0dfe33e4099256bb23412d004502973c55c8';
|
||||
process.env.TEST_BRANCH = 'dev';
|
||||
process.env.TEST_PIPELINE_SOURCE = 'merge_request_event';
|
||||
process.env.CI_PROJECT_DIR = process.cwd();
|
||||
|
||||
// 添加新的配置
|
||||
process.env.CI_PROJECT_ID = process.env.TEST_PROJECT_ID;
|
||||
process.env.CI_MERGE_REQUEST_IID = process.env.TEST_MERGE_REQUEST_IID;
|
||||
process.env.CI_COMMIT_SHA = process.env.TEST_COMMIT_SHA;
|
||||
process.env.CI_COMMIT_BRANCH = process.env.TEST_BRANCH || 'dev';
|
||||
process.env.CI_PIPELINE_SOURCE = process.env.TEST_PIPELINE_SOURCE || 'push';
|
||||
process.env.CI_PROJECT_DIR = process.cwd() + '/../';
|
||||
在新工单中引用
屏蔽一个用户