1
0

SecretReader.test.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import { test } from 'node:test'
  2. import assert from 'node:assert/strict'
  3. import path from 'node:path'
  4. import { fileURLToPath } from 'node:url'
  5. import { SecretReader } from '../../../src/storage/adapters/SecretReader.js'
  6. import { fixtureCtx } from '../../commands/_helper.js'
  7. const __dirname = path.dirname(fileURLToPath(import.meta.url))
  8. const fixtureRoot = path.join(__dirname, '../../fixtures/sample-book')
  9. test('SecretReader.readBasicInfo 读信息差 front matter', async () => {
  10. const r = await new SecretReader(fixtureRoot).readBasicInfo('信息差-001')
  11. assert.equal(r.ok, true)
  12. assert.equal(r.data.读者已知, false)
  13. })
  14. test('SecretReader.readContent 读 ## 内容 段', async () => {
  15. const r = await new SecretReader(fixtureRoot).readContent('信息差-001')
  16. assert.equal(r.ok, true)
  17. assert.ok(r.content.includes('封印邪灵'))
  18. })
  19. test('SecretReader 不存在的信息差 → ok=false', async () => {
  20. const r = await new SecretReader(fixtureRoot).readBasicInfo('信息差-999')
  21. assert.equal(r.ok, false)
  22. })
  23. test('SecretReader.listUnrevealed 无 cache 时返回空数组(不崩)', async () => {
  24. const rows = await new SecretReader(fixtureRoot).listUnrevealed()
  25. assert.deepEqual(rows, [])
  26. })
  27. test('SecretReader.listUnrevealed 缓存直出 短题/知情人/关键词/登记章', async () => {
  28. const { ctx, cleanup } = await fixtureCtx()
  29. try {
  30. const rows = await new SecretReader(ctx.repoPath, ctx.cache).listUnrevealed()
  31. const one = rows.find((s) => s.id === '信息差-001')
  32. assert.ok(one, JSON.stringify(rows))
  33. assert.equal(one.短题, '灭门真凶') // 文件名第三段起
  34. assert.deepEqual(one.知情人, ['林晚'])
  35. assert.deepEqual(one.关键词, ['玉佩', '宗门'])
  36. assert.equal(one.登记章, 1)
  37. } finally {
  38. await cleanup()
  39. }
  40. })
  41. test('SecretReader.readContentFirstLine 取「## 内容」段首行', async () => {
  42. const r = await new SecretReader(fixtureRoot).readContentFirstLine('信息差-001')
  43. assert.equal(r.ok, true)
  44. assert.equal(r.line, '玉佩乃前代掌门封印邪灵之物,外人不可知。')
  45. })
  46. test('SecretReader.readContentFirstLine 不存在 → ok=false', async () => {
  47. const r = await new SecretReader(fixtureRoot).readContentFirstLine('信息差-999')
  48. assert.equal(r.ok, false)
  49. })