import { flushPromises, mount } from '@vue/test-utils'; import { DataOverlayMcadFaker } from '@test/fakers/data-overlay-mcad.faker'; import { useMcadStore } from '@/stores/mcad.store'; import { storeToRefs } from 'pinia'; import McadAddObjectBtn from '@/components/navigation/mcad/McadAddObjectBtn.vue'; import McadDropZone from '@/components/navigation/mcad/McadDropZone.vue'; import { traverseDirectoryTreeWrapper } from '@/functions/fileReader'; import { MockInstance } from '@vitest/spy'; import { useViewerStore } from '@/stores/viewer.store'; vi.mock('@/functions/fileReader', async (importOriginal) => ({ ...(await importOriginal()), traverseDirectoryTreeWrapper: vi.fn(), })); describe('McadAddObjectBtn tests', () => { const mcad = DataOverlayMcadFaker.random(); it('should mount', () => { const wrapper = mount(McadAddObjectBtn); expect(wrapper).toBeTruthy(); }); it('should onDropItems', async () => { ( traverseDirectoryTreeWrapper as unknown as MockInstance ).mockImplementation(async (_items, callback) => { await callback(new File([], '123')); }); const { mcads } = storeToRefs(useMcadStore()); mcads.value.push(mcad); const wrapper = mount(McadAddObjectBtn); const button = wrapper.findComponent(McadDropZone); button.vm.$emit('onDropItems', { dataTransfer: { items: [{}], }, }); await flushPromises(); await flushPromises(); await flushPromises(); expect(traverseDirectoryTreeWrapper).toHaveBeenCalled(); }); it('should onClickItems', async () => { const { options } = storeToRefs(useViewerStore()); options.value.onMCADUpload = vi.fn(); const traverseMock = traverseDirectoryTreeWrapper as unknown as MockInstance; traverseMock.mockImplementation(async (_items, callback) => { await callback(new File([], '123')); }); const { mcads } = storeToRefs(useMcadStore()); mcads.value.push(mcad); const wrapper = mount(McadAddObjectBtn); const button = wrapper.findComponent(McadDropZone); button.vm.$emit('onClick', [{ name: '123.stl' }]); await flushPromises(); expect(traverseMock).toHaveBeenCalled(); expect(options.value.onMCADUpload).toHaveBeenCalled(); }); });