feat: ship v0.6.0 with cockpit, knowledge base, and chapter bridge
Deliver P5 writer workflow: writing cockpit, manual knowledge CRUD with review, chapter bridge with optional AI, publish status, and stock buffer reminders. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
import { describe, it, expect, afterEach } from 'vitest'
|
||||
import { DatabaseSync } from 'node:sqlite'
|
||||
import { migrate } from '../../src/main/db/migrate'
|
||||
import { VolumeRepository } from '../../src/main/db/repositories/volume.repo'
|
||||
import { ChapterRepository } from '../../src/main/db/repositories/chapter.repo'
|
||||
import { BookmarkRepository } from '../../src/main/db/repositories/bookmark.repo'
|
||||
import { KnowledgeService } from '../../src/main/services/knowledge.service'
|
||||
import type { SqliteDb } from '../../src/main/db/types'
|
||||
|
||||
describe('KnowledgeService', () => {
|
||||
let db: SqliteDb
|
||||
afterEach(() => db?.close())
|
||||
|
||||
it('UT-KNOW-02: forgotten when sort_order gap >= 20', () => {
|
||||
db = new DatabaseSync(':memory:')
|
||||
migrate(db)
|
||||
const volId = new VolumeRepository(db).create('卷一', 0).id
|
||||
const chapterRepo = new ChapterRepository(db)
|
||||
const firstId = chapterRepo.create(volId, '第1章', 0, '<p>伏笔</p>').id
|
||||
for (let i = 1; i < 25; i++) {
|
||||
chapterRepo.create(volId, `第${i + 1}章`, i, '<p>x</p>')
|
||||
}
|
||||
const service = new KnowledgeService(db)
|
||||
const entry = service.create({
|
||||
type: 'foreshadow',
|
||||
title: '测灵石',
|
||||
status: 'approved',
|
||||
foreshadowStatus: 'buried',
|
||||
sourceChapterId: firstId
|
||||
})
|
||||
expect(service.isForgotten(entry)).toBe(true)
|
||||
const stats = service.getForeshadowStats()
|
||||
expect(stats.forgotten).toBe(1)
|
||||
})
|
||||
|
||||
it('UT-KNOW-03: createFromBookmark creates pending entry', () => {
|
||||
db = new DatabaseSync(':memory:')
|
||||
migrate(db)
|
||||
const volId = new VolumeRepository(db).create('卷一', 0).id
|
||||
const chId = new ChapterRepository(db).create(volId, '章', 0).id
|
||||
const bm = new BookmarkRepository(db).create(chId, 0, '测灵石发热', 'foreshadow')
|
||||
const service = new KnowledgeService(db)
|
||||
const entry = service.createFromBookmark(bm.id)
|
||||
expect(entry.status).toBe('pending')
|
||||
expect(entry.linkedBookmarkId).toBe(bm.id)
|
||||
})
|
||||
|
||||
it('IT-KNOW-04: batchApprove clears pending', () => {
|
||||
db = new DatabaseSync(':memory:')
|
||||
migrate(db)
|
||||
const service = new KnowledgeService(db)
|
||||
const ids = [
|
||||
service.create({ type: 'fact', title: 'A' }).id,
|
||||
service.create({ type: 'fact', title: 'B' }).id,
|
||||
service.create({ type: 'fact', title: 'C' }).id
|
||||
]
|
||||
expect(service.countPending()).toBe(3)
|
||||
expect(service.batchApprove(ids)).toBe(3)
|
||||
expect(service.countPending()).toBe(0)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user