import { describe, expect, it, vi } from 'vitest' import { mount } from '@vue/test-utils' const mockSetLastContext = vi.fn() const mockResolveLandingRoute = vi.fn(() => ({ path: '/portal/evenementen' })) const mockPush = vi.fn() const authStoreState: Record = { showContextSwitcher: true, setLastContext: mockSetLastContext, resolveLandingRoute: mockResolveLandingRoute, } vi.mock('@/stores/useAuthStore', () => ({ useAuthStore: () => authStoreState, })) vi.mock('vue-router', async importOriginal => ({ ...(await importOriginal()), useRoute: () => ({ meta: { context: 'organizer' } }), useRouter: () => ({ push: mockPush }), })) const ContextSwitcher = (await import('../ContextSwitcher.vue')).default const stubs = { VMenu: { template: '
' }, VBtn: { template: '' }, VList: { template: '
' }, VListItem: { props: ['dataTest'], template: '
', emits: ['click'], }, VListItemTitle: { template: '' }, VIcon: true, } describe('ContextSwitcher', () => { it('renders when showContextSwitcher is true', () => { authStoreState.showContextSwitcher = true const wrapper = mount(ContextSwitcher, { global: { stubs } }) expect(wrapper.find('[data-test="menu"]').exists()).toBe(true) }) it('does not render when showContextSwitcher is false (single-context user)', () => { authStoreState.showContextSwitcher = false const wrapper = mount(ContextSwitcher, { global: { stubs } }) expect(wrapper.find('[data-test="menu"]').exists()).toBe(false) }) it('clicking the alternative context calls setLastContext and router.push', async () => { authStoreState.showContextSwitcher = true mockSetLastContext.mockClear() mockResolveLandingRoute.mockClear() mockPush.mockClear() const wrapper = mount(ContextSwitcher, { global: { stubs } }) // current context is 'organizer' (from mocked route.meta.context), // so the dropdown shows 'switch-to-portal'. await wrapper.find('[data-test="switch-to-portal"]').trigger('click') expect(mockSetLastContext).toHaveBeenCalledWith('portal') expect(mockResolveLandingRoute).toHaveBeenCalledWith('portal') expect(mockPush).toHaveBeenCalledWith({ path: '/portal/evenementen' }) }) })