- m009 마이그레이션: notebooks.sort_order INTEGER 컬럼 추가, 기존 rows created_at 순으로 backfill - NotebookRepository.list ORDER BY sort_order ASC, name ASC 로 변경 - NotebookRepository.create 신규 노트북 sort_order = max+1 자동 할당 - NotebookRepository.reorder(id, direction) — swap transaction 으로 atomic 순서 변경 - IPC notebook:reorder 핸들러 등록, preload/shared types pass-through - 테스트 45개 추가 (m009, reorder 케이스 4, list ORDER BY, IPC 핸들러 2) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
29 lines
1.2 KiB
TypeScript
29 lines
1.2 KiB
TypeScript
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
import Database from 'better-sqlite3';
|
|
import { runMigrations } from '../../src/main/db/migrations/index.js';
|
|
|
|
describe('m009 notebook sort_order migration', () => {
|
|
let db: Database.Database;
|
|
beforeEach(() => { db = new Database(':memory:'); db.pragma('foreign_keys = ON'); });
|
|
afterEach(() => { db.close(); });
|
|
|
|
it('fresh DB: default notebook 의 sort_order = 0', () => {
|
|
runMigrations(db);
|
|
const r = db.prepare(`SELECT sort_order FROM notebooks`).get() as { sort_order: number };
|
|
expect(r.sort_order).toBe(0);
|
|
});
|
|
|
|
it('새 notebook insert 시 DEFAULT 0 (caller 가 max+1 책임)', () => {
|
|
runMigrations(db);
|
|
db.prepare(`INSERT INTO notebooks(id,name,created_at,updated_at) VALUES('nb-x','회사','t','t')`).run();
|
|
const r = db.prepare(`SELECT sort_order FROM notebooks WHERE id='nb-x'`).get() as { sort_order: number };
|
|
expect(r.sort_order).toBe(0);
|
|
});
|
|
|
|
it('user_version reaches 9 after all migrations', () => {
|
|
runMigrations(db);
|
|
const r = db.prepare('PRAGMA user_version').get() as { user_version: number };
|
|
expect(r.user_version).toBe(9);
|
|
});
|
|
});
|