refactor(dialogue): naturalize multi-role conversations, close chat sessions with assistant response, and set URS to project shared
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -5,7 +5,7 @@ import { markdownToBlockAST } from '../engine/markdownToBlock';
|
||||
import { DeliverableItem } from '../types/workbench';
|
||||
|
||||
describe('用户上传文档私密归档与共享流转测试', () => {
|
||||
it('10 个评审项目均包含私密 URS 交付物与 AST,且初始为张工私密文档', () => {
|
||||
it('10 个评审项目均包含已共享的 URS 交付物与 AST,支持跨角色合规查阅且会话均以 assistant 闭环', () => {
|
||||
assert.equal(seed.projects.length, 10);
|
||||
seed.projects.forEach((proj: any) => {
|
||||
const pid = proj.id;
|
||||
@@ -14,13 +14,15 @@ describe('用户上传文档私密归档与共享流转测试', () => {
|
||||
// 1. 检查 deliverables
|
||||
const deliv = seed.deliverables.find((d: any) => d.projectId === pid && d.docId === expectedDocId);
|
||||
assert.ok(deliv, `项目 ${pid} 必须存在 URS 交付物`);
|
||||
assert.equal(deliv.category, 'private', '初始必须为私密文档');
|
||||
assert.equal(deliv.space, 'my_private', '初始必须在个人私密空间');
|
||||
assert.equal(deliv.category, 'shared', '张工上传后已共享至项目协作参考库');
|
||||
assert.equal(deliv.space, 'project_shared', '必须在项目共享参考空间');
|
||||
assert.equal(deliv.creatorId, 1, '编制人必须为张工 (id=1)');
|
||||
|
||||
// 2. 检查 documents (AST)
|
||||
const doc = (seed.documents as any)[expectedDocId];
|
||||
assert.ok(doc, `项目 ${pid} 必须存在 URS AST 文档`);
|
||||
assert.equal(doc.category, 'shared');
|
||||
assert.equal(doc.space, 'project_shared');
|
||||
assert.ok(doc.markdown.length > 500, 'URS Markdown 必须包含详实的临床与工程标准内容');
|
||||
assert.match(doc.markdown, /用户需求说明书|URS|GB 9706|临床痛点/);
|
||||
|
||||
@@ -30,6 +32,20 @@ describe('用户上传文档私密归档与共享流转测试', () => {
|
||||
);
|
||||
assert.ok(attachedMsg, `项目 ${pid} 第一轮对话必须包含带 docId 的 URS 附件`);
|
||||
});
|
||||
|
||||
// 4. 验证会话终态:所有会话必须以 assistant 消息闭环
|
||||
seed.sessions.forEach((sess: any) => {
|
||||
const sessMsgs = seed.messages.filter((m: any) => m.sessionId === sess.sessionId);
|
||||
assert.ok(sessMsgs.length > 0, `会话 ${sess.sessionId} 消息数不能为空`);
|
||||
const lastMsg = sessMsgs[sessMsgs.length - 1];
|
||||
assert.equal(lastMsg.role, 'assistant', `会话 ${sess.sessionId} 最后一条消息必须为 assistant 闭环回复`);
|
||||
});
|
||||
|
||||
// 5. 验证自然语气:绝不能存在机械报号与生硬套话
|
||||
seed.messages.forEach((m: any) => {
|
||||
assert.ok(!m.content.includes('我是审核人李主管'), `不得出现生硬自我介绍: ${m.content}`);
|
||||
assert.ok(!m.content.includes('我是批准人王总监'), `不得出现生硬自我介绍: ${m.content}`);
|
||||
});
|
||||
});
|
||||
|
||||
it('用户上传附件自动生成私密交付物并在 AST 中建立隔离,支持流转至项目参考库', () => {
|
||||
|
||||
Reference in New Issue
Block a user