Why: buildWorkspaceEntries pushed only BUILTINS[0] (agents); the U4 rdm-audit workspace was declared but never ranked, so no user could open the trace/audit workspace from the sidebar. Evidence: vitest workspaces.test.ts 4/4 (updated expectations plus a new overflow-truncation case); full browser run in scripts/e2e.sh. Impact: sidebar gains the second builtin tool; server-declared workspaces keep their shortcut precedence. Refs: U4 (Dev #368) regression; task feature/rdm-e2e-acceptance.
37 lines
1.7 KiB
TypeScript
37 lines
1.7 KiB
TypeScript
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('追溯审计')
|
|
})
|
|
})
|