fe127ec3ed
Deliver schema v9, book/chapter IPC extensions, BookSettingsTab, chapter meta/tags, AI session menu, focus mode and TTS, template context enrich, and Wave 1 E2E coverage. Co-authored-by: Cursor <cursoragent@cursor.com>
45 lines
1.8 KiB
TypeScript
45 lines
1.8 KiB
TypeScript
import { describe, it, expect, afterEach } from 'vitest'
|
|
import { DatabaseSync } from 'node:sqlite'
|
|
import { migrate } from '../../src/main/db/migrate'
|
|
import schemaV1 from '../../src/main/db/schema-v1.sql?raw'
|
|
import schemaV2 from '../../src/main/db/schema-v2.sql?raw'
|
|
import schemaV3 from '../../src/main/db/schema-v3.sql?raw'
|
|
import schemaV4 from '../../src/main/db/schema-v4.sql?raw'
|
|
import type { SqliteDb } from '../../src/main/db/types'
|
|
|
|
describe('migrate v5', () => {
|
|
let db: SqliteDb
|
|
afterEach(() => db?.close())
|
|
|
|
it('UT-MIG-05: applies v5 on fresh database', () => {
|
|
db = new DatabaseSync(':memory:')
|
|
migrate(db)
|
|
const version = db.prepare('SELECT MAX(version) AS v FROM schema_version').get() as { v: number }
|
|
expect(version.v).toBe(9)
|
|
const cols = db.prepare('PRAGMA table_info(interactive_flows)').all() as { name: string }[]
|
|
expect(cols.some((c) => c.name === 'flow_mode')).toBe(true)
|
|
expect(cols.some((c) => c.name === 'mode_config_json')).toBe(true)
|
|
})
|
|
|
|
it('migrates v4 database to v5', () => {
|
|
db = new DatabaseSync(':memory:')
|
|
db.exec(`CREATE TABLE IF NOT EXISTS schema_version (
|
|
version INTEGER PRIMARY KEY, applied_at TEXT NOT NULL DEFAULT (datetime('now')), description TEXT
|
|
)`)
|
|
db.exec(schemaV1)
|
|
db.exec(schemaV2)
|
|
db.exec(schemaV3)
|
|
db.prepare('INSERT INTO schema_version (version) VALUES (1),(2),(3)').run()
|
|
try {
|
|
db.exec("ALTER TABLE chapters ADD COLUMN origin TEXT NOT NULL DEFAULT 'manual'")
|
|
} catch {
|
|
/* duplicate ok */
|
|
}
|
|
db.exec(schemaV4)
|
|
db.prepare('INSERT INTO schema_version (version) VALUES (4)').run()
|
|
migrate(db)
|
|
const version = db.prepare('SELECT MAX(version) AS v FROM schema_version').get() as { v: number }
|
|
expect(version.v).toBe(9)
|
|
})
|
|
})
|