import { storeToRefs } from 'pinia'; import { useMcadStore } from '@/stores/mcad.store'; import { McadObjectInteractionFaker } from '@test/fakers/mcad-object-interaction.faker'; import { InteractionType } from '@3cr/types-ts'; import { flushPromises } from '@vue/test-utils'; import { DataOverlayMcadFaker } from '@test/fakers/data-overlay-mcad.faker'; import { useMcadRotateTool } from '@/tools/mcad-rotate.tool'; import { useViewer3cr } from '@/composables/useViewer3cr'; import { MockInstance } from '@vitest/spy'; describe('mcad rotate tool', () => { const viewer3cr = useViewer3cr(); const { event: mcadEvent } = storeToRefs(useMcadStore()); let rotateSpy: MockInstance; beforeEach(() => { rotateSpy = vi.spyOn(viewer3cr, 'rotateMcadObject'); }); afterEach(() => { rotateSpy.mockRestore(); }); it('should rotate via 3cr event', async () => { const mcadRotateTool = useMcadRotateTool(); mcadRotateTool.isActive.value = true; mcadEvent.value = McadObjectInteractionFaker.randomRaw( InteractionType.POINTER_UP, ); await flushPromises(); expect(rotateSpy).toHaveBeenCalled(); expect(mcadRotateTool.selected.value).not.toBe(null); }); it('should not rotate via 3cr event', async () => { const mcadRotateTool = useMcadRotateTool(); mcadRotateTool.isActive.value = true; mcadEvent.value = McadObjectInteractionFaker.randomRaw( InteractionType.NONE, ); await flushPromises(); expect(rotateSpy).not.toHaveBeenCalled(); expect(mcadRotateTool.selected.value).toBe(null); }); it('should rotate programmatically', async () => { const mcadRotateTool = useMcadRotateTool(); mcadRotateTool.isActive.value = true; mcadRotateTool.selected.value = DataOverlayMcadFaker.random(); await flushPromises(); expect(rotateSpy).toHaveBeenCalled(); }); it('should deactivate move', async () => { const mcadRotateTool = useMcadRotateTool(); mcadRotateTool.isActive.value = true; await flushPromises(); mcadRotateTool.isActive.value = false; mcadRotateTool.selected.value = DataOverlayMcadFaker.random(); await flushPromises(); expect(rotateSpy).toHaveBeenCalled(); }); it('should deactivate move', async () => { const mcadRotateTool = useMcadRotateTool(); mcadRotateTool.isActive.value = true; await flushPromises(); mcadRotateTool.isActive.value = false; mcadRotateTool.selected.value = null; await flushPromises(); expect(rotateSpy).not.toHaveBeenCalled(); }); it('should do next prev', async () => { const mcadRotateTool = useMcadRotateTool(); mcadRotateTool.isActive.value = true; mcadRotateTool.selected.value = DataOverlayMcadFaker.random(); await flushPromises(); expect(rotateSpy).toHaveBeenCalledTimes(1); mcadRotateTool.selected.value = null; await flushPromises(); expect(rotateSpy).toHaveBeenCalledTimes(2); }); it('should not do next prev', async () => { const mcadRotateTool = useMcadRotateTool(); mcadRotateTool.isActive.value = true; const set = DataOverlayMcadFaker.random(); const set2 = DataOverlayMcadFaker.random(); set2.Id = set.Id; mcadRotateTool.selected.value = set; await flushPromises(); expect(rotateSpy).toHaveBeenCalledTimes(1); mcadRotateTool.selected.value = set2; await flushPromises(); expect(rotateSpy).toHaveBeenCalledTimes(1); }); });