import { describe, it, expect, beforeEach, afterEach } from 'vitest' import { mkdtempSync, rmSync } from 'fs' import { join } from 'path' import { tmpdir } from 'os' import { openBookDb, closeAllBookDbs } from '../../src/main/db/connection' import { migrate } from '../../src/main/db/migrate' import { ChapterRepository } from '../../src/main/db/repositories/chapter.repo' import { ChapterTagRepository } from '../../src/main/db/repositories/chapter-tag.repo' import { VolumeRepository } from '../../src/main/db/repositories/volume.repo' describe('ChapterTagRepository', () => { let dir: string beforeEach(() => { dir = mkdtempSync(join(tmpdir(), 'bilin-tag-')) }) afterEach(() => { closeAllBookDbs() rmSync(dir, { recursive: true, force: true }) }) it('IT-TAG-01: set and list chapter tags', () => { const db = openBookDb(join(dir, 'test.sqlite')) migrate(db) const volId = new VolumeRepository(db).create('第一卷', 0).id const chId = new ChapterRepository(db).create(volId, '第一章', 0).id const tags = new ChapterTagRepository(db) tags.set(chId, '高潮', '#ff0000') tags.set(chId, '女主主场') expect(tags.list(chId)).toHaveLength(2) tags.remove(chId, '高潮') expect(tags.list(chId)).toHaveLength(1) }) })