/** * Vitest Test Setup * Global test configuration and mocks */ import { vi } from 'vitest'; import '@testing-library/jest-dom'; // Provide a minimal `electron` mock so tests that transitively import // main-process code (logger, store, etc.) don't blow up when the Electron // binary is not present (e.g. CI with ELECTRON_SKIP_BINARY_DOWNLOAD=1). // Individual test files can override with their own vi.mock('electron', ...). vi.mock('electron', () => ({ app: { getPath: vi.fn().mockReturnValue('/tmp/clawx-test'), getVersion: vi.fn().mockReturnValue('0.0.0-test'), getName: vi.fn().mockReturnValue('clawx-test'), isPackaged: false, isReady: vi.fn().mockResolvedValue(true), on: vi.fn(), off: vi.fn(), quit: vi.fn(), whenReady: vi.fn().mockResolvedValue(undefined), }, BrowserWindow: vi.fn(), ipcMain: { on: vi.fn(), handle: vi.fn(), removeHandler: vi.fn() }, dialog: { showOpenDialog: vi.fn(), showMessageBox: vi.fn() }, shell: { openExternal: vi.fn() }, session: { defaultSession: { webRequest: { onBeforeSendHeaders: vi.fn() } } }, utilityProcess: {}, })); // Mock window.electron API const mockElectron = { ipcRenderer: { invoke: vi.fn(), on: vi.fn(), once: vi.fn(), off: vi.fn(), }, openExternal: vi.fn(), platform: 'darwin', isDev: true, }; if (typeof window !== 'undefined') { Object.defineProperty(window, 'electron', { value: mockElectron, writable: true, }); } // Mock matchMedia if (typeof window !== 'undefined') { Object.defineProperty(window, 'matchMedia', { writable: true, value: vi.fn().mockImplementation((query) => ({ matches: false, media: query, onchange: null, addListener: vi.fn(), removeListener: vi.fn(), addEventListener: vi.fn(), removeEventListener: vi.fn(), dispatchEvent: vi.fn(), })), }); } // Reset mocks after each test afterEach(() => { vi.clearAllMocks(); });