import { describe, expect, it } from 'vitest' import { buildWorkspaceEntries } from '../src/workspaces' // 三栏工作台(2026-10-11):文件浏览并入第三栏「文件」入口;体系工具内置 // 「代理」与「追溯审计」(U4 修复:第二个 builtin 此前未入列,入口不可达)。 describe('buildWorkspaceEntries', () => { it('没有领域插件时,代理补 ⌘1、追溯审计补 ⌘2', () => { const entries = buildWorkspaceEntries([]) expect(entries.map(e => `${e.shortcut} ${e.title}`)).toEqual(['⌘1 代理', '⌘2 追溯审计']) }) it('声明了 shortcut 的工作区占住该位,内置工具让位', () => { const entries = buildWorkspaceEntries([ { id: 'trace', title: '追溯网', shortcut: '1' }, ]) expect(entries.map(e => e.title)).toEqual(['追溯网', '代理', '追溯审计']) expect(entries.map(e => e.shortcut)).toEqual(['⌘1', '⌘2', '⌘3']) expect(entries[0].key).toBe('ws:trace') }) it('未编号的工作区排在内置工具后面', () => { const entries = buildWorkspaceEntries([ { id: 'mem', title: '记忆库' }, ]) expect(entries.map(e => e.title)).toEqual(['代理', '追溯审计', '记忆库']) }) it('九位占满时低序内置保留,溢出项截断', () => { const server = Array.from({ length: 8 }, (_, i) => ({ id: `w${i}`, title: `w${i}`, shortcut: String(i + 1) })) const entries = buildWorkspaceEntries(server) // ⌘1–8 被声明占住;代理取 ⌘9;追溯审计溢出截断(slice 0,9)。 expect(entries.filter(e => e.key.startsWith('ws:'))).toHaveLength(8) expect(entries.map(e => e.title)).toContain('代理') expect(entries.map(e => e.title)).not.toContain('追溯审计') }) })