| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- #!/usr/bin/env node
- const assert = require('assert');
- const fs = require('fs');
- const os = require('os');
- const path = require('path');
- const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'qiwei-group-ops-access-'));
- process.env.QIWEI_OUTPUTS_DIR = path.join(tempDir, 'outputs');
- const { getGroupOperationsStore } = require('../mcp/src/core/group-operations-store');
- const { qiweiGroupOpsManageAccess, qiweiGroupOpsManagePlaybook, qiweiGroupOpsGeneratePlan, qiweiGroupOpsExecuteItem } = require('../mcp/src/tools/qiwei-group-operations-run');
- const store = getGroupOperationsStore();
- (async () => {
- try {
- const key = 'access-smoke';
- const hq = 'hq-test';
- const manager = 'store-manager-test';
- const auditor = 'auditor-test';
- const bootstrapped = await qiweiGroupOpsManageAccess({ accountKey: key, action: 'upsert', principal: hq, role: 'headquarters_admin', actor: hq, bootstrapConfirmed: true });
- assert.equal(bootstrapped.status, 'ok');
- assert.equal((await qiweiGroupOpsManageAccess({ accountKey: key, action: 'upsert', principal: manager, requester: hq, role: 'store_manager', storeScope: ['store-a'], actor: hq })).status, 'ok');
- assert.equal((await qiweiGroupOpsManageAccess({ accountKey: key, action: 'upsert', principal: auditor, requester: hq, role: 'auditor', actor: hq })).status, 'ok');
- const created = await qiweiGroupOpsManagePlaybook({ accountKey: key, action: 'create', name: '权限测试 SOP', groupType: 'customer', content: { cadence: [{ template: '测试 {{room_name}}' }] }, actor: hq, principal: hq });
- assert.equal(created.status, 'ok');
- const playbookId = created.data.playbook.id;
- assert.equal((await qiweiGroupOpsManagePlaybook({ accountKey: key, action: 'publish', playbookId, confirmed: true, actor: hq, principal: hq })).status, 'ok');
- store.upsertGroup(key, { roomId: 'room-a', roomName: '门店 A 群', storeId: 'store-a', playbookId }, hq);
- store.upsertGroup(key, { roomId: 'room-b', roomName: '门店 B 群', storeId: 'store-b', playbookId }, hq);
- const allowedPlan = await qiweiGroupOpsGeneratePlan({ accountKey: key, principal: manager, actor: manager, roomId: 'room-a', planDate: '2026-07-20' });
- assert.equal(allowedPlan.status, 'ok');
- const deniedPlan = await qiweiGroupOpsGeneratePlan({ accountKey: key, principal: manager, actor: manager, roomId: 'room-b', planDate: '2026-07-20' });
- assert.equal(deniedPlan.status, 'error');
- assert.match(deniedPlan.assistantMessage, /无权操作门店/);
- const deniedPublish = await qiweiGroupOpsManagePlaybook({ accountKey: key, principal: manager, actor: manager, action: 'publish', playbookId, confirmed: true });
- assert.equal(deniedPublish.status, 'error');
- const itemId = allowedPlan.data.plan.items[0].id;
- const deniedExecute = await qiweiGroupOpsExecuteItem({ accountKey: key, principal: auditor, actor: auditor, itemId, action: 'approve' });
- assert.equal(deniedExecute.status, 'error');
- assert.match(deniedExecute.assistantMessage, /没有 execute_items 权限/);
- console.log('group-operations access smoke: ok');
- } finally {
- store.close();
- fs.rmSync(tempDir, { recursive: true, force: true });
- }
- })().catch(error => { console.error(error.stack || error.message); process.exit(1); });
|