report-overdue-threads.test.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import { test } from 'node:test'
  2. import assert from 'node:assert/strict'
  3. import { run } from '../../src/commands/report-overdue-threads.js'
  4. import { fixtureCtx, repoCtx } from './_helper.js'
  5. test('report-overdue-threads 在 fixture 上返回合法分组 JSON', async () => {
  6. const { ctx, cleanup } = await fixtureCtx()
  7. try {
  8. const r = await run([], {}, ctx)
  9. assert.equal(r.ok, true)
  10. const grouped = JSON.parse(r.output)
  11. assert.equal(typeof grouped, 'object')
  12. } finally {
  13. await cleanup()
  14. }
  15. })
  16. test('report-overdue-threads 检出真正悬了太久的条目并按类型分组(AC9)', async () => {
  17. // 20 章,伏笔最后推进在第 1 章 → 悬了 19 章 > 阈值 10
  18. const chapters = {}
  19. for (let i = 1; i <= 20; i++) {
  20. const n = String(i).padStart(4, '0')
  21. chapters[`定稿/正文/${n}-第${i}章.md`] =
  22. `---\n章号: ${i}\n标题: 第${i}章\n卷: 1\n字数: 100\n章定位: 推进\n---\n正文。`
  23. }
  24. const { ctx, cleanup } = await repoCtx(null, {
  25. 'book.yaml': 'spec_version: "7.0"\n书名: 测试\n伏笔悬了太久章数: 10\n',
  26. '定稿/设定/名册.md': '| 正名 | 别名 | 类型 | 首现章 |\n|--|--|--|--|\n| 甲 | 乙 | character | 1 |\n',
  27. '大纲/伏笔/伏笔-001-老坑.md':
  28. '---\n强度: 高\n状态: 进行\n开启章: 1\n最后推进章: 1\n---\n## 描述\n埋了很久。',
  29. ...chapters,
  30. })
  31. try {
  32. const r = await run([], {}, ctx)
  33. assert.equal(r.ok, true)
  34. const grouped = JSON.parse(r.output)
  35. assert.ok(grouped.foreshadow, `应按类型分组检出伏笔,实际:${r.output}`)
  36. assert.equal(grouped.foreshadow[0].id, '伏笔-001')
  37. } finally {
  38. await cleanup()
  39. }
  40. })