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>
55 lines
2.0 KiB
TypeScript
55 lines
2.0 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 type { SqliteDb } from '../../src/main/db/types'
|
|
|
|
function tableExists(db: SqliteDb, name: string): boolean {
|
|
const row = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name=?").get(name)
|
|
return row != null
|
|
}
|
|
|
|
describe('migrate v4', () => {
|
|
let db: SqliteDb
|
|
|
|
afterEach(() => {
|
|
db?.close()
|
|
})
|
|
|
|
it('IT-MIG-04: applies v4 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)
|
|
expect(tableExists(db, 'interactive_flows')).toBe(true)
|
|
expect(tableExists(db, 'interactive_scenes')).toBe(true)
|
|
|
|
const cols = db.prepare('PRAGMA table_info(chapters)').all() as { name: string }[]
|
|
expect(cols.map((c) => c.name)).toContain('origin')
|
|
})
|
|
|
|
it('IT-MIG-04: migrates v3 database to v4', () => {
|
|
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, description) VALUES (?, ?)').run(1, 'initial')
|
|
db.prepare('INSERT INTO schema_version (version, description) VALUES (?, ?)').run(2, 'P2')
|
|
db.prepare('INSERT INTO schema_version (version, description) VALUES (?, ?)').run(3, 'P3')
|
|
|
|
migrate(db)
|
|
|
|
const version = db.prepare('SELECT MAX(version) AS v FROM schema_version').get() as { v: number }
|
|
expect(version.v).toBe(9)
|
|
expect(tableExists(db, 'interactive_flows')).toBe(true)
|
|
})
|
|
})
|