group-operations-automation-smoke-test.js 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #!/usr/bin/env node
  2. const assert = require('assert');
  3. const fs = require('fs');
  4. const os = require('os');
  5. const path = require('path');
  6. const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'qiwei-group-ops-auto-'));
  7. process.env.QIWEI_OUTPUTS_DIR = path.join(tempDir, 'outputs');
  8. delete process.env.QIWEI_GROUP_OPS_LIVE_SEND;
  9. const { getGroupOperationsStore } = require('../mcp/src/core/group-operations-store');
  10. const { qiweiGroupOpsAutomation, qiweiGroupOpsManagePlaybook } = require('../mcp/src/tools/qiwei-group-operations-run');
  11. const store = getGroupOperationsStore();
  12. (async () => {
  13. try {
  14. const key = 'automation-smoke';
  15. const confirmationPlaybook = store.createPlaybook(key, { name: '确认测试 SOP', content: { cadence: [{ template: '确认测试' }] } }, 'test');
  16. const publishDenied = await qiweiGroupOpsManagePlaybook({ accountKey: key, action: 'publish', playbookId: confirmationPlaybook.id });
  17. assert.equal(publishDenied.status, 'error');
  18. assert.match(publishDenied.assistantMessage, /confirmed=true/);
  19. const publishConfirmed = await qiweiGroupOpsManagePlaybook({ accountKey: key, action: 'publish', playbookId: confirmationPlaybook.id, confirmed: true });
  20. assert.equal(publishConfirmed.status, 'ok');
  21. const playbook = store.createPlaybook(key, { name: '自动化测试 SOP', content: { cadence: [{ time: '09:30', type: 'content', objective: '测试', template: '安全测试话术 {{room_name}}' }] } }, 'test');
  22. store.publishPlaybook(key, playbook.id, 1, 'test');
  23. store.upsertGroup(key, { roomId: 'room-safe', roomName: '安全测试群', playbookId: playbook.id }, 'test');
  24. const plan = store.generatePlan(key, { roomId: 'room-safe', planDate: '2026-07-20' }, 'test');
  25. store.updatePlanItem(key, plan.items[0].id, 'approve', {}, 'test');
  26. const policy = store.createAutomationPolicy(key, { policy: { enabled: true, mode: 'auto', allowedGroupIds: ['room-safe'], allowedTypes: ['content'], windows: [{ days: [1], start: '09:00', end: '18:00' }], dailyLimitPerGroup: 1, weeklyLimitPerGroup: 7, consecutiveFailureLimit: 3, grayPercent: 100, requireNoOpenHighRisk: true } }, 'test');
  27. store.activateAutomationPolicy(key, policy.id, 'test');
  28. store.updateAutomationState(key, 'resume', 'test');
  29. const preview = await qiweiGroupOpsAutomation({ accountKey: key, action: 'preview', at: '2026-07-20T10:00:00+08:00' });
  30. assert.equal(preview.status, 'ok');
  31. assert.equal(preview.summary.allowed, 1);
  32. const dryRun = await qiweiGroupOpsAutomation({ accountKey: key, action: 'run', at: '2026-07-20T10:00:00+08:00', execute: false });
  33. assert.equal(dryRun.status, 'ok');
  34. assert.equal(dryRun.summary.dryRun, 1);
  35. const liveBlocked = await qiweiGroupOpsAutomation({ accountKey: key, action: 'run', at: '2026-07-20T10:00:00+08:00', execute: true, confirmed: true });
  36. assert.equal(liveBlocked.status, 'error');
  37. assert.match(liveBlocked.assistantMessage, /环境开关未开启/);
  38. console.log('group-operations automation smoke: ok');
  39. } finally {
  40. store.close();
  41. fs.rmSync(tempDir, { recursive: true, force: true });
  42. }
  43. })().catch(error => { console.error(error.stack || error.message); process.exit(1); });