import { flushPromises, mount } from '@vue/test-utils'; import AutoAnnotateMenu from '@/components/modal/menus/AutoAnnotateMenu.vue'; import { VMenu } from 'vuetify/components'; import AiModelList from '@/components/modal/modal/AiModelList.vue'; import { storeToRefs } from 'pinia'; import { useViewerStore } from '@/stores/viewer.store'; import AutoAnnotateModal from '@/components/modal/modal/AutoAnnotateModal.vue'; import AnnotationGeneratedSnackbar from '@/components/modal/snackbars/AnnotationGeneratedSnackbar.vue'; describe('AutoAnnotateMenu', () => { beforeEach(() => { vi.clearAllMocks(); }); it('should open the menu when menuOpen is true', async () => { const wrapper = mount(AutoAnnotateMenu); const menu = wrapper.findComponent(VMenu); const button = wrapper.findComponent('[data-testid="openBtn"]'); await button.trigger('click'); await menu.setValue(true); expect(menu.isVisible()).toBe(true); }); it('should call runAiModel when a model is selected', async () => { const wrapper = mount(AutoAnnotateMenu); const loading = wrapper.vm.loading; const done = wrapper.vm.done; const s_annotate = wrapper.vm.s_annotate; const runAiModelSpy = vi.fn(); const models = ['test']; const { options } = storeToRefs(useViewerStore()); options.value.onRunAIModel = runAiModelSpy; const menu = wrapper.findComponent(VMenu); const button = wrapper.findComponent('[data-testid="openBtn"]'); await button.trigger('click'); await menu.setValue(true); const aiModelList = wrapper.findComponent(AiModelList); await aiModelList.setValue(models, 'selected'); await menu.setValue(false); await wrapper.vm.$nextTick(); await button.trigger('click'); expect(menu.isVisible()).toBe(true); expect(runAiModelSpy).toHaveBeenCalledWith(models); await new Promise((resolve) => setTimeout(resolve, 4000)); expect(aiModelList.isVisible()).toBe(false); expect(loading).toBeFalsy; expect(done).toBeTruthy; expect(s_annotate).toBeTruthy; }); it('should open the menu when no models are selected', async () => { const runAiModelSpy = vi.fn(); const models: Array = []; const { options } = storeToRefs(useViewerStore()); options.value.onRunAIModel = runAiModelSpy; const wrapper = mount(AutoAnnotateMenu); const menu = wrapper.findComponent(VMenu); const button = wrapper.findComponent('[data-testid="openBtn"]'); await button.trigger('click'); await menu.setValue(true); const aiModelList = wrapper.findComponent(AiModelList); await aiModelList.setValue(models, 'selected'); await menu.setValue(false); await wrapper.vm.$nextTick(); await button.trigger('click'); expect(menu.isVisible()).toBe(true); expect(aiModelList.isVisible()).toBe(true); expect(runAiModelSpy).not.toHaveBeenCalledWith(models); }); it('should set autoAnnotate model loading', async () => { const wrapper = mount(AutoAnnotateMenu); const autoAnnotateModal = wrapper.findComponent(AutoAnnotateModal); await autoAnnotateModal.setValue(true, 'modelValue'); await flushPromises(); expect(autoAnnotateModal.vm.modelValue).toBe(true); }); it('should set annotationGeneratedSnackbar model s_annotate ', async () => { const wrapper = mount(AutoAnnotateMenu); const annotationGeneratedSnackbar = wrapper.findComponent( AnnotationGeneratedSnackbar, ); await annotationGeneratedSnackbar.setValue(true, 'modelValue'); await flushPromises(); expect(annotationGeneratedSnackbar.vm.modelValue).toBe(true); }); });