封堵鉴权旁路与导出 IDOR,DocGov 改服务端身份;对话层 PendingAction 接真实 docgov/taskrun;修复流式租约假死与会话级任务流;加固配置/doc_id/NULL;补齐 slog 与测试;前端 ErrorBoundary 与受控文档重试。 Co-authored-by: Cursor <cursoragent@cursor.com>
47 lines
1.4 KiB
TypeScript
47 lines
1.4 KiB
TypeScript
import { describe, it } from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import {
|
|
canonicalDocIdForTask,
|
|
resolveCanonicalDocId,
|
|
shouldLoadControlledContent,
|
|
} from './controlledDocHydrate';
|
|
import type { DeliverableItem } from '../types/workbench';
|
|
|
|
const base: DeliverableItem = {
|
|
docId: 'doc_proj56_intake',
|
|
projectId: 56,
|
|
taskKey: 'intake',
|
|
title: '用户初始需求收集表',
|
|
stage: 'V0.5',
|
|
category: 'workflow',
|
|
creatorId: 1,
|
|
creatorName: '张工',
|
|
isFixedWorkflow: true,
|
|
isTemplateOnly: false,
|
|
lifecycleState: 'drafting',
|
|
isClaimed: true,
|
|
author: '张工',
|
|
reviewer: '李主管',
|
|
approver: '王总监',
|
|
updatedAt: '2026-09-11',
|
|
governanceMode: 'controlled',
|
|
};
|
|
|
|
describe('controlledDocHydrate', () => {
|
|
it('shouldLoadControlledContent when non-template workflow doc', () => {
|
|
assert.equal(shouldLoadControlledContent(base), true);
|
|
assert.equal(shouldLoadControlledContent({ ...base, isTemplateOnly: true }), false);
|
|
});
|
|
|
|
it('resolveCanonicalDocId maps doc-p56-intake to doc_proj56_intake', () => {
|
|
assert.equal(resolveCanonicalDocId('doc-p56-intake', [base]), 'doc_proj56_intake');
|
|
});
|
|
|
|
it('canonicalDocIdForTask maps doc-p56-research to doc_proj56_research', () => {
|
|
assert.equal(
|
|
canonicalDocIdForTask(56, 'research', undefined, 'doc-p56-research'),
|
|
'doc_proj56_research',
|
|
);
|
|
});
|
|
});
|