import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' const { createMock, listMock } = vi.hoisted(() => ({ createMock: vi.fn(), listMock: vi.fn(), })) vi.mock('../api/sessions', () => ({ sessionsApi: { create: createMock, list: listMock, delete: vi.fn(), rename: vi.fn(), }, })) import { useSessionStore } from './sessionStore' const initialState = useSessionStore.getState() function delay(ms: number) { return new Promise((resolve) => setTimeout(resolve, ms)) } describe('sessionStore', () => { beforeEach(() => { createMock.mockReset() listMock.mockReset() useSessionStore.setState({ ...initialState, sessions: [], activeSessionId: null, isLoading: false, error: null, selectedProjects: [], availableProjects: [], }) }) afterEach(() => { useSessionStore.setState(initialState) }) it('returns a new session id before the background refresh completes', async () => { createMock.mockResolvedValue({ sessionId: 'session-optimistic-1' }) listMock.mockImplementation(() => new Promise(() => {})) const result = await Promise.race([ useSessionStore.getState().createSession('D:/workspace/code/myself_code/cc-haha'), delay(100).then(() => 'timed-out'), ]) expect(result).toBe('session-optimistic-1') expect(useSessionStore.getState().activeSessionId).toBe('session-optimistic-1') expect(useSessionStore.getState().sessions[0]).toMatchObject({ id: 'session-optimistic-1', title: 'New Session', workDir: 'D:/workspace/code/myself_code/cc-haha', workDirExists: true, }) expect(listMock).toHaveBeenCalledOnce() }) })