import { flushPromises, mount } from '@vue/test-utils'; import { VBtn, VMenu } from 'vuetify/components'; import { storeToRefs } from 'pinia'; import { useViewerStore } from '@/stores/viewer.store'; import AvatarDropdownMenu from '@/components/modal/menus/AvatarDropdownMenu.vue'; import DemoAvatarDropdownMenu from '@/components/demo/DemoAvatarDropdownMenu.vue'; import { useDemoStore } from '@/stores/demo.store'; describe('AvatarDropdownMenu', () => { it('should call click when button is triggered', async () => { const onProfileDropdownSpy = vi.fn(); const { options } = storeToRefs(useViewerStore()); options.value.onProfileDropdown = onProfileDropdownSpy; const wrapper = mount(AvatarDropdownMenu); const demoAvatarDropDownMenu = wrapper.findComponent( DemoAvatarDropdownMenu, ); const button = wrapper.findComponent(VBtn); await button.trigger('click'); expect(demoAvatarDropDownMenu).toBeTruthy(); }); it('should show DemoAvatarDropdownMenu is IsDemo', async () => { const wrapper2 = mount(DemoAvatarDropdownMenu); const demoMenu = wrapper2.findComponent(VMenu); const { isDemo } = storeToRefs(useDemoStore()); isDemo.value = true; expect(demoMenu).toBeTruthy(); }); it('should close and emit close', async () => { const wrapper = mount(AvatarDropdownMenu); const demoAvatarDropDownMenu = wrapper.findComponent( DemoAvatarDropdownMenu, ); demoAvatarDropDownMenu.vm.$emit('close'); expect(wrapper.emitted('close')).toStrictEqual([[]]); }); it('should mount if showAvatarDropdown is true', async () => { const onProfileDropdownSpy = vi.fn(); const { options } = storeToRefs(useViewerStore()); options.value.onProfileDropdown = onProfileDropdownSpy; const wrapper = mount(AvatarDropdownMenu); const button = wrapper.findComponent(VBtn); await flushPromises(); expect(button.isVisible()).toBe(true); }); it('button should not exist if showAvatarDropdown is undefined', async () => { const wrapper = mount(AvatarDropdownMenu); const button = wrapper.findComponent(VBtn); const { options } = storeToRefs(useViewerStore()); options.value.onProfileDropdown = undefined; await flushPromises(); expect(button.exists()).toBe(false); }); });