96 lines
2.7 KiB
JavaScript
96 lines
2.7 KiB
JavaScript
import { GlAlert } from '@gitlab/ui';
|
|
import { shallowMount } from '@vue/test-utils';
|
|
import Vue from 'vue';
|
|
import VueApollo from 'vue-apollo';
|
|
import waitForPromises from 'helpers/wait_for_promises';
|
|
import createMockApollo from 'helpers/mock_apollo_helper';
|
|
import { visitUrl } from '~/lib/utils/url_utility';
|
|
import WorkItemDetail from '~/work_items/components/work_item_detail.vue';
|
|
import WorkItemsRoot from '~/work_items/pages/work_item_root.vue';
|
|
import deleteWorkItem from '~/work_items/graphql/delete_work_item.mutation.graphql';
|
|
import { deleteWorkItemResponse, deleteWorkItemFailureResponse } from '../mock_data';
|
|
|
|
jest.mock('~/lib/utils/url_utility', () => ({
|
|
...jest.requireActual('~/lib/utils/url_utility'),
|
|
visitUrl: jest.fn(),
|
|
}));
|
|
|
|
Vue.use(VueApollo);
|
|
|
|
describe('Work items root component', () => {
|
|
let wrapper;
|
|
const issuesListPath = '/-/issues';
|
|
const mockToastShow = jest.fn();
|
|
|
|
const findWorkItemDetail = () => wrapper.findComponent(WorkItemDetail);
|
|
const findAlert = () => wrapper.findComponent(GlAlert);
|
|
|
|
const createComponent = ({
|
|
deleteWorkItemHandler = jest.fn().mockResolvedValue(deleteWorkItemResponse),
|
|
} = {}) => {
|
|
wrapper = shallowMount(WorkItemsRoot, {
|
|
apolloProvider: createMockApollo([[deleteWorkItem, deleteWorkItemHandler]]),
|
|
provide: {
|
|
issuesListPath,
|
|
},
|
|
propsData: {
|
|
id: '1',
|
|
},
|
|
mocks: {
|
|
$toast: {
|
|
show: mockToastShow,
|
|
},
|
|
},
|
|
});
|
|
};
|
|
|
|
afterEach(() => {
|
|
wrapper.destroy();
|
|
});
|
|
|
|
it('renders WorkItemDetail', () => {
|
|
createComponent();
|
|
|
|
expect(findWorkItemDetail().props()).toEqual({
|
|
isModal: false,
|
|
workItemId: 'gid://gitlab/WorkItem/1',
|
|
workItemParentId: null,
|
|
iid: '1',
|
|
});
|
|
});
|
|
|
|
it('deletes work item when deleteWorkItem event emitted', async () => {
|
|
const deleteWorkItemHandler = jest.fn().mockResolvedValue(deleteWorkItemResponse);
|
|
|
|
createComponent({
|
|
deleteWorkItemHandler,
|
|
});
|
|
|
|
findWorkItemDetail().vm.$emit('deleteWorkItem', { workItemType: 'task', workItemId: '1' });
|
|
|
|
await waitForPromises();
|
|
|
|
expect(deleteWorkItemHandler).toHaveBeenCalledWith({
|
|
input: {
|
|
id: '1',
|
|
},
|
|
});
|
|
expect(mockToastShow).toHaveBeenCalled();
|
|
expect(visitUrl).toHaveBeenCalledWith(issuesListPath);
|
|
});
|
|
|
|
it('shows alert if delete fails', async () => {
|
|
const deleteWorkItemHandler = jest.fn().mockRejectedValue(deleteWorkItemFailureResponse);
|
|
|
|
createComponent({
|
|
deleteWorkItemHandler,
|
|
});
|
|
|
|
findWorkItemDetail().vm.$emit('deleteWorkItem', { workItemType: 'task', workItemId: '1' });
|
|
|
|
await waitForPromises();
|
|
|
|
expect(findAlert().exists()).toBe(true);
|
|
});
|
|
});
|