diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-03-23 15:09:28 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-03-23 15:09:28 +0000 |
commit | c46b011d3f578d2455443dfabf24226c738c8903 (patch) | |
tree | 89107fa4ccf5340dc14a7d0d2f74a0372e56985f /spec/frontend | |
parent | b38fc20ae0e90d5b1c538a139aa0a7da1b7b5726 (diff) | |
download | gitlab-ce-c46b011d3f578d2455443dfabf24226c738c8903.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/frontend')
4 files changed, 167 insertions, 45 deletions
diff --git a/spec/frontend/boards/stores/getters_spec.js b/spec/frontend/boards/stores/getters_spec.js index 32d73d861bc..0541c40061c 100644 --- a/spec/frontend/boards/stores/getters_spec.js +++ b/spec/frontend/boards/stores/getters_spec.js @@ -177,4 +177,31 @@ describe('Boards - Getters', () => { expect(getters.activeGroupProjects(state)).toEqual([mockGroupProject1]); }); }); + + describe('isIssueBoard', () => { + it.each` + issuableType | expected + ${'issue'} | ${true} + ${'epic'} | ${false} + `( + 'returns $expected when issuableType on state is $issuableType', + ({ issuableType, expected }) => { + const state = { + issuableType, + }; + + expect(getters.isIssueBoard(state)).toBe(expected); + }, + ); + }); + + describe('isEpicBoard', () => { + afterEach(() => { + window.gon = { features: {} }; + }); + + it('returns false', () => { + expect(getters.isEpicBoard()).toBe(false); + }); + }); }); diff --git a/spec/frontend/create_merge_request_dropdown_spec.js b/spec/frontend/create_merge_request_dropdown_spec.js index 08c05c6ec38..b4c13981dd5 100644 --- a/spec/frontend/create_merge_request_dropdown_spec.js +++ b/spec/frontend/create_merge_request_dropdown_spec.js @@ -20,7 +20,9 @@ describe('CreateMergeRequestDropdown', () => { </div> <div class="js-ref"></div> <div class="js-create-mr"></div> - <div class="js-create-merge-request"></div> + <div class="js-create-merge-request"> + <span class="js-spinner"></span> + </div> <div class="js-create-target"></div> <div class="js-dropdown-toggle"></div> </div> @@ -100,4 +102,18 @@ describe('CreateMergeRequestDropdown', () => { expect(dropdown.createMergeRequestButton.classList).toContain('disabled'); }); }); + + describe('setLoading', () => { + it.each` + loading | hasClass + ${true} | ${false} + ${false} | ${true} + `('it toggle loading spinner when loading is $loading', ({ loading, hasClass }) => { + dropdown.setLoading(loading); + + expect(document.querySelector('.js-spinner').classList.contains('gl-display-none')).toEqual( + hasClass, + ); + }); + }); }); diff --git a/spec/frontend/projects/commit/components/commit_options_dropdown_spec.js b/spec/frontend/projects/commit/components/commit_options_dropdown_spec.js new file mode 100644 index 00000000000..70491405986 --- /dev/null +++ b/spec/frontend/projects/commit/components/commit_options_dropdown_spec.js @@ -0,0 +1,123 @@ +import { GlDropdownDivider, GlDropdownSectionHeader } from '@gitlab/ui'; +import { shallowMount } from '@vue/test-utils'; +import { extendedWrapper } from 'helpers/vue_test_utils_helper'; +import CommitOptionsDropdown from '~/projects/commit/components/commit_options_dropdown.vue'; +import { OPEN_REVERT_MODAL, OPEN_CHERRY_PICK_MODAL } from '~/projects/commit/constants'; +import eventHub from '~/projects/commit/event_hub'; + +describe('BranchesDropdown', () => { + let wrapper; + const provide = { + newProjectTagPath: '_new_project_tag_path_', + emailPatchesPath: '_email_patches_path_', + plainDiffPath: '_plain_diff_path_', + }; + + const createComponent = (props = {}) => { + wrapper = extendedWrapper( + shallowMount(CommitOptionsDropdown, { + provide, + propsData: { + canRevert: true, + canCherryPick: true, + canTag: true, + canEmailPatches: true, + ...props, + }, + }), + ); + }; + + const findRevertLink = () => wrapper.findByTestId('revert-link'); + const findCherryPickLink = () => wrapper.findByTestId('cherry-pick-link'); + const findTagItem = () => wrapper.findByTestId('tag-link'); + const findEmailPatchesItem = () => wrapper.findByTestId('email-patches-link'); + const findPlainDiffItem = () => wrapper.findByTestId('plain-diff-link'); + const findDivider = () => wrapper.findComponent(GlDropdownDivider); + const findSectionHeader = () => wrapper.findComponent(GlDropdownSectionHeader); + + describe('Everything enabled', () => { + beforeEach(() => { + createComponent(); + }); + + it('has expected dropdown button text', () => { + expect(wrapper.attributes('text')).toBe('Options'); + }); + + it('has expected items', () => { + expect( + [ + findRevertLink().exists(), + findCherryPickLink().exists(), + findTagItem().exists(), + findDivider().exists(), + findSectionHeader().exists(), + findEmailPatchesItem().exists(), + findPlainDiffItem().exists(), + ].every((exists) => exists), + ).toBe(true); + }); + + it('has expected href links', () => { + expect(findTagItem().attributes('href')).toBe(provide.newProjectTagPath); + expect(findEmailPatchesItem().attributes('href')).toBe(provide.emailPatchesPath); + expect(findPlainDiffItem().attributes('href')).toBe(provide.plainDiffPath); + }); + }); + + describe('Different dropdown item permutations', () => { + it('does not have a revert option', () => { + createComponent({ canRevert: false }); + + expect(findRevertLink().exists()).toBe(false); + }); + + it('does not have a cherry-pick option', () => { + createComponent({ canCherryPick: false }); + + expect(findCherryPickLink().exists()).toBe(false); + }); + + it('does not have a tag option', () => { + createComponent({ canTag: false }); + + expect(findTagItem().exists()).toBe(false); + }); + + it('does not have a email patches options', () => { + createComponent({ canEmailPatches: false }); + + expect(findEmailPatchesItem().exists()).toBe(false); + }); + + it('only has the download items', () => { + createComponent({ canRevert: false, canCherryPick: false, canTag: false }); + + expect(findDivider().exists()).toBe(false); + expect(findEmailPatchesItem().exists()).toBe(true); + expect(findPlainDiffItem().exists()).toBe(true); + }); + }); + + describe('Modal triggering', () => { + let spy; + + beforeEach(() => { + spy = jest.spyOn(eventHub, '$emit'); + createComponent(); + }); + + it('emits openModal for revert', () => { + findRevertLink().vm.$emit('click'); + + expect(spy).toHaveBeenCalledWith(OPEN_REVERT_MODAL); + }); + + it('emits openModal for cherry-pick', () => { + findCherryPickLink().vm.$emit('click'); + + expect(spy).toHaveBeenCalledWith(OPEN_CHERRY_PICK_MODAL); + }); + }); +}); diff --git a/spec/frontend/projects/commit/components/form_trigger_spec.js b/spec/frontend/projects/commit/components/form_trigger_spec.js deleted file mode 100644 index 4503493c0a6..00000000000 --- a/spec/frontend/projects/commit/components/form_trigger_spec.js +++ /dev/null @@ -1,44 +0,0 @@ -import { GlLink } from '@gitlab/ui'; -import { shallowMount } from '@vue/test-utils'; -import FormTrigger from '~/projects/commit/components/form_trigger.vue'; -import eventHub from '~/projects/commit/event_hub'; - -const displayText = '_display_text_'; - -const createComponent = () => { - return shallowMount(FormTrigger, { - provide: { displayText }, - propsData: { openModal: '_open_modal_' }, - }); -}; - -describe('FormTrigger', () => { - let wrapper; - let spy; - - beforeEach(() => { - spy = jest.spyOn(eventHub, '$emit'); - wrapper = createComponent(); - }); - - afterEach(() => { - wrapper.destroy(); - wrapper = null; - }); - - const findLink = () => wrapper.find(GlLink); - - describe('displayText', () => { - it('includes the correct displayText for the link', () => { - expect(findLink().text()).toBe(displayText); - }); - }); - - describe('clicking the link', () => { - it('emits openModal', () => { - findLink().vm.$emit('click'); - - expect(spy).toHaveBeenCalledWith('_open_modal_'); - }); - }); -}); |