| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- import { test } from 'node:test'
- import assert from 'node:assert/strict'
- import path from 'node:path'
- import { fileURLToPath } from 'node:url'
- import { ChapterReader } from '../../../src/storage/adapters/ChapterReader.js'
- const __dirname = path.dirname(fileURLToPath(import.meta.url))
- const fixtureRoot = path.join(__dirname, '../../fixtures/sample-book')
- test('readFrontMatter:读取章节 front matter', async () => {
- const reader = new ChapterReader(fixtureRoot)
- const result = await reader.readFrontMatter(1)
- assert.equal(result.ok, true)
- assert.equal(result.data.章号, 1)
- assert.equal(result.data.标题, '开局')
- assert.equal(result.data.卷, 1)
- assert.equal(result.data.视角, '林晚')
- })
- test('readFrontMatter:不存在的章号', async () => {
- const reader = new ChapterReader(fixtureRoot)
- const result = await reader.readFrontMatter(999)
- assert.equal(result.ok, false)
- assert.ok(result.error.includes('不存在'))
- })
- test('readBody:读取章节正文', async () => {
- const reader = new ChapterReader(fixtureRoot)
- const result = await reader.readBody(1)
- assert.equal(result.ok, true)
- assert.ok(result.body.includes('林晚抬头望着宗门大殿'))
- assert.ok(result.body.includes('消失在夜色中'))
- assert.ok(!result.body.includes('---')) // 不含 front matter
- })
- test('readTail:读取章节末尾 N 字', async () => {
- const reader = new ChapterReader(fixtureRoot)
- const result = await reader.readTail(1, 50)
- assert.equal(result.ok, true)
- assert.ok(result.text.includes('消失在夜色中'))
- assert.ok(result.text.length <= 60) // 允许少量误差(字符 vs 字)
- })
- test('readHead:读取章节开头 N 字', async () => {
- const reader = new ChapterReader(fixtureRoot)
- const result = await reader.readHead(1, 20)
- assert.equal(result.ok, true)
- assert.ok(result.text.includes('林晚抬头'))
- })
- test('readRange:批量读取章号范围', async () => {
- const reader = new ChapterReader(fixtureRoot)
- const result = await reader.readRange(1, 2, ['标题', '卷'])
- assert.equal(result.ok, true)
- assert.equal(result.chapters.length, 2)
- assert.equal(result.chapters[0].章号, 1)
- assert.equal(result.chapters[0].标题, '开局')
- assert.equal(result.chapters[1].标题, '初遇')
- })
|