import { describe, it, expect, beforeEach, afterEach } from 'vitest' import { readFileSync, mkdtempSync, rmSync } from 'fs' import { join } from 'path' import { tmpdir } from 'os' import { BookRegistryService } from '../../src/main/services/book-registry' import { splitPlainText } from '../../src/main/lib/chapter-splitter' import { VolumeRepository } from '../../src/main/db/repositories/volume.repo' import { ChapterRepository } from '../../src/main/db/repositories/chapter.repo' import { closeAllBookDbs } from '../../src/main/db/connection' const FIXTURE = join(import.meta.dirname, '../fixtures/import-three-chapters.txt') describe('Import integration', () => { let dir: string let registry: BookRegistryService beforeEach(() => { dir = mkdtempSync(join(tmpdir(), 'bilin-import-')) registry = new BookRegistryService(dir) }) afterEach(() => { closeAllBookDbs() rmSync(dir, { recursive: true, force: true }) }) it('IT-IMPORT-01: split + create book chapters', () => { const parts = splitPlainText(readFileSync(FIXTURE, 'utf8'), 'auto') expect(parts).toHaveLength(3) const meta = registry.create({ name: '导入测试书', category: '玄幻', createSampleChapter: false }) const db = registry.getDb(meta.id) const volId = new VolumeRepository(db).list()[0]!.id const chapterRepo = new ChapterRepository(db) parts.forEach((p, i) => { chapterRepo.create(volId, p.title, i, `
${p.body}
`) }) const opened = registry.open(meta.id) expect(opened.chapters).toHaveLength(3) expect(opened.chapters[0]!.title).toContain('第一章') }) })