import { storeToRefs } from 'pinia'; import { useDataOverlayStore } from '@/stores/data-overlay.store'; import { useDataOverlayTool } from '@/tools/data-overlay.tool'; import { DOMWrapper, flushPromises } from '@vue/test-utils'; import { DataOverlayDataFaker } from '@test/fakers/data-overlay-data.faker'; import { InteractionType } from '@3cr/types-ts'; import { useMcadStore } from '@/stores/mcad.store'; import { McadObjectInteractionFaker } from '@test/fakers/mcad-object-interaction.faker'; describe('data overlay tool', () => { const { event: dataOverlayEvent } = storeToRefs(useDataOverlayStore()); const { event: mcadEvent } = storeToRefs(useMcadStore()); it('should capture annotation events', async () => { const dataOverlayTool = useDataOverlayTool(); dataOverlayTool.isActive.value = true; await flushPromises(); dataOverlayEvent.value = DataOverlayDataFaker.annotationEventRaw( InteractionType.HOVER_START, ); const wrapper = new DOMWrapper(document.body); await wrapper.trigger('mousedown'); await wrapper.trigger('mouseup'); expect(dataOverlayTool.selected.value).not.toBe(null); }); it('should capture measurement events', async () => { const dataOverlayTool = useDataOverlayTool(); dataOverlayTool.isActive.value = true; await flushPromises(); dataOverlayEvent.value = DataOverlayDataFaker.lengthEventRaw( InteractionType.HOVER_START, ); const wrapper = new DOMWrapper(document.body); await wrapper.trigger('mousedown'); await wrapper.trigger('mouseup'); expect(dataOverlayTool.selected.value).not.toBe(null); }); it('should capture mcad events', async () => { const dataOverlayTool = useDataOverlayTool(); dataOverlayTool.isActive.value = true; await flushPromises(); mcadEvent.value = McadObjectInteractionFaker.randomRaw( InteractionType.HOVER_START, ); const wrapper = new DOMWrapper(document.body); await wrapper.trigger('mousedown'); await wrapper.trigger('mouseup'); expect(dataOverlayTool.selected.value).not.toBe(null); }); it('should ignore event on mouse move', async () => { const dataOverlayTool = useDataOverlayTool(); dataOverlayTool.isActive.value = true; await flushPromises(); dataOverlayEvent.value = DataOverlayDataFaker.annotationEventRaw( InteractionType.HOVER_START, ); const wrapper = new DOMWrapper(document.body); await wrapper.trigger('mousedown'); await wrapper.trigger('mousemove'); await wrapper.trigger('mouseup'); expect(dataOverlayTool.selected.value).toBe(null); }); it('should ignore event mousedown', async () => { const dataOverlayTool = useDataOverlayTool(); dataOverlayTool.isActive.value = false; await flushPromises(); dataOverlayEvent.value = DataOverlayDataFaker.annotationEventRaw( InteractionType.HOVER_START, ); const wrapper = new DOMWrapper(document.body); await wrapper.trigger('mousedown'); expect(dataOverlayTool.selected.value).toBe(null); }); it('should ignore event mouseMove', async () => { const dataOverlayTool = useDataOverlayTool(); dataOverlayTool.isActive.value = false; await flushPromises(); dataOverlayEvent.value = DataOverlayDataFaker.annotationEventRaw( InteractionType.HOVER_START, ); const wrapper = new DOMWrapper(document.body); await wrapper.trigger('mousemove'); expect(dataOverlayTool.selected.value).toBe(null); }); it('should defocus onInteraction on hover end', async () => { const dataOverlayTool = useDataOverlayTool(); dataOverlayTool.isActive.value = true; await flushPromises(); dataOverlayEvent.value = DataOverlayDataFaker.annotationEventRaw( InteractionType.HOVER_END, ); const wrapper = new DOMWrapper(document.body); await wrapper.trigger('mousemove'); expect(dataOverlayTool.selected.value).toBe(null); }); it('should defocus mcad onInteraction on hover end', async () => { const dataOverlayTool = useDataOverlayTool(); dataOverlayTool.isActive.value = true; await flushPromises(); mcadEvent.value = McadObjectInteractionFaker.randomRaw( InteractionType.HOVER_END, ); const wrapper = new DOMWrapper(document.body); await wrapper.trigger('mousedown'); await wrapper.trigger('mouseup'); expect(dataOverlayTool.selected.value).toBe(null); }); it('should defocus mcad onInteraction on none', async () => { const dataOverlayTool = useDataOverlayTool(); dataOverlayTool.isActive.value = true; await flushPromises(); mcadEvent.value = McadObjectInteractionFaker.randomRaw( InteractionType.NONE, ); const wrapper = new DOMWrapper(document.body); await wrapper.trigger('mousedown'); await wrapper.trigger('mouseup'); expect(dataOverlayTool.selected.value).toBe(null); }); });