diff options
Diffstat (limited to 'spec/frontend/work_items')
5 files changed, 44 insertions, 134 deletions
diff --git a/spec/frontend/work_items/components/work_item_detail_modal_spec.js b/spec/frontend/work_items/components/work_item_detail_modal_spec.js index 1bdf5d1c840..e305cc310bd 100644 --- a/spec/frontend/work_items/components/work_item_detail_modal_spec.js +++ b/spec/frontend/work_items/components/work_item_detail_modal_spec.js @@ -6,21 +6,16 @@ import waitForPromises from 'helpers/wait_for_promises'; import createMockApollo from 'helpers/mock_apollo_helper'; import { stubComponent } from 'helpers/stub_component'; import WorkItemDetailModal from '~/work_items/components/work_item_detail_modal.vue'; -import deleteWorkItemFromTaskMutation from '~/work_items/graphql/delete_task_from_work_item.mutation.graphql'; import deleteWorkItemMutation from '~/work_items/graphql/delete_work_item.mutation.graphql'; import WorkItemDetail from '~/work_items/components/work_item_detail.vue'; -import { - deleteWorkItemFromTaskMutationErrorResponse, - deleteWorkItemFromTaskMutationResponse, - deleteWorkItemMutationErrorResponse, - deleteWorkItemResponse, -} from '../mock_data'; +import { deleteWorkItemMutationErrorResponse, deleteWorkItemResponse } from '../mock_data'; describe('WorkItemDetailModal component', () => { let wrapper; Vue.use(VueApollo); + const workItemId = 'gid://gitlab/WorkItem/1'; const hideModal = jest.fn(); const GlModal = { template: ` @@ -33,37 +28,23 @@ describe('WorkItemDetailModal component', () => { }, }; - const defaultPropsData = { - issueGid: 'gid://gitlab/WorkItem/1', - workItemId: 'gid://gitlab/WorkItem/2', - }; - const findModal = () => wrapper.findComponent(GlModal); const findAlert = () => wrapper.findComponent(GlAlert); const findWorkItemDetail = () => wrapper.findComponent(WorkItemDetail); const createComponent = ({ - lockVersion, - lineNumberStart, - lineNumberEnd, error = false, - deleteWorkItemFromTaskMutationHandler = jest - .fn() - .mockResolvedValue(deleteWorkItemFromTaskMutationResponse), deleteWorkItemMutationHandler = jest.fn().mockResolvedValue(deleteWorkItemResponse), } = {}) => { const apolloProvider = createMockApollo([ - [deleteWorkItemFromTaskMutation, deleteWorkItemFromTaskMutationHandler], [deleteWorkItemMutation, deleteWorkItemMutationHandler], ]); wrapper = shallowMount(WorkItemDetailModal, { apolloProvider, propsData: { - ...defaultPropsData, - lockVersion, - lineNumberStart, - lineNumberEnd, + workItemId, + workItemIid: '1', }, data() { return { @@ -87,9 +68,9 @@ describe('WorkItemDetailModal component', () => { expect(findWorkItemDetail().props()).toEqual({ isModal: true, - workItemId: defaultPropsData.workItemId, - workItemParentId: defaultPropsData.issueGid, - workItemIid: null, + workItemId, + workItemIid: '1', + workItemParentId: null, }); }); @@ -143,85 +124,31 @@ describe('WorkItemDetailModal component', () => { }); describe('delete work item', () => { - describe('when there is task data', () => { - it('emits workItemDeleted and closes modal', async () => { - const mutationMock = jest.fn().mockResolvedValue(deleteWorkItemFromTaskMutationResponse); - createComponent({ - lockVersion: 1, - lineNumberStart: '3', - lineNumberEnd: '3', - deleteWorkItemFromTaskMutationHandler: mutationMock, - }); - const newDesc = 'updated work item desc'; - - findWorkItemDetail().vm.$emit('deleteWorkItem'); - await waitForPromises(); - - expect(wrapper.emitted('workItemDeleted')).toEqual([[newDesc]]); - expect(hideModal).toHaveBeenCalled(); - expect(mutationMock).toHaveBeenCalledWith({ - input: { - id: defaultPropsData.issueGid, - lockVersion: 1, - taskData: { id: defaultPropsData.workItemId, lineNumberEnd: 3, lineNumberStart: 3 }, - }, - }); - }); - - it.each` - errorType | mutationMock | errorMessage - ${'an error in the mutation response'} | ${jest.fn().mockResolvedValue(deleteWorkItemFromTaskMutationErrorResponse)} | ${'Error'} - ${'a network error'} | ${jest.fn().mockRejectedValue(new Error('GraphQL networkError'))} | ${'GraphQL networkError'} - `( - 'shows an error message when there is $errorType', - async ({ mutationMock, errorMessage }) => { - createComponent({ - lockVersion: 1, - lineNumberStart: '3', - lineNumberEnd: '3', - deleteWorkItemFromTaskMutationHandler: mutationMock, - }); - - findWorkItemDetail().vm.$emit('deleteWorkItem'); - await waitForPromises(); - - expect(wrapper.emitted('workItemDeleted')).toBeUndefined(); - expect(hideModal).not.toHaveBeenCalled(); - expect(findAlert().text()).toBe(errorMessage); - }, - ); + it('emits workItemDeleted and closes modal', async () => { + const mutationMock = jest.fn().mockResolvedValue(deleteWorkItemResponse); + createComponent({ deleteWorkItemMutationHandler: mutationMock }); + + findWorkItemDetail().vm.$emit('deleteWorkItem'); + await waitForPromises(); + + expect(wrapper.emitted('workItemDeleted')).toEqual([[workItemId]]); + expect(hideModal).toHaveBeenCalled(); + expect(mutationMock).toHaveBeenCalledWith({ input: { id: workItemId } }); }); - describe('when there is no task data', () => { - it('emits workItemDeleted and closes modal', async () => { - const mutationMock = jest.fn().mockResolvedValue(deleteWorkItemResponse); - createComponent({ deleteWorkItemMutationHandler: mutationMock }); - - findWorkItemDetail().vm.$emit('deleteWorkItem'); - await waitForPromises(); - - expect(wrapper.emitted('workItemDeleted')).toEqual([[defaultPropsData.workItemId]]); - expect(hideModal).toHaveBeenCalled(); - expect(mutationMock).toHaveBeenCalledWith({ input: { id: defaultPropsData.workItemId } }); - }); - - it.each` - errorType | mutationMock | errorMessage - ${'an error in the mutation response'} | ${jest.fn().mockResolvedValue(deleteWorkItemMutationErrorResponse)} | ${'Error'} - ${'a network error'} | ${jest.fn().mockRejectedValue(new Error('GraphQL networkError'))} | ${'GraphQL networkError'} - `( - 'shows an error message when there is $errorType', - async ({ mutationMock, errorMessage }) => { - createComponent({ deleteWorkItemMutationHandler: mutationMock }); - - findWorkItemDetail().vm.$emit('deleteWorkItem'); - await waitForPromises(); - - expect(wrapper.emitted('workItemDeleted')).toBeUndefined(); - expect(hideModal).not.toHaveBeenCalled(); - expect(findAlert().text()).toBe(errorMessage); - }, - ); + it.each` + errorType | mutationMock | errorMessage + ${'an error in the mutation response'} | ${jest.fn().mockResolvedValue(deleteWorkItemMutationErrorResponse)} | ${'Error'} + ${'a network error'} | ${jest.fn().mockRejectedValue(new Error('GraphQL networkError'))} | ${'GraphQL networkError'} + `('shows an error message when there is $errorType', async ({ mutationMock, errorMessage }) => { + createComponent({ deleteWorkItemMutationHandler: mutationMock }); + + findWorkItemDetail().vm.$emit('deleteWorkItem'); + await waitForPromises(); + + expect(wrapper.emitted('workItemDeleted')).toBeUndefined(); + expect(hideModal).not.toHaveBeenCalled(); + expect(findAlert().text()).toBe(errorMessage); }); }); }); diff --git a/spec/frontend/work_items/components/work_item_links/work_item_children_wrapper_spec.js b/spec/frontend/work_items/components/work_item_links/work_item_children_wrapper_spec.js index 08b9408c656..b06be6c8083 100644 --- a/spec/frontend/work_items/components/work_item_links/work_item_children_wrapper_spec.js +++ b/spec/frontend/work_items/components/work_item_links/work_item_children_wrapper_spec.js @@ -53,11 +53,12 @@ describe('WorkItemChildrenWrapper', () => { it('remove event on child triggers `removeChild` event', () => { createComponent(); + const workItem = { id: 'gid://gitlab/WorkItem/2' }; const firstChild = findWorkItemLinkChildItems().at(0); - firstChild.vm.$emit('removeChild', 'gid://gitlab/WorkItem/2'); + firstChild.vm.$emit('removeChild', workItem); - expect(wrapper.emitted('removeChild')).toEqual([['gid://gitlab/WorkItem/2']]); + expect(wrapper.emitted('removeChild')).toEqual([[workItem]]); }); it('emits `show-modal` on `click` event', () => { diff --git a/spec/frontend/work_items/components/work_item_links/work_item_link_child_spec.js b/spec/frontend/work_items/components/work_item_links/work_item_link_child_spec.js index bc429bfb037..71d1a0e253f 100644 --- a/spec/frontend/work_items/components/work_item_links/work_item_link_child_spec.js +++ b/spec/frontend/work_items/components/work_item_links/work_item_link_child_spec.js @@ -236,7 +236,7 @@ describe('WorkItemLinkChild', () => { it('removeChild event on menu triggers `click-remove-child` event', () => { itemMenuEl.vm.$emit('removeChild'); - expect(wrapper.emitted('removeChild')).toEqual([[workItemTask.id]]); + expect(wrapper.emitted('removeChild')).toEqual([[workItemTask]]); }); }); @@ -249,7 +249,7 @@ describe('WorkItemLinkChild', () => { (widget) => widget.type === WIDGET_TYPE_HIERARCHY, ); const getChildrenNodes = () => getWidgetHierarchy().children.nodes; - const findFirstItemId = () => getChildrenNodes()[0].id; + const findFirstItem = () => getChildrenNodes()[0]; beforeEach(() => { getWorkItemTreeQueryHandler.mockClear(); @@ -328,7 +328,7 @@ describe('WorkItemLinkChild', () => { findExpandButton().vm.$emit('click'); await waitForPromises(); - findTreeChildren().vm.$emit('removeChild', findFirstItemId()); + findTreeChildren().vm.$emit('removeChild', findFirstItem()); await waitForPromises(); expect($toast.show).toHaveBeenCalledWith('Child removed', { @@ -343,23 +343,23 @@ describe('WorkItemLinkChild', () => { const childrenNodes = getChildrenNodes(); expect(findTreeChildren().props('children')).toEqual(childrenNodes); - findTreeChildren().vm.$emit('removeChild', findFirstItemId()); + findTreeChildren().vm.$emit('removeChild', findFirstItem()); await waitForPromises(); expect(findTreeChildren().props('children')).toEqual([]); }); it('calls correct mutation with correct variables', async () => { - const firstItemId = findFirstItemId(); + const firstItem = findFirstItem(); findExpandButton().vm.$emit('click'); await waitForPromises(); - findTreeChildren().vm.$emit('removeChild', firstItemId); + findTreeChildren().vm.$emit('removeChild', firstItem); expect(mutationChangeParentHandler).toHaveBeenCalledWith({ input: { - id: firstItemId, + id: firstItem.id, hierarchyWidget: { parentId: null, }, @@ -383,7 +383,7 @@ describe('WorkItemLinkChild', () => { findExpandButton().vm.$emit('click'); await waitForPromises(); - findTreeChildren().vm.$emit('removeChild', findFirstItemId()); + findTreeChildren().vm.$emit('removeChild', findFirstItem()); await waitForPromises(); expect(createAlert).toHaveBeenCalledWith({ diff --git a/spec/frontend/work_items/components/work_item_links/work_item_links_spec.js b/spec/frontend/work_items/components/work_item_links/work_item_links_spec.js index cc3d2394231..786f8604039 100644 --- a/spec/frontend/work_items/components/work_item_links/work_item_links_spec.js +++ b/spec/frontend/work_items/components/work_item_links/work_item_links_spec.js @@ -240,7 +240,7 @@ describe('WorkItemLinks', () => { }); it('calls correct mutation with correct variables', async () => { - findWorkItemLinkChildrenWrapper().vm.$emit('removeChild', firstChild.id); + findWorkItemLinkChildrenWrapper().vm.$emit('removeChild', firstChild); await waitForPromises(); @@ -255,7 +255,7 @@ describe('WorkItemLinks', () => { }); it('shows toast when mutation succeeds', async () => { - findWorkItemLinkChildrenWrapper().vm.$emit('removeChild', firstChild.id); + findWorkItemLinkChildrenWrapper().vm.$emit('removeChild', firstChild); await waitForPromises(); @@ -267,7 +267,7 @@ describe('WorkItemLinks', () => { it('renders correct number of children after removal', async () => { expect(findWorkItemLinkChildrenWrapper().props().children).toHaveLength(4); - findWorkItemLinkChildrenWrapper().vm.$emit('removeChild', firstChild.id); + findWorkItemLinkChildrenWrapper().vm.$emit('removeChild', firstChild); await waitForPromises(); expect(findWorkItemLinkChildrenWrapper().props().children).toHaveLength(3); diff --git a/spec/frontend/work_items/mock_data.js b/spec/frontend/work_items/mock_data.js index 0a0835bcb36..0d5f92d0f4a 100644 --- a/spec/frontend/work_items/mock_data.js +++ b/spec/frontend/work_items/mock_data.js @@ -714,24 +714,6 @@ export const deleteWorkItemMutationErrorResponse = { }, }; -export const deleteWorkItemFromTaskMutationResponse = { - data: { - workItemDeleteTask: { - workItem: { id: 123, descriptionHtml: 'updated work item desc' }, - errors: [], - }, - }, -}; - -export const deleteWorkItemFromTaskMutationErrorResponse = { - data: { - workItemDeleteTask: { - workItem: { id: 123, descriptionHtml: 'updated work item desc' }, - errors: ['Error'], - }, - }, -}; - export const workItemDatesSubscriptionResponse = { data: { issuableDatesUpdated: { |