diff options
author | Sarah German <sgerman@gitlab.com> | 2022-07-26 20:39:44 +0300 |
---|---|---|
committer | Sarah German <sgerman@gitlab.com> | 2022-07-26 20:39:44 +0300 |
commit | 2c10857eb8848aef04236a3ada94ad14bd3b9cd8 (patch) | |
tree | 85d6c2175174ed76d2160bfb53b57230e2d58a65 /spec/frontend | |
parent | eee87da334561ee694eaeb8e0720ee45c99d84f8 (diff) |
Ensure correct paths for Versions menu links
Diffstat (limited to 'spec/frontend')
-rw-r--r-- | spec/frontend/default/components/helpers/versions_menu_helper.js | 14 | ||||
-rw-r--r-- | spec/frontend/default/components/versions_menu_spec.js | 68 |
2 files changed, 78 insertions, 4 deletions
diff --git a/spec/frontend/default/components/helpers/versions_menu_helper.js b/spec/frontend/default/components/helpers/versions_menu_helper.js new file mode 100644 index 00000000..bdc1fa88 --- /dev/null +++ b/spec/frontend/default/components/helpers/versions_menu_helper.js @@ -0,0 +1,14 @@ +/** + * Creates a mock browser window object with a given path. + * @param {String} pathname + */ +export const setWindowPath = (pathname) => { + const location = { + ...window.location, + pathname, + }; + Object.defineProperty(window, 'location', { + writable: true, + value: location, + }); +}; diff --git a/spec/frontend/default/components/versions_menu_spec.js b/spec/frontend/default/components/versions_menu_spec.js index e7cadd20..01bb43e2 100644 --- a/spec/frontend/default/components/versions_menu_spec.js +++ b/spec/frontend/default/components/versions_menu_spec.js @@ -6,22 +6,82 @@ import { mount } from '@vue/test-utils'; import flushPromises from 'flush-promises'; import VersionsMenu from '../../../../content/frontend/default/components/versions_menu.vue'; import { getVersions } from '../../../../content/frontend/services/fetch_versions'; +import { setWindowPath } from './helpers/versions_menu_helper'; jest.mock('../../../../content/frontend/services/fetch_versions'); +const mockVersions = { + next: '15.3', + current: '15.2', + last_minor: ['15.1', '15.0'], + last_major: ['14.10', '13.12'], +}; + beforeEach(() => { jest.clearAllMocks(); + getVersions.mockResolvedValueOnce(mockVersions); }); describe('component: Versions menu', () => { it('Fetches versions.json and displays current version', async () => { - const mockNextVersion = '15.2'; - getVersions.mockResolvedValueOnce({ next: mockNextVersion }); const wrapper = mount(VersionsMenu); - await flushPromises(); + expect(getVersions).toHaveBeenCalledTimes(1); const nextVersion = wrapper.find('[data-testid="next-version"]').element.textContent; - expect(nextVersion).toEqual(mockNextVersion); + expect(nextVersion).toEqual(mockVersions.next); + }); + + it('Generates correct menu links from the homepage', async () => { + setWindowPath('/'); + const wrapper = mount(VersionsMenu); + + expect(wrapper.vm.getVersionPath('')).toBe('/'); + expect(wrapper.vm.getVersionPath(mockVersions.current)).toBe(`/${mockVersions.current}/`); + + Object.values([...mockVersions.last_major, ...mockVersions.last_minor]).forEach( + function testLink(v) { + expect(wrapper.vm.getVersionPath(v)).toBe(`/${v}/`); + }, + ); + }); + + it('Generates correct menu links from an interior page', async () => { + setWindowPath('/ee/user/project/issue_board.html'); + const wrapper = mount(VersionsMenu); + await wrapper.setData({ activeVersion: '15.3', versions: mockVersions }); + + expect(wrapper.vm.getVersionPath('')).toBe('/ee/user/project/issue_board.html'); + expect(wrapper.vm.getVersionPath(mockVersions.current)).toBe( + `/${mockVersions.current}/ee/user/project/issue_board.html`, + ); + + Object.values([...mockVersions.last_major, ...mockVersions.last_minor]).forEach( + function testLink(v) { + expect(wrapper.vm.getVersionPath(v)).toBe(`/${v}/ee/user/project/issue_board.html`); + }, + ); + }); + + it('Generates correct menu links from an older version', async () => { + setWindowPath('/14.10/runner'); + const wrapper = mount(VersionsMenu); + await wrapper.setData({ activeVersion: '14.10', versions: mockVersions }); + + expect(wrapper.vm.getVersionPath('')).toBe('/runner'); + expect(wrapper.vm.getVersionPath(mockVersions.current)).toBe(`/${mockVersions.current}/runner`); + + Object.values([...mockVersions.last_major, ...mockVersions.last_minor]).forEach( + function testLink(v) { + expect(wrapper.vm.getVersionPath(v)).toBe(`/${v}/runner`); + }, + ); + }); + + it('Detects the active version from the page URL', async () => { + setWindowPath('/14.10/runner'); + const wrapper = mount(VersionsMenu); + await flushPromises(); + expect(wrapper.vm.getActiveVersion(mockVersions)).toBe('14.10'); }); }); |