import { flushPromises, mount } from '@vue/test-utils'; import { VBtn } from 'vuetify/components'; import ViewerActionBar from '@/components/modal/app-bars/ViewerActionBar.vue'; import { defineComponent } from 'vue'; import { useViewer3cr } from '@/composables/useViewer3cr'; import { useDrawerStore } from '@/stores/drawer.store'; import { storeToRefs } from 'pinia'; import { useViewerStore } from '@/stores/viewer.store'; import ShareModal from '@/components/modal/modal/ShareModal.vue'; import { useDemoStore } from '@/stores/demo.store'; import { SaveState } from '@3cr/viewer-types-ts'; import { useSaveStore } from '@/stores/save.store'; import { MockInstance } from 'vitest'; const app = defineComponent({ template: '', components: { ViewerActionBar }, }); vi.mock('@/models/scanState', async (importOriginal) => ({ ...(await importOriginal()), isLayout2x2: { value: false }, isLayout1x3: { value: false }, })); describe('Viewer3cr tests', () => { const viewer3cr = useViewer3cr(); let wrapper = mount(app); let customLayoutSpy: MockInstance; beforeEach(() => { wrapper = mount(app); customLayoutSpy = vi.spyOn(viewer3cr, 'customLayout').mockResolvedValue(); }); afterEach(() => { vi.clearAllMocks(); wrapper.unmount(); customLayoutSpy.mockRestore(); }); it('inflates', () => { expect(wrapper).toBeTruthy(); }); it('should set 2x2 view', async () => { await flushPromises(); await wrapper.findComponentByTestId('layout-2x2').trigger('click'); expect(customLayoutSpy).toHaveBeenCalled(); }); it('should show open scan', async () => { const { options } = storeToRefs(useViewerStore()); options.value.disableLayouts = false; const { isOpen } = storeToRefs(useDrawerStore()); vi.spyOn(isOpen, 'value', 'get').mockReturnValue(true); await flushPromises(); await wrapper.findComponentByTestId('layout-2x2').trigger('click'); expect(customLayoutSpy).toHaveBeenCalled(); }); it('should show all as open', async () => { const { options } = storeToRefs(useViewerStore()); options.value.disableLayouts = true; options.value.disableReset = true; const { isOpen } = storeToRefs(useDrawerStore()); vi.spyOn(isOpen, 'value', 'get').mockReturnValue(true); await flushPromises(); expect(wrapper.findComponent(ShareModal).exists()).toBe(true); }); it('should show all as open', async () => { const { options } = storeToRefs(useViewerStore()); const { state } = storeToRefs(useSaveStore()); state.value = SaveState.SAVING; options.value = useDemoStore().demoPatientOptions; const { isOpen } = storeToRefs(useDrawerStore()); vi.spyOn(isOpen, 'value', 'get').mockReturnValue(true); await flushPromises(); await wrapper.findComponentByTestId('share-btn').trigger('click'); expect(wrapper.findComponent(ShareModal).exists()).toBe(true); }); it('should show all as closed', async () => { const { options } = storeToRefs(useViewerStore()); options.value = useDemoStore().demoPatientOptions; const { isOpen } = storeToRefs(useDrawerStore()); vi.spyOn(isOpen, 'value', 'get').mockReturnValue(false); await flushPromises(); await wrapper.findComponentByTestId('share-btn').trigger('click'); expect(wrapper.findComponent(ShareModal).exists()).toBe(true); await wrapper.findComponent(ShareModal).setValue(false); expect(wrapper.findComponent(ShareModal).vm.modelValue).toBe(false); }); it('should set 1x3 view', async () => { await flushPromises(); await wrapper.findComponentByTestId('layout-1x3').trigger('click'); expect(customLayoutSpy).toHaveBeenCalled(); }); it('should download scan', async () => { const testingFn = vi.fn(); const { options } = storeToRefs(useViewerStore()); options.value.onDownloadScan = testingFn; const { isOpen } = storeToRefs(useDrawerStore()); vi.spyOn(isOpen, 'value', 'get').mockReturnValue(false); await flushPromises(); await wrapper.findComponentByTestId('download-btn').trigger('click'); expect(testingFn).toHaveBeenCalled(); }); it('should load scan', async () => { const testingFn = vi.fn(); const { options } = storeToRefs(useViewerStore()); options.value.onLoadScan = testingFn; const { isOpen } = storeToRefs(useDrawerStore()); vi.spyOn(isOpen, 'value', 'get').mockReturnValue(false); await flushPromises(); await wrapper.findComponentByTestId('load-btn').trigger('click'); expect(testingFn).toHaveBeenCalled(); }); it('should cloud scan', async () => { const testingFn = vi.fn(); const { options } = storeToRefs(useViewerStore()); options.value.onCloudStorage = testingFn; const { isOpen } = storeToRefs(useDrawerStore()); vi.spyOn(isOpen, 'value', 'get').mockReturnValue(false); await flushPromises(); await wrapper.findComponentByTestId('cloud-btn').trigger('click'); expect(testingFn).toHaveBeenCalled(); }); it('should reset scan', async () => { const resetSpy = vi.spyOn(viewer3cr, 'viewSelection').mockResolvedValue(); const { isOpen } = storeToRefs(useDrawerStore()); vi.spyOn(isOpen, 'value', 'get').mockReturnValue(false); await flushPromises(); await wrapper.findComponentByTestId('reset-btn').trigger('click'); expect(resetSpy).toHaveBeenCalledTimes(2); }); it('should save scan', async () => { const testingFn = vi .fn() .mockImplementation((_s: any, _d: any, _m: any, ssFn: any) => { ssFn(SaveState.SAVED_CLOUD); }); const { options } = storeToRefs(useViewerStore()); options.value.onSaveSession = testingFn; const { isOpen } = storeToRefs(useDrawerStore()); vi.spyOn(isOpen, 'value', 'get').mockReturnValue(false); await flushPromises(); await wrapper.findComponentByTestId('save-btn').trigger('click'); expect(testingFn).toHaveBeenCalled(); }); });