Files
Genarrative/apps/ai-game-creator-shell/tests/directCodexTurnAttachments.test.ts
k88936 99be1d76fe 抽离 DirectProject 独立聊天容器并删除工作台壳 Direct 状态
- 新增 view/project-development/chat 模块:DirectProjectChatView 自己持有项目清单订阅、首屏锚点、历史分页、发送队列、附件、终止、草稿与本地消息
- DirectProjectChatView 入参收窄为项目路径、入口首轮需求(canonical content[])和两条权限门,Direct 状态不再穿过 App.tsx
- 线程订阅与聊天 reducer 提成 useDirectThreadChatSubscription:subscribe/consume/notify 单飞循环、订阅欠账、SUBSCRIPTION_EXPIRED 重订与 DirectThreadChatState
- chat/components 按「一个组件一个目录、逻辑与表现同目录」重组(ChatHeader、Composer、Conversation、SettingsDialog、ToolCallGroup)
- DirectProjectChatView 拆成聊天头、会话区、回合、输入盒四个组件
- App.tsx 删除 Direct 专属 state/ref/effect/handler 与 directCodex 分支,首轮需求按 canonical content 交给聊天
- 工作台级动作(运行本地预览等)经 DirectProjectChatHandle.announce 交给聊天自己的本地消息流
- Direct 首轮认领记录提成 app/initialSupervisorMessageClaims,供各入口共用
- Rust 侧 Direct 契约 ts-rs 导出目录改到 chat/generated
- 补齐 direct_codex_user_item/wire.rs 既有的 rustfmt 空格漂移
- 同步 ADR、实施计划、decision-log、pitfalls 与 Direct 技术文档
2026-09-19 15:08:31 +08:00

46 lines
1.3 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import { toDirectCodexTurnAttachments } from '../src/view/project-development/chat/conversation/directCodexTurnAttachments';
describe('toDirectCodexTurnAttachments', () => {
it('maps imported files and omits error plus empty localPath', () => {
expect(
toDirectCodexTurnAttachments([
{
fileName: '角色参考.png',
mediaType: 'image/png',
localPath: 'assets/uploads/upload-1-角色参考.png',
status: 'imported',
size: 12,
},
{
fileName: 'lost.bin',
mediaType: 'application/octet-stream',
status: 'failed',
error: '磁盘不可写',
size: 2,
},
]),
).toEqual([
{
name: '角色参考.png',
mediaType: 'image/png',
size: 12,
localPath: 'assets/uploads/upload-1-角色参考.png',
status: 'imported',
},
{
name: 'lost.bin',
mediaType: 'application/octet-stream',
size: 2,
status: 'failed',
},
]);
});
it('returns an empty list when there is nothing to map', () => {
expect(toDirectCodexTurnAttachments(undefined)).toEqual([]);
expect(toDirectCodexTurnAttachments([])).toEqual([]);
});
});