| 1 | import { beforeEach, describe, expect, it, vi } from 'vitest' |
| 2 | |
| 3 | const state = vi.hoisted(() => { |
| 4 | const handlers = new Map<string, (...args: unknown[]) => Promise<unknown>>() |
| 5 | const serviceInstances: Array<{ ensureBaseline: ReturnType<typeof vi.fn>; listVersions: ReturnType<typeof vi.fn> }> = [] |
| 6 | return { |
| 7 | handlers, |
| 8 | serviceInstances, |
| 9 | ipcMain: { |
| 10 | handle: vi.fn((channel: string, handler: (...args: unknown[]) => Promise<unknown>) => { |
| 11 | handlers.set(channel, handler) |
| 12 | }) |
| 13 | }, |
| 14 | GitHistoryService: vi.fn().mockImplementation(function GitHistoryService() { |
| 15 | const service = { |
| 16 | ensureBaseline: vi.fn().mockResolvedValue(undefined), |
| 17 | listVersions: vi.fn().mockResolvedValue([]) |
| 18 | } |
| 19 | serviceInstances.push(service) |
| 20 | return service |
| 21 | }) |
| 22 | } |
| 23 | }) |
| 24 | |
| 25 | vi.mock('electron', () => ({ ipcMain: state.ipcMain })) |
| 26 | vi.mock('electron-log/main.js', () => ({ default: { warn: vi.fn() } })) |
| 27 | vi.mock('../../../src/main/history/git-history-service', () => ({ |
| 28 | GitHistoryService: state.GitHistoryService |
| 29 | })) |
| 30 | |
| 31 | describe('registerHistoryHandlers', () => { |
| 32 | beforeEach(() => { |
| 33 | vi.resetModules() |
| 34 | state.handlers.clear() |
| 35 | state.serviceInstances.length = 0 |
| 36 | state.ipcMain.handle.mockClear() |
| 37 | state.GitHistoryService.mockClear() |
| 38 | }) |
| 39 | |
| 40 | it('caps history list requests at 20 versions in the main process', async () => { |
| 41 | const { registerHistoryHandlers } = await import('../../../src/main/history/handlers') |
| 42 | const ctx = { |
| 43 | db: {}, |
| 44 | resolveSessionProjectDir: vi.fn().mockResolvedValue('/tmp/session-1'), |
| 45 | sessionRunStates: new Map() |
| 46 | } |
| 47 | registerHistoryHandlers(ctx as never) |
| 48 | |
| 49 | const handler = state.handlers.get('history:listVersions') |
| 50 | await handler?.({}, { sessionId: ' session-1 ', limit: 99 }) |
| 51 | |
| 52 | expect(state.serviceInstances[0]?.ensureBaseline).toHaveBeenCalledWith( |
| 53 | 'session-1', |
| 54 | '/tmp/session-1' |
| 55 | ) |
| 56 | expect(state.serviceInstances[0]?.listVersions).toHaveBeenCalledWith('session-1', 20) |
| 57 | }) |
| 58 | }) |
| 59 |