Files
bilin/tests/main/knowledge-injection.test.ts
bing d4122c8f95 feat: ship v0.9.0 with pomodoro, achievements, and injection history
Add pomodoro timer with goal notifications, writing streak milestones, and knowledge injection logging with UI previews across AI writing flows.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-07 19:15:52 +08:00

53 lines
2.2 KiB
TypeScript

import { describe, it, expect, afterEach } from 'vitest'
import { DatabaseSync } from 'node:sqlite'
import { migrate } from '../../src/main/db/migrate'
import { KnowledgeRepository } from '../../src/main/db/repositories/knowledge.repo'
import { KnowledgeInjectionRepository } from '../../src/main/db/repositories/knowledge-injection.repo'
import { KnowledgeInjectionService } from '../../src/main/services/knowledge-injection.service'
import type { SqliteDb } from '../../src/main/db/types'
describe('KnowledgeInjectionRepository', () => {
let db: SqliteDb
afterEach(() => db?.close())
it('UT-INJ-01: insertBatch creates rows listable by entry', () => {
db = new DatabaseSync(':memory:')
migrate(db)
const knowledge = new KnowledgeRepository(db)
const entry = knowledge.create({ type: 'fact', title: '测试', status: 'approved' })
const repo = new KnowledgeInjectionRepository(db)
repo.insertBatch([
{ knowledgeEntryId: entry.id, flowMode: 'wizard', flowId: 'flow-1', chapterId: 'ch-1' },
{ knowledgeEntryId: entry.id, flowMode: 'interactive', flowId: 'flow-2' },
{ knowledgeEntryId: entry.id, flowMode: 'auto', flowId: 'flow-3', chapterId: 'ch-2' }
])
const logs = repo.listForEntry(entry.id)
expect(logs).toHaveLength(3)
expect(logs.map((l) => l.flowMode).sort()).toEqual(['auto', 'interactive', 'wizard'])
})
})
describe('KnowledgeInjectionService', () => {
let db: SqliteDb
afterEach(() => db?.close())
it('IT-INJ-01: record only approved knowledge entries', () => {
db = new DatabaseSync(':memory:')
migrate(db)
const knowledge = new KnowledgeRepository(db)
const approved = knowledge.create({ type: 'fact', title: '已审', status: 'approved' })
const pending = knowledge.create({ type: 'fact', title: '待审', status: 'pending' })
const service = new KnowledgeInjectionService(db)
service.record({
knowledgeIds: [approved.id, pending.id],
flowMode: 'interactive',
flowId: 'flow-x',
chapterId: 'ch-1'
})
const logs = service.listForEntry(approved.id)
expect(logs).toHaveLength(1)
expect(logs[0].flowMode).toBe('interactive')
expect(service.listForEntry(pending.id)).toHaveLength(0)
})
})