summaryrefslogtreecommitdiff
path: root/spec/frontend/work_items
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/work_items')
-rw-r--r--spec/frontend/work_items/components/work_item_detail_modal_spec.js133
-rw-r--r--spec/frontend/work_items/components/work_item_links/work_item_children_wrapper_spec.js5
-rw-r--r--spec/frontend/work_items/components/work_item_links/work_item_link_child_spec.js16
-rw-r--r--spec/frontend/work_items/components/work_item_links/work_item_links_spec.js6
-rw-r--r--spec/frontend/work_items/mock_data.js18
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: {