|
|
@@ -0,0 +1,49 @@
|
|
|
+import { test } from 'node:test'
|
|
|
+import assert from 'node:assert/strict'
|
|
|
+import { run as impactRun } from '../../src/commands/impact.js'
|
|
|
+import { run as gotoRun } from '../../src/commands/goto-chapter.js'
|
|
|
+import { makeGitBook, chapter } from '../state-machine/_helper.js'
|
|
|
+
|
|
|
+test('impact 命令:输出影响分析 JSON', async () => {
|
|
|
+ const { ctx, cleanup } = await makeGitBook({
|
|
|
+ 'book.yaml': 'spec_version: "7.0"\n书名: 测\n已发布到章: 0\n',
|
|
|
+ '定稿/正文/0001-起.md': chapter(1, '林晚得到玉佩。'),
|
|
|
+ })
|
|
|
+ try {
|
|
|
+ const r = await impactRun(['玉佩'], {}, ctx)
|
|
|
+ assert.equal(r.ok, true)
|
|
|
+ const out = JSON.parse(r.output)
|
|
|
+ assert.deepEqual(out.未发布, [1])
|
|
|
+ } finally {
|
|
|
+ await cleanup()
|
|
|
+ }
|
|
|
+})
|
|
|
+
|
|
|
+test('goto-chapter 命令:不带 --confirm 只展示影响', async () => {
|
|
|
+ const { ctx, cleanup } = await makeGitBook(
|
|
|
+ { 'book.yaml': 'spec_version: "7.0"\n书名: 测\n' },
|
|
|
+ {
|
|
|
+ commits: [
|
|
|
+ { message: 'ch(1): 起', files: { '定稿/正文/0001-起.md': chapter(1) } },
|
|
|
+ { message: 'ch(2): 承', files: { '定稿/正文/0002-承.md': chapter(2) } },
|
|
|
+ ],
|
|
|
+ }
|
|
|
+ )
|
|
|
+ try {
|
|
|
+ const r = await gotoRun(['1'], {}, ctx)
|
|
|
+ assert.equal(r.ok, true)
|
|
|
+ assert.match(r.output, /丢弃|ch\(2\)/)
|
|
|
+ } finally {
|
|
|
+ await cleanup()
|
|
|
+ }
|
|
|
+})
|
|
|
+
|
|
|
+test('goto-chapter 命令:非数字章号 → ok=false', async () => {
|
|
|
+ const { ctx, cleanup } = await makeGitBook({ 'book.yaml': '书名: 测\n' })
|
|
|
+ try {
|
|
|
+ const r = await gotoRun(['abc'], {}, ctx)
|
|
|
+ assert.equal(r.ok, false)
|
|
|
+ } finally {
|
|
|
+ await cleanup()
|
|
|
+ }
|
|
|
+})
|