dreamnode-service.test.ts
1 import { describe, it, expect, beforeEach, vi } from 'vitest' 2 import { DreamNodeService } from './dreamnode-service' 3 import { createMockDreamNode } from '../../tests/utils/test-utils' 4 5 // Mock the store 6 const mockSetSelectedNode = vi.fn() 7 const mockSetSearchResults = vi.fn() 8 const mockSetSpatialLayout = vi.fn() 9 10 vi.mock('../store/interbrain-store', () => ({ 11 useInterBrainStore: { 12 getState: () => ({ 13 setSelectedNode: mockSetSelectedNode, 14 setSearchResults: mockSetSearchResults, 15 setSpatialLayout: mockSetSpatialLayout, 16 }), 17 }, 18 })) 19 20 describe('DreamNodeService', () => { 21 let service: DreamNodeService 22 23 beforeEach(() => { 24 service = new DreamNodeService() 25 vi.clearAllMocks() 26 }) 27 28 describe('getCurrentNode', () => { 29 it('should return null when no node is set', () => { 30 expect(service.getCurrentNode()).toBeNull() 31 }) 32 33 it('should return the current node when set', () => { 34 const mockNode = createMockDreamNode() 35 service.setCurrentNode(mockNode) 36 37 expect(service.getCurrentNode()).toBe(mockNode) 38 }) 39 }) 40 41 describe('setCurrentNode', () => { 42 it('should set the current node', () => { 43 const mockNode = createMockDreamNode() 44 service.setCurrentNode(mockNode) 45 46 expect(service.getCurrentNode()).toBe(mockNode) 47 }) 48 49 it('should clear the current node when set to null', () => { 50 const mockNode = createMockDreamNode() 51 service.setCurrentNode(mockNode) 52 service.setCurrentNode(null) 53 54 expect(service.getCurrentNode()).toBeNull() 55 }) 56 57 it('should sync with Zustand store', () => { 58 const mockNode = createMockDreamNode() 59 service.setCurrentNode(mockNode) 60 61 expect(mockSetSelectedNode).toHaveBeenCalledWith(mockNode) 62 }) 63 }) 64 65 describe('selection management', () => { 66 it('should toggle node selection', () => { 67 const nodeId = 'test-node-123' 68 69 expect(service.isSelected(nodeId)).toBe(false) 70 71 service.toggleNodeSelection(nodeId) 72 expect(service.isSelected(nodeId)).toBe(true) 73 74 service.toggleNodeSelection(nodeId) 75 expect(service.isSelected(nodeId)).toBe(false) 76 }) 77 78 it('should clear all selections', () => { 79 service.toggleNodeSelection('node-1') 80 service.toggleNodeSelection('node-2') 81 82 expect(service.isSelected('node-1')).toBe(true) 83 expect(service.isSelected('node-2')).toBe(true) 84 85 service.clearSelection() 86 87 expect(service.isSelected('node-1')).toBe(false) 88 expect(service.isSelected('node-2')).toBe(false) 89 }) 90 91 it('should handle multiple selections', () => { 92 service.toggleNodeSelection('node-1') 93 service.toggleNodeSelection('node-2') 94 service.toggleNodeSelection('node-3') 95 96 expect(service.isSelected('node-1')).toBe(true) 97 expect(service.isSelected('node-2')).toBe(true) 98 expect(service.isSelected('node-3')).toBe(true) 99 }) 100 }) 101 102 describe('getSelectedNodes', () => { 103 it('should return empty array initially', () => { 104 const selectedNodes = service.getSelectedNodes() 105 expect(selectedNodes).toEqual([]) 106 }) 107 108 it('should log selected node IDs', () => { 109 const consoleSpy = vi.spyOn(console, 'log') 110 111 service.toggleNodeSelection('node-1') 112 service.toggleNodeSelection('node-2') 113 service.getSelectedNodes() 114 115 expect(consoleSpy).toHaveBeenCalledWith('Selected node IDs:', ['node-1', 'node-2']) 116 }) 117 }) 118 })