test-utils.ts
1 import { vi } from 'vitest' 2 import type { DreamNode } from '../../src/services/dreamnode-service' 3 4 // Test data factories 5 export const createMockDreamNode = (overrides: Partial<DreamNode> = {}): DreamNode => ({ 6 id: 'test-123', 7 name: 'Test DreamNode', 8 type: 'dream', 9 path: '/test/path', 10 hasUnsavedChanges: false, 11 ...overrides, 12 }) 13 14 export const createMockDreamerNode = (overrides: Partial<DreamNode> = {}): DreamNode => ({ 15 id: 'dreamer-456', 16 name: 'Test Dreamer', 17 type: 'dreamer', 18 path: '/dreamers/test-dreamer', 19 hasUnsavedChanges: false, 20 ...overrides, 21 }) 22 23 // Mock service factories 24 export const createMockUIService = () => ({ 25 showSuccess: vi.fn(), 26 showError: vi.fn(), 27 showPlaceholder: vi.fn(), 28 showLoading: vi.fn(() => ({ hide: vi.fn() })), 29 }) 30 31 export const createMockGitService = () => ({ 32 commitWithAI: vi.fn(), 33 createDreamNode: vi.fn(), 34 weaveDreams: vi.fn(), 35 }) 36 37 export const createMockVaultService = () => ({ 38 createFolder: vi.fn(), 39 fileExists: vi.fn(), 40 folderExists: vi.fn(), 41 readFile: vi.fn(), 42 writeFile: vi.fn(), 43 deleteFile: vi.fn(), 44 }) 45 46 // Store test utilities 47 export const resetStore = async () => { 48 const { useInterBrainStore } = await import('../../src/store/interbrain-store') 49 const state = useInterBrainStore.getState() 50 state.setSelectedNode(null) 51 state.setSearchResults([]) 52 state.setSpatialLayout('constellation') 53 } 54 55 // Async test helpers 56 export const waitFor = (condition: () => boolean, timeout = 1000): Promise<void> => { 57 return new Promise((resolve, reject) => { 58 const start = Date.now() 59 60 const check = () => { 61 if (condition()) { 62 resolve() 63 } else if (Date.now() - start > timeout) { 64 reject(new Error('Timeout waiting for condition')) 65 } else { 66 setTimeout(check, 10) 67 } 68 } 69 70 check() 71 }) 72 }