diff options
Diffstat (limited to 'spec/frontend/projects/commit')
7 files changed, 180 insertions, 54 deletions
diff --git a/spec/frontend/projects/commit/components/branches_dropdown_spec.js b/spec/frontend/projects/commit/components/branches_dropdown_spec.js index 7686c28c7fc..ab84c3768d0 100644 --- a/spec/frontend/projects/commit/components/branches_dropdown_spec.js +++ b/spec/frontend/projects/commit/components/branches_dropdown_spec.js @@ -15,7 +15,7 @@ describe('BranchesDropdown', () => { const createComponent = (term, state = { isFetching: false }) => { store = new Vuex.Store({ getters: { - joinedBranches: () => ['_master_', '_branch_1_', '_branch_2_'], + joinedBranches: () => ['_main_', '_branch_1_', '_branch_2_'], }, actions: { fetchBranches: spyFetchBranches, @@ -94,13 +94,13 @@ describe('BranchesDropdown', () => { it('renders all branches when search term is empty', () => { expect(findAllDropdownItems()).toHaveLength(3); - expect(findDropdownItemByIndex(0).text()).toBe('_master_'); + expect(findDropdownItemByIndex(0).text()).toBe('_main_'); expect(findDropdownItemByIndex(1).text()).toBe('_branch_1_'); expect(findDropdownItemByIndex(2).text()).toBe('_branch_2_'); }); it('should not be selected on the inactive branch', () => { - expect(wrapper.vm.isSelected('_master_')).toBe(false); + expect(wrapper.vm.isSelected('_main_')).toBe(false); }); }); diff --git a/spec/frontend/projects/commit/components/commit_comments_button_spec.js b/spec/frontend/projects/commit/components/commit_comments_button_spec.js new file mode 100644 index 00000000000..873270c5be1 --- /dev/null +++ b/spec/frontend/projects/commit/components/commit_comments_button_spec.js @@ -0,0 +1,42 @@ +import { shallowMount } from '@vue/test-utils'; +import { extendedWrapper } from 'helpers/vue_test_utils_helper'; +import CommitCommentsButton from '~/projects/commit/components/commit_comments_button.vue'; + +describe('CommitCommentsButton', () => { + let wrapper; + + const createComponent = (props = {}) => { + wrapper = extendedWrapper( + shallowMount(CommitCommentsButton, { + propsData: { + commentsCount: 1, + ...props, + }, + }), + ); + }; + + const tooltip = () => wrapper.findByTestId('comment-button-wrapper'); + + describe('Comment Button', () => { + it('has proper tooltip and button attributes for 1 comment', () => { + createComponent(); + + expect(tooltip().attributes('title')).toBe('1 comment on this commit'); + expect(tooltip().text()).toBe('1'); + }); + + it('has proper tooltip and button attributes for multiple comments', () => { + createComponent({ commentsCount: 2 }); + + expect(tooltip().attributes('title')).toBe('2 comments on this commit'); + expect(tooltip().text()).toBe('2'); + }); + + it('does not show when there are no comments', () => { + createComponent({ commentsCount: 0 }); + + expect(tooltip().exists()).toBe(false); + }); + }); +}); 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_modal_spec.js b/spec/frontend/projects/commit/components/form_modal_spec.js index 708644cb7ee..9688cb47799 100644 --- a/spec/frontend/projects/commit/components/form_modal_spec.js +++ b/spec/frontend/projects/commit/components/form_modal_spec.js @@ -17,15 +17,14 @@ describe('CommitFormModal', () => { let store; let axiosMock; - const createComponent = (method, state = {}, provide = {}) => { + const createComponent = (method, state = {}, provide = {}, propsData = {}) => { store = createStore({ ...mockData.mockModal, ...state }); wrapper = extendedWrapper( method(CommitFormModal, { provide: { ...provide, - glFeatures: { pickIntoProject: true }, }, - propsData: { ...mockData.modalPropsData }, + propsData: { ...mockData.modalPropsData, ...propsData }, store, attrs: { static: true, @@ -160,6 +159,12 @@ describe('CommitFormModal', () => { }); it('Changes the target_project_id input value', async () => { + createComponent( + shallowMount, + {}, + { glFeatures: { pickIntoProject: true } }, + { isCherryPick: true }, + ); findProjectsDropdown().vm.$emit('selectProject', '_changed_project_value_'); await wrapper.vm.$nextTick(); 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_'); - }); - }); -}); diff --git a/spec/frontend/projects/commit/mock_data.js b/spec/frontend/projects/commit/mock_data.js index e4dcb24c4c0..34e9c400af4 100644 --- a/spec/frontend/projects/commit/mock_data.js +++ b/spec/frontend/projects/commit/mock_data.js @@ -23,6 +23,6 @@ export default { modalId: '_modal_id_', openModal: '_open_modal_', }, - mockBranches: ['_branch_1', '_abc_', '_master_'], + mockBranches: ['_branch_1', '_abc_', '_main_'], mockProjects: ['_project_1', '_abc_', '_project_'], }; diff --git a/spec/frontend/projects/commit/store/mutations_spec.js b/spec/frontend/projects/commit/store/mutations_spec.js index 8989e769772..60abf0fddad 100644 --- a/spec/frontend/projects/commit/store/mutations_spec.js +++ b/spec/frontend/projects/commit/store/mutations_spec.js @@ -27,7 +27,7 @@ describe('Commit form modal mutations', () => { describe('CLEAR_MODAL', () => { it('should clear modal state ', () => { - stateCopy = { branch: '_master_', defaultBranch: '_default_branch_' }; + stateCopy = { branch: '_main_', defaultBranch: '_default_branch_' }; mutations[types.CLEAR_MODAL](stateCopy); @@ -47,7 +47,7 @@ describe('Commit form modal mutations', () => { describe('SET_BRANCH', () => { it('should set branch', () => { - stateCopy = { branch: '_master_' }; + stateCopy = { branch: '_main_' }; mutations[types.SET_BRANCH](stateCopy, '_changed_branch_'); @@ -57,7 +57,7 @@ describe('Commit form modal mutations', () => { describe('SET_SELECTED_BRANCH', () => { it('should set selectedBranch', () => { - stateCopy = { selectedBranch: '_master_' }; + stateCopy = { selectedBranch: '_main_' }; mutations[types.SET_SELECTED_BRANCH](stateCopy, '_changed_branch_'); |