import { describe, expect, it } from 'vitest' import { groupArtifactsByName } from './artifactGrouping' import type { Artifact } from './contracts' // 2026-10-11 实测事故:一次 run 内 register_artifact 三次 → 文件面板三份同名 // 转写报告并列。修复语义(用户裁定):存储保留版本、界面按名称分组去重。 function art(id: string, name: string, updatedAt: string, size = 40000): Artifact { return { id, projectId: 'p1', name, kind: 'document', size, createdAt: updatedAt, updatedAt } } describe('groupArtifactsByName', () => { it('同名 3 行归一组:latest 为最新,versions 新→旧', () => { const g = groupArtifactsByName([ art('a1', '报告.docx', '2026-10-11T15:22:20Z'), art('a2', '报告.docx', '2026-10-11T15:24:06Z'), art('a3', '报告.docx', '2026-10-11T15:23:38Z'), art('b1', '其他.md', '2026-10-11T15:20:00Z', 100), ]) expect(g).toHaveLength(2) const grp = g.find(x => x.latest.name === '报告.docx')! expect(grp.latest.id).toBe('a2') // 最新 15:24:06 expect(grp.versions).toHaveLength(3) expect(grp.versions.map(v => v.id)).toEqual(['a2', 'a3', 'a1']) expect(g.find(x => x.latest.name === '其他.md')!.versions).toHaveLength(1) }) it('不同名互不影响;空列表返回空', () => { const g = groupArtifactsByName([art('x', 'a.md', 'T1'), art('y', 'b.md', 'T2')]) expect(g).toHaveLength(2) expect(groupArtifactsByName([])).toEqual([]) }) })