Files
gongxue-base/apps/server/src/ai-chat/ai-chat.submit-content.spec.ts
wangziqi 24e0ecbdaf feat(ai): 业务上下文感知与 A2UI 链路统一
- 新增代码内业务上下文元数据层(实体字典 + 三大闭环工作流)
- 新增 get_business_context / get_entity_schema / get_pending_tasks 运行时工具
- SYSTEM_PROMPT 与技能目录改为先查业务流程/待办再执行
- A2UI 增加 ai_a2ui_submissions 幂等表、表单过期、ui.artifact 事件
- 提交回灌携带 submissionId / fieldErrors / 下一步建议
- 前端 uiArtifacts 归一化与过期表单禁用
2026-08-06 15:23:23 +08:00

67 lines
2.1 KiB
TypeScript

import { describe, expect, it } from '@jest/globals';
import {
a2uiReviewSubmitInfo,
a2uiSubmitInfo,
buildFormSubmitModelContent,
buildReviewSubmitModelContent,
} from './ai-chat.submit-content';
describe('a2ui submit model content', () => {
it('表单提交信息解析 submissionId 与 fieldErrors', () => {
const info = a2uiSubmitInfo({
a2uiSubmit: {
formId: 'form-1',
formTitle: '新增学生',
values: { name: '张三' },
submissionId: 'sub-1',
fieldErrors: [{ field: 'phone', message: '手机号格式错误' }],
},
});
expect(info).toEqual({
formId: 'form-1',
title: '新增学生',
values: { name: '张三' },
submissionId: 'sub-1',
fieldErrors: [{ field: 'phone', message: '手机号格式错误' }],
});
});
it('表单回灌内容包含提交 ID 与结构化错误', () => {
const content = buildFormSubmitModelContent({
title: '新增学生',
values: { name: '张三' },
submissionId: 'sub-1',
fieldErrors: [],
});
expect(content).toContain('sub-1');
expect(content).toContain('"name":"张三"');
expect(content).toContain('fieldErrors');
});
it('审阅提交信息解析 submissionId 与下一步建议', () => {
const info = a2uiReviewSubmitInfo({
a2uiReviewSubmit: {
reviewId: 'review-1',
reviewTitle: '批量入住导入',
resultMessage: '已导入 12 条',
submissionId: 'sub-2',
nextSteps: [{ key: 'after_checkin', label: '入住完成 → 建议录入费用' }],
},
});
expect(info?.submissionId).toBe('sub-2');
expect(info?.nextSteps).toHaveLength(1);
});
it('审阅回灌内容包含提交 ID 与下一步建议', () => {
const content = buildReviewSubmitModelContent({
reviewId: 'review-1',
reviewTitle: '批量入住导入',
resultMessage: '已导入 12 条',
submissionId: 'sub-2',
nextSteps: [{ key: 'after_checkin', label: '入住完成 → 建议录入费用' }],
});
expect(content).toContain('sub-2');
expect(content).toContain('建议录入费用');
});
});