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>
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
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)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user