import { beforeEach, describe, expect, it, vi } from 'vitest'; const hostApiFetchMock = vi.fn(); const subscribeHostEventMock = vi.fn(); vi.mock('@/lib/host-api', () => ({ hostApiFetch: (...args: unknown[]) => hostApiFetchMock(...args), })); vi.mock('@/lib/host-events', () => ({ subscribeHostEvent: (...args: unknown[]) => subscribeHostEventMock(...args), })); describe('gateway store event wiring', () => { beforeEach(() => { vi.resetModules(); vi.clearAllMocks(); }); it('subscribes to host events through subscribeHostEvent on init', async () => { hostApiFetchMock.mockResolvedValueOnce({ state: 'running', port: 18789 }); const handlers = new Map void>(); subscribeHostEventMock.mockImplementation((eventName: string, handler: (payload: unknown) => void) => { handlers.set(eventName, handler); return () => {}; }); const { useGatewayStore } = await import('@/stores/gateway'); await useGatewayStore.getState().init(); expect(subscribeHostEventMock).toHaveBeenCalledWith('gateway:status', expect.any(Function)); expect(subscribeHostEventMock).toHaveBeenCalledWith('gateway:error', expect.any(Function)); expect(subscribeHostEventMock).toHaveBeenCalledWith('gateway:notification', expect.any(Function)); expect(subscribeHostEventMock).toHaveBeenCalledWith('gateway:chat-message', expect.any(Function)); expect(subscribeHostEventMock).toHaveBeenCalledWith('gateway:channel-status', expect.any(Function)); handlers.get('gateway:status')?.({ state: 'stopped', port: 18789 }); expect(useGatewayStore.getState().status.state).toBe('stopped'); }); });