diff --git a/src/components/TopMenuSection.vue b/src/components/TopMenuSection.vue index 7ce1bb67e..6eafdc215 100644 --- a/src/components/TopMenuSection.vue +++ b/src/components/TopMenuSection.vue @@ -13,10 +13,8 @@ class="[&:not(:has(*>*:not(:empty)))]:hidden" > - + + diff --git a/tests-ui/tests/components/TopMenuSection.test.ts b/tests-ui/tests/components/TopMenuSection.test.ts new file mode 100644 index 000000000..5d92a0cc9 --- /dev/null +++ b/tests-ui/tests/components/TopMenuSection.test.ts @@ -0,0 +1,83 @@ +import { createTestingPinia } from '@pinia/testing' +import { mount } from '@vue/test-utils' +import { beforeEach, describe, expect, it, vi } from 'vitest' +import { computed } from 'vue' + +import TopMenuSection from '@/components/TopMenuSection.vue' +import CurrentUserButton from '@/components/topbar/CurrentUserButton.vue' +import LoginButton from '@/components/topbar/LoginButton.vue' +import { isElectron } from '@/utils/envUtil' + +const mockData = vi.hoisted(() => ({ isLoggedIn: false })) + +vi.mock('@/composables/auth/useCurrentUser', () => ({ + useCurrentUser: () => { + return { + isLoggedIn: computed(() => mockData.isLoggedIn) + } + } +})) + +vi.mock('@/utils/envUtil') +vi.mock('@/stores/firebaseAuthStore', () => ({ + useFirebaseAuthStore: vi.fn(() => ({ + currentUser: null, + loading: false + })) +})) + +function createWrapper() { + return mount(TopMenuSection, { + global: { + plugins: [createTestingPinia({ createSpy: vi.fn })], + stubs: { + SubgraphBreadcrumb: true, + CurrentUserButton: true, + LoginButton: true + } + } + }) +} + +describe('TopMenuSection', () => { + beforeEach(() => { + vi.resetAllMocks() + }) + + describe('authentication state', () => { + describe('when user is logged in', () => { + beforeEach(() => { + mockData.isLoggedIn = true + }) + + it('should display CurrentUserButton and not display LoginButton', () => { + const wrapper = createWrapper() + expect(wrapper.findComponent(CurrentUserButton).exists()).toBe(true) + expect(wrapper.findComponent(LoginButton).exists()).toBe(false) + }) + }) + + describe('when user is not logged in', () => { + beforeEach(() => { + mockData.isLoggedIn = false + }) + + describe('on desktop platform', () => { + it('should display LoginButton and not display CurrentUserButton', () => { + vi.mocked(isElectron).mockReturnValue(true) + const wrapper = createWrapper() + expect(wrapper.findComponent(LoginButton).exists()).toBe(true) + expect(wrapper.findComponent(CurrentUserButton).exists()).toBe(false) + }) + }) + + describe('on web platform', () => { + it('should not display CurrentUserButton and not display LoginButton', () => { + const wrapper = createWrapper() + expect(wrapper.findComponent(CurrentUserButton).exists()).toBe(false) + expect(wrapper.findComponent(LoginButton).exists()).toBe(false) + }) + }) + }) + }) +})