import { describe, it, expect, beforeEach, afterEach } from 'vitest' import { DatabaseSync } from 'node:sqlite' import { migrate } from '../../src/main/db/migrate' import { BookmarkRepository } from '../../src/main/db/repositories/bookmark.repo' import { VolumeRepository } from '../../src/main/db/repositories/volume.repo' import { ChapterRepository } from '../../src/main/db/repositories/chapter.repo' import type { SqliteDb } from '../../src/main/db/types' describe('BookmarkRepository', () => { let db: SqliteDb let repo: BookmarkRepository let chapterId: string beforeEach(() => { db = new DatabaseSync(':memory:') migrate(db) repo = new BookmarkRepository(db) const vol = new VolumeRepository(db).create('卷一', 0) chapterId = new ChapterRepository(db).create(vol.id, '第一章', 0).id }) afterEach(() => { db.close() }) it('creates and lists bookmarks by chapter', () => { repo.create(chapterId, 100, '待办:补充描写', 'todo') expect(repo.listByChapter(chapterId)).toHaveLength(1) expect(repo.listByChapter(chapterId)[0].label).toBe('待办:补充描写') }) it('resolves bookmark', () => { const bm = repo.create(chapterId, 50, '伏笔', 'foreshadow') repo.resolve(bm.id, true) expect(repo.get(bm.id)!.resolved).toBe(true) expect(repo.list(undefined, false)).toHaveLength(0) }) it('deletes bookmark', () => { const bm = repo.create(chapterId, 0, '研究笔记', 'research') repo.delete(bm.id) expect(repo.get(bm.id)).toBeNull() }) })