feat(notebook): m009 sort_order 컬럼 + reorder 메서드 + IPC notebook:reorder
- 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>
This commit is contained in:
@@ -22,7 +22,8 @@ function makeRepo() {
|
||||
setColor: vi.fn(),
|
||||
delete: vi.fn(() => ({ ok: true })),
|
||||
moveNote: vi.fn(),
|
||||
findById: vi.fn(() => null)
|
||||
findById: vi.fn(() => null),
|
||||
reorder: vi.fn(() => ({ ok: true }))
|
||||
};
|
||||
}
|
||||
|
||||
@@ -96,4 +97,23 @@ describe('notebookApi IPC', () => {
|
||||
expect(repo.setColor).toHaveBeenCalledWith('id1', '#fff');
|
||||
expect(r).toEqual({ ok: true });
|
||||
});
|
||||
|
||||
it('notebook:reorder — repo.reorder 호출 + ok:true 전달', async () => {
|
||||
const repo = makeRepo();
|
||||
repo.reorder.mockReturnValue({ ok: true } as never);
|
||||
registerNotebookApi({ repo: repo as never });
|
||||
const h = getHandler('notebook:reorder');
|
||||
const r = await h({}, 'nb-1', 'up');
|
||||
expect(repo.reorder).toHaveBeenCalledWith('nb-1', 'up');
|
||||
expect(r).toEqual({ ok: true });
|
||||
});
|
||||
|
||||
it('notebook:reorder — 첫 번째 항목 up 시 ok:false 전달', async () => {
|
||||
const repo = makeRepo();
|
||||
repo.reorder.mockReturnValue({ ok: false } as never);
|
||||
registerNotebookApi({ repo: repo as never });
|
||||
const h = getHandler('notebook:reorder');
|
||||
const r = await h({}, 'nb-first', 'up');
|
||||
expect(r).toEqual({ ok: false });
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user