import { useViewer3cr } from '@/composables/useViewer3cr'; import { isVisible, useNavigationCube } from '@/composables/useNavigationCube'; import { fullscreenView, isFullscreen, isLayout1x3, isLayout2x2 } from '@/models/scanState'; import { ScanView } from '@3cr/types-ts'; import { flushPromises } from '@vue/test-utils'; import { MockInstance } from '@vitest/spy'; describe('useNavigationCube tests', () => { const viewer3cr = useViewer3cr(); const canvas = document.createElement('canvas'); // jsdom does not implement bounds canvas.getBoundingClientRect = vi.fn(() => ({ x: 0, y: 0, width: 100, height: 100 }) as DOMRect); const { bounds } = useNavigationCube(canvas); let setNavCubeVisibilitySpy: MockInstance; let setNavCubePositionSizeSpy: MockInstance; beforeEach(() => { setNavCubeVisibilitySpy = vi.spyOn(viewer3cr, 'setNavCubeVisibility'); setNavCubePositionSizeSpy = vi.spyOn(viewer3cr, 'setNavCubePositionSize'); }); afterEach(() => { setNavCubeVisibilitySpy.mockRestore(); setNavCubePositionSizeSpy.mockRestore(); }); it('should position correctly for 2x2', async () => { vi.spyOn(isLayout2x2, 'value', 'get').mockReturnValue(true); vi.spyOn(isFullscreen, 'value', 'get').mockReturnValue(false); await flushPromises(); expect(isVisible.value).toBe(true); expect(bounds.value).toEqual({ x: 40, y: 40, width: 10, height: 10 }); expect(setNavCubePositionSizeSpy).toHaveBeenCalled(); }); it('should position correctly for 1x3', async () => { vi.spyOn(isLayout1x3, 'value', 'get').mockReturnValue(true); vi.spyOn(isFullscreen, 'value', 'get').mockReturnValue(false); await flushPromises(); expect(isVisible.value).toBe(true); expect(bounds.value).toEqual({ x: 56, y: 90, width: 10, height: 10 }); expect(setNavCubePositionSizeSpy).toHaveBeenCalled(); }); it('should position correctly for 2d fullscreen', async () => { vi.spyOn(isFullscreen, 'value', 'get').mockReturnValue(true); vi.spyOn(fullscreenView, 'value', 'get').mockReturnValue(ScanView.Sagittal); await flushPromises(); isVisible.value = false; await flushPromises(); isVisible.value = true; await flushPromises(); expect(setNavCubeVisibilitySpy).toHaveBeenCalled(); }); it('should position correctly for 3d fullscreen', async () => { vi.spyOn(isFullscreen, 'value', 'get').mockReturnValue(true); vi.spyOn(fullscreenView, 'value', 'get').mockReturnValue(ScanView.Volume); await flushPromises(); isVisible.value = false; await flushPromises(); isVisible.value = true; await flushPromises(); expect(isVisible.value).toBe(true); expect(bounds.value).toEqual({ x: 90, y: 90, width: 10, height: 10 }); expect(setNavCubeVisibilitySpy).toHaveBeenCalled(); }); });