d4122c8f95
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>
53 lines
2.2 KiB
TypeScript
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)
|
|
})
|
|
})
|