index.test.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. const { loadProjectConfig, generateReviewPrompt, getAIReview, getChanges, addReviewComment, processReview } = require('../index');
  2. const fs = require('fs');
  3. const path = require('path');
  4. // 输出环境变量
  5. console.log('测试环境变量:');
  6. console.log('GITLAB_TOKEN:', process.env.GITLAB_TOKEN ? '已设置' : '未设置');
  7. console.log('GITLAB_URL:', process.env.GITLAB_URL);
  8. console.log('DEEPSEEK_API_KEY:', process.env.DEEPSEEK_API_KEY ? '已设置' : '未设置');
  9. console.log('CI_PROJECT_ID:', process.env.CI_PROJECT_ID);
  10. console.log('CI_MERGE_REQUEST_IID:', process.env.CI_MERGE_REQUEST_IID);
  11. console.log('CI_COMMIT_SHA:', process.env.CI_COMMIT_SHA);
  12. console.log('CI_COMMIT_BRANCH:', process.env.CI_COMMIT_BRANCH);
  13. console.log('CI_PIPELINE_SOURCE:', process.env.CI_PIPELINE_SOURCE);
  14. console.log('CI_PROJECT_DIR:', process.env.CI_PROJECT_DIR);
  15. console.log('----------------------------------------');
  16. describe('Code Review System', () => {
  17. // 测试配置文件加载
  18. describe('loadProjectConfig', () => {
  19. it('should load project configuration correctly', async () => {
  20. const config = loadProjectConfig();
  21. console.log('项目配置:', JSON.stringify(config, null, 2));
  22. expect(config).toBeDefined();
  23. expect(config.language).toBeDefined();
  24. expect(config.reviewGuidelines).toBeDefined();
  25. expect(config.reviewRules).toBeDefined();
  26. expect(config.ignoreFiles).toBeDefined();
  27. });
  28. });
  29. // 测试提示词生成
  30. describe('generateReviewPrompt', () => {
  31. it('should generate review prompt correctly', () => {
  32. const config = loadProjectConfig();
  33. const changes = [
  34. {
  35. file: 'test.js',
  36. diff: 'console.log("test");'
  37. }
  38. ];
  39. const prompt = generateReviewPrompt(config, JSON.stringify(changes));
  40. console.log('评审提示词:', prompt);
  41. expect(prompt).toContain(config.language);
  42. expect(prompt).toContain(config.reviewGuidelines);
  43. expect(prompt).toContain('test.js');
  44. });
  45. });
  46. // 测试获取代码变更
  47. describe('getChanges', () => {
  48. it('should get changes from merge request', async () => {
  49. const changes = await getChanges(
  50. process.env.CI_PROJECT_ID,
  51. 'merge_request',
  52. process.env.CI_MERGE_REQUEST_IID
  53. );
  54. console.log('合并请求变更:', JSON.stringify(changes, null, 2));
  55. expect(Array.isArray(changes)).toBe(true);
  56. if (changes.length > 0) {
  57. expect(changes[0]).toHaveProperty('file');
  58. expect(changes[0]).toHaveProperty('diff');
  59. }
  60. }, 30000); // 设置超时时间为 30 秒
  61. it('should get changes from push', async () => {
  62. const changes = await getChanges(
  63. process.env.CI_PROJECT_ID,
  64. 'push',
  65. process.env.CI_COMMIT_SHA
  66. );
  67. console.log('推送变更:', JSON.stringify(changes, null, 2));
  68. expect(Array.isArray(changes)).toBe(true);
  69. if (changes.length > 0) {
  70. expect(changes[0]).toHaveProperty('file');
  71. expect(changes[0]).toHaveProperty('diff');
  72. }
  73. }, 30000);
  74. });
  75. // 测试 AI 评审
  76. describe('getAIReview', () => {
  77. it('should get AI review for changes', async () => {
  78. console.log('开始 AI 评审测试...');
  79. console.log('加载项目配置...');
  80. const config = loadProjectConfig();
  81. console.log('项目配置加载完成');
  82. console.log('获取代码变更...');
  83. const sourceType = process.env.CI_PIPELINE_SOURCE === 'merge_request_event' ? 'merge_request' : 'push';
  84. const sourceId = sourceType === 'merge_request' ? process.env.CI_MERGE_REQUEST_IID : process.env.CI_COMMIT_SHA;
  85. console.log(`变更来源: ${sourceType}, ID: ${sourceId}`);
  86. const changes = await getChanges(
  87. process.env.CI_PROJECT_ID,
  88. sourceType,
  89. sourceId
  90. );
  91. console.log(`获取到 ${changes.length} 个文件变更`);
  92. changes.forEach(change => {
  93. console.log(`文件: ${change.file}`);
  94. console.log(`变更内容:\n${change.diff}`);
  95. });
  96. console.log('生成评审提示词...');
  97. const prompt = generateReviewPrompt(config, JSON.stringify(changes));
  98. console.log('评审提示词生成完成');
  99. console.log('调用 AI 进行评审...');
  100. const review = await getAIReview(prompt);
  101. console.log('AI 评审完成');
  102. console.log('评审结果:', review);
  103. expect(typeof review).toBe('string');
  104. expect(review.length).toBeGreaterThan(0);
  105. console.log('AI 评审测试完成');
  106. }, 120000); // 设置测试超时时间为 120 秒
  107. });
  108. // 测试添加评审评论
  109. describe('addReviewComment', () => {
  110. // it('should add review comment to merge request', async () => {
  111. // const review = 'Test review comment';
  112. // console.log('添加合并请求评论:', review);
  113. // await expect(addReviewComment(
  114. // process.env.CI_PROJECT_ID,
  115. // 'merge_request',
  116. // process.env.CI_MERGE_REQUEST_IID,
  117. // review
  118. // )).resolves.not.toThrow();
  119. // }, 30000);
  120. it('should add review comment to commit', async () => {
  121. const review = 'Test review comment';
  122. console.log('添加提交评论:', review);
  123. await expect(addReviewComment(
  124. process.env.CI_PROJECT_ID,
  125. 'push',
  126. process.env.CI_COMMIT_SHA,
  127. review
  128. )).resolves.not.toThrow();
  129. }, 30000);
  130. });
  131. // 测试完整评审流程
  132. describe('processReview', () => {
  133. // it('should process review for merge request', async () => {
  134. // console.log('开始处理合并请求评审...');
  135. // await expect(processReview(
  136. // process.env.CI_PROJECT_ID,
  137. // 'merge_request',
  138. // process.env.CI_MERGE_REQUEST_IID
  139. // )).resolves.not.toThrow();
  140. // console.log('合并请求评审完成');
  141. // }, 120000); // 设置超时时间为 120 秒
  142. it('should process review for push', async () => {
  143. console.log('开始处理推送评审...');
  144. await expect(processReview(
  145. process.env.CI_PROJECT_ID,
  146. 'push',
  147. process.env.CI_COMMIT_SHA
  148. )).resolves.not.toThrow();
  149. console.log('推送评审完成');
  150. }, 120000);
  151. });
  152. });