Files
superwork/vscode/src/panel/issueLock.test.ts
T
cruldra 70b826123c ⚡ perf(vscode): 开会话去掉多余远程往返,spinner 跟随真实进度
开会话原先要先全量拉工单(含每张工单的评论、依赖、PR)做前置锁检查,
再各读一次 state JSON 给 pre-create 钩子和终端图标,几秒后才 createTerminal。

- 锁检查改用主进程已算好的工单快照,快照里没有该工单才回落全量拉取
- state JSON 一次读两处用,且提前发起与本地准备重叠
- 会话行 spinner 由扩展的 session/tab-settled 消息驱动,不再是固定 1.5s 假动画,
  消息丢失时 60s 超时兜底

Claude-Session: https://claude.ai/code/session_01Kgmb1LvrPmFX3NoUDB4zZC
2026-09-13 10:14:48 +08:00

36 lines
1.2 KiB
TypeScript

import type { Issue } from '../gitea/types'
import { describe, expect, it } from 'vitest'
import { evaluateLockedReason } from './issueLock'
function issue(number: number, column: Issue['column'], prerequisite?: number): Issue {
return { number, title: `#${number}`, column, prerequisite } as Issue
}
describe('evaluateLockedReason', () => {
it('没有前置 → 放行', () => {
expect(evaluateLockedReason([issue(1, 'todo')], 1)).toEqual({ locked: false })
})
it('前置未完成 → 锁定并带上前置号和所在列', () => {
const issues = [issue(2, 'todo', 1), issue(1, 'in-progress')]
expect(evaluateLockedReason(issues, 2)).toEqual({
locked: true,
prerequisiteNumber: 1,
prerequisiteColumn: 'in-progress',
})
})
it('前置已完成 → 放行', () => {
const issues = [issue(2, 'todo', 1), issue(1, 'done')]
expect(evaluateLockedReason(issues, 2)).toEqual({ locked: false })
})
it('快照里没有前置工单 → 放行(不误锁)', () => {
expect(evaluateLockedReason([issue(2, 'todo', 99)], 2)).toEqual({ locked: false })
})
it('快照里没有这张工单 → 放行', () => {
expect(evaluateLockedReason([issue(1, 'todo')], 7)).toEqual({ locked: false })
})
})