book-config.test.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import { test } from 'node:test'
  2. import assert from 'node:assert/strict'
  3. import { parseBookConfig } from '../../../src/storage/parsers/book-config.js'
  4. test('正常解析 book.yaml', () => {
  5. const yaml = `spec_version: "7.0"
  6. 书名: 测试书
  7. 类型: 玄幻
  8. 每章目标字数: 3000
  9. 卷规模: 40
  10. 文体基线起: 1
  11. 文体基线止: 30
  12. 伏笔悬了太久章数: 10
  13. 悬念悬了太久章数: 10
  14. 感情线悬了太久章数: 30
  15. 连续弱钩上限: 3
  16. 关键章稿数: 3
  17. 自动确认细纲: false
  18. 连写批次大小: 8`
  19. const result = parseBookConfig(yaml)
  20. assert.equal(result.ok, true)
  21. assert.equal(result.data.书名, '测试书')
  22. assert.equal(result.data.每章目标字数, 3000)
  23. assert.equal(result.data.伏笔悬了太久章数, 10)
  24. })
  25. test('缺字段时使用默认值', () => {
  26. const yaml = `spec_version: "7.0"
  27. 书名: 最小配置
  28. 类型: 玄幻
  29. 每章目标字数: 3000
  30. 卷规模: 40`
  31. const result = parseBookConfig(yaml)
  32. assert.equal(result.ok, true)
  33. assert.equal(result.data.书名, '最小配置')
  34. assert.equal(result.data.文体基线起, 1) // 默认值
  35. assert.equal(result.data.伏笔悬了太久章数, 10) // 默认值
  36. assert.equal(result.data.连写批次大小, 8) // 默认值
  37. })
  38. test('边界:YAML 语法错误', () => {
  39. const yaml = `书名: "未闭合`
  40. const result = parseBookConfig(yaml)
  41. assert.equal(result.ok, false)
  42. assert.ok(result.error.includes('解析失败'))
  43. })
  44. test('边界:空 YAML', () => {
  45. const yaml = ``
  46. const result = parseBookConfig(yaml)
  47. assert.equal(result.ok, true)
  48. assert.equal(result.data.书名, '未命名') // 全部默认值
  49. assert.equal(result.data.每章目标字数, 3000)
  50. })