goal-management-smoke-test.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. const assert = require('assert/strict');
  2. const fs = require('fs');
  3. const os = require('os');
  4. const path = require('path');
  5. const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'qiwei-goal-smoke-'));
  6. process.env.QIWEI_OUTPUTS_DIR = tempDir;
  7. const {
  8. qiweiGoalCreatePlan,
  9. qiweiGoalGet,
  10. qiweiGoalUpdateTask,
  11. qiweiGoalImportMeetingActions,
  12. } = require('../mcp/src/tools/qiwei-goal-management-run');
  13. async function main() {
  14. try {
  15. const created = await qiweiGoalCreatePlan({
  16. title: '企微智能办公上线',
  17. objective: '让客户可以使用会议、目标推进和智能客服能力',
  18. owner: '项目负责人',
  19. deadline: '2026-08-31',
  20. acceptance: '三类核心场景全部通过验收',
  21. milestones: [{
  22. title: '客户试用',
  23. deadline: '2026-08-15',
  24. tasks: [{ title: '完成客户培训', owner: '实施顾问', deadline: '2026-08-10', acceptance: '培训签到和反馈完成' }],
  25. }],
  26. });
  27. assert.equal(created.status, 'ok');
  28. assert.equal(created.summary.taskCount, 1);
  29. assert.equal(created.summary.progress, 0);
  30. assert.equal(created.files.length, 1);
  31. const goalId = created.summary.goalId;
  32. const taskId = created.data.plan.milestones[0].tasks[0].id;
  33. const imported = await qiweiGoalImportMeetingActions({
  34. goalId,
  35. meetingTitle: '客户试用推进会',
  36. meetingDate: '2026-07-16',
  37. actions: [
  38. { title: '整理试用账号', owner: '产品经理', deadline: '2026-07-20' },
  39. { title: '确认第二轮演示时间' },
  40. ],
  41. });
  42. assert.equal(imported.status, 'ok');
  43. assert.equal(imported.summary.imported, 2);
  44. assert.equal(imported.summary.needsConfirmation, 1);
  45. const updated = await qiweiGoalUpdateTask({ goalId, taskId, status: 'done', note: '培训已完成' });
  46. assert.equal(updated.status, 'ok');
  47. assert.equal(updated.summary.done, 1);
  48. assert.equal(updated.summary.progress, 33);
  49. const detail = await qiweiGoalGet({ goalId });
  50. assert.equal(detail.status, 'ok');
  51. assert.equal(detail.data.plan.milestones.length, 2);
  52. assert.equal(detail.summary.taskCount, 3);
  53. assert(fs.existsSync(path.join(tempDir, 'goals', 'plans.json')));
  54. process.stdout.write(`${JSON.stringify({ status: 'ok', checks: 4, progress: detail.summary.progress }, null, 2)}\n`);
  55. } finally {
  56. fs.rmSync(tempDir, { recursive: true, force: true });
  57. }
  58. }
  59. main().catch(error => {
  60. process.stderr.write(`${error.stack || error.message}\n`);
  61. process.exitCode = 1;
  62. });