✨ feat(vscode): 代码阅读侧栏可以按审查工单只看 PR 改过的文件:标题栏「选工单」列出看板「审查」列,选中后树里只剩改过的文件(M / A / D 着色),点开的是本机工作副本里 PR 最新的代码,没有就拉 PR 分支建一个,「显示全部」退出
This commit is contained in:
1 parent
c009187f6c
commit
8e2cdfaf17
18 files changed
+1053
-40
No files matched your search
@@ -0,0 +1,78 @@
|
||||
import { describe, expect, it } from 'vitest'
|
||||
import { inReviewColumn, pickItemText, prNumberOf, reviewableIssue, reviewablePullRequest, reviewDescription, reviewMessage } from './reviewRules'
|
||||
|
||||
const issue = { number: 446, title: '用户资料:上传头像,收紧非管理员改资料的权限' }
|
||||
|
||||
describe('选工单弹框的一项', () => {
|
||||
it('本机有工作副本:工单号 + 标题,淡色 PR 号,第二行改了几个文件', () => {
|
||||
expect(pickItemText(issue, { number: 447, files: { count: 6 }, hasWorktree: true })).toEqual({
|
||||
label: '#446 用户资料:上传头像,收紧非管理员改资料的权限',
|
||||
description: 'PR #447',
|
||||
detail: '改了 6 个文件 · 本机有工作副本',
|
||||
})
|
||||
})
|
||||
|
||||
it('本机没有工作副本:说选中后拉取 PR 分支', () => {
|
||||
expect(pickItemText({ number: 452, title: '桌面端:照 Figma 原型重做设置页' }, { number: 455, files: { count: 12 }, hasWorktree: false }).detail)
|
||||
.toBe('改了 12 个文件 · 本机没有工作副本,选中后拉取 PR 分支')
|
||||
})
|
||||
|
||||
it('读不到改了哪些文件:写出错的原话,不编数', () => {
|
||||
expect(pickItemText(issue, { number: 447, files: { error: 'Gitea 502' }, hasWorktree: true }).detail)
|
||||
.toBe('读不到改了哪些文件:Gitea 502 · 本机有工作副本')
|
||||
})
|
||||
|
||||
it('没有关联 PR:没有 PR 号,第二行只写「没有关联 PR」', () => {
|
||||
expect(pickItemText(issue)).toEqual({ label: '#446 用户资料:上传头像,收紧非管理员改资料的权限', detail: '没有关联 PR' })
|
||||
})
|
||||
})
|
||||
|
||||
describe('审查时的视图标题', () => {
|
||||
it('标题后面「审查 #446」,下面一行工单标题、PR、改了几个文件', () => {
|
||||
expect(reviewDescription(446)).toBe('审查 #446')
|
||||
expect(reviewMessage(issue, 447, 6)).toBe('#446 用户资料:上传头像,收紧非管理员改资料的权限 · PR #447 · 改了 6 个文件')
|
||||
})
|
||||
})
|
||||
|
||||
describe('看板「审查」列', () => {
|
||||
it('只要审查列的,工单号大的在前(和看板列里一样)', () => {
|
||||
const issues = [
|
||||
{ number: 438, column: 'review' as const },
|
||||
{ number: 452, column: 'review' as const },
|
||||
{ number: 451, column: 'in-progress' as const },
|
||||
{ number: 446, column: 'review' as const },
|
||||
{ number: 460, column: 'done' as const },
|
||||
]
|
||||
expect(inReviewColumn(issues).map(item => item.number)).toEqual([452, 446, 438])
|
||||
})
|
||||
|
||||
it('工单的 PR 号取 state JSON 里的正整数', () => {
|
||||
expect(prNumberOf({ pr: '447' })).toBe(447)
|
||||
expect(prNumberOf({})).toBeUndefined()
|
||||
expect(prNumberOf({ pr: '' })).toBeUndefined()
|
||||
expect(prNumberOf({ pr: '0' })).toBeUndefined()
|
||||
expect(prNumberOf({ pr: 'abc' })).toBeUndefined()
|
||||
})
|
||||
})
|
||||
|
||||
describe('还能不能审查(选中、刷新、重开窗口时判断)', () => {
|
||||
it('在审查列、有 PR:带上工单和 PR 号', () => {
|
||||
const current = { column: 'review' as const, pr: '447' }
|
||||
expect(reviewableIssue(446, current)).toEqual({ issue: current, pr: 447 })
|
||||
})
|
||||
|
||||
it('工单没了、离开了审查列、没有 PR:给出原因', () => {
|
||||
expect(reviewableIssue(446, null)).toEqual({ blocked: '#446 已经不存在' })
|
||||
expect(reviewableIssue(446, { column: 'done', pr: '447' })).toEqual({ blocked: '#446 已经不在看板「审查」列' })
|
||||
expect(reviewableIssue(446, { column: 'in-progress', pr: '447' })).toEqual({ blocked: '#446 已经不在看板「审查」列' })
|
||||
expect(reviewableIssue(446, { column: 'review' })).toEqual({ blocked: '#446 没有关联 PR' })
|
||||
})
|
||||
|
||||
it('关联的 PR 开着:带上它;没了、合并了、关了:给出原因', () => {
|
||||
const open = { state: 'open', merged: false, headSha: 'abc' }
|
||||
expect(reviewablePullRequest(447, open)).toEqual({ pull: open })
|
||||
expect(reviewablePullRequest(447, null)).toEqual({ blocked: 'PR #447 已经不存在' })
|
||||
expect(reviewablePullRequest(447, { state: 'closed', merged: true })).toEqual({ blocked: 'PR #447 已经合并' })
|
||||
expect(reviewablePullRequest(447, { state: 'closed', merged: false })).toEqual({ blocked: 'PR #447 已经关闭' })
|
||||
})
|
||||
})
|
||||
Reference in new issue
Block a user