summaryrefslogtreecommitdiff
path: root/spec/frontend/work_items/components/work_item_comment_form_spec.js
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/work_items/components/work_item_comment_form_spec.js')
-rw-r--r--spec/frontend/work_items/components/work_item_comment_form_spec.js205
1 files changed, 0 insertions, 205 deletions
diff --git a/spec/frontend/work_items/components/work_item_comment_form_spec.js b/spec/frontend/work_items/components/work_item_comment_form_spec.js
deleted file mode 100644
index 07c00119398..00000000000
--- a/spec/frontend/work_items/components/work_item_comment_form_spec.js
+++ /dev/null
@@ -1,205 +0,0 @@
-import { GlButton } from '@gitlab/ui';
-import { shallowMount } from '@vue/test-utils';
-import Vue from 'vue';
-import VueApollo from 'vue-apollo';
-import createMockApollo from 'helpers/mock_apollo_helper';
-import { mockTracking } from 'helpers/tracking_helper';
-import waitForPromises from 'helpers/wait_for_promises';
-import { updateDraft } from '~/lib/utils/autosave';
-import MarkdownField from '~/vue_shared/components/markdown/field.vue';
-import MarkdownEditor from '~/vue_shared/components/markdown/markdown_editor.vue';
-import WorkItemCommentForm from '~/work_items/components/work_item_comment_form.vue';
-import WorkItemCommentLocked from '~/work_items/components/work_item_comment_locked.vue';
-import createNoteMutation from '~/work_items/graphql/create_work_item_note.mutation.graphql';
-import { TRACKING_CATEGORY_SHOW } from '~/work_items/constants';
-import workItemQuery from '~/work_items/graphql/work_item.query.graphql';
-import workItemByIidQuery from '~/work_items/graphql/work_item_by_iid.query.graphql';
-import {
- workItemResponseFactory,
- workItemQueryResponse,
- projectWorkItemResponse,
- createWorkItemNoteResponse,
-} from '../mock_data';
-
-jest.mock('~/lib/utils/confirm_via_gl_modal/confirm_via_gl_modal');
-jest.mock('~/lib/utils/autosave');
-
-const workItemId = workItemQueryResponse.data.workItem.id;
-
-describe('WorkItemCommentForm', () => {
- let wrapper;
-
- Vue.use(VueApollo);
-
- const mutationSuccessHandler = jest.fn().mockResolvedValue(createWorkItemNoteResponse);
- const workItemByIidResponseHandler = jest.fn().mockResolvedValue(projectWorkItemResponse);
- let workItemResponseHandler;
-
- const findMarkdownEditor = () => wrapper.findComponent(MarkdownEditor);
-
- const setText = (newText) => {
- return findMarkdownEditor().vm.$emit('input', newText);
- };
-
- const clickSave = () =>
- wrapper
- .findAllComponents(GlButton)
- .filter((button) => button.text().startsWith('Comment'))
- .at(0)
- .vm.$emit('click', {});
-
- const createComponent = async ({
- mutationHandler = mutationSuccessHandler,
- canUpdate = true,
- workItemResponse = workItemResponseFactory({ canUpdate }),
- queryVariables = { id: workItemId },
- fetchByIid = false,
- signedIn = true,
- isEditing = true,
- } = {}) => {
- workItemResponseHandler = jest.fn().mockResolvedValue(workItemResponse);
-
- if (signedIn) {
- window.gon.current_user_id = '1';
- window.gon.current_user_avatar_url = 'avatar.png';
- }
-
- const { id } = workItemQueryResponse.data.workItem;
- wrapper = shallowMount(WorkItemCommentForm, {
- apolloProvider: createMockApollo([
- [workItemQuery, workItemResponseHandler],
- [createNoteMutation, mutationHandler],
- [workItemByIidQuery, workItemByIidResponseHandler],
- ]),
- propsData: {
- workItemId: id,
- fullPath: 'test-project-path',
- queryVariables,
- fetchByIid,
- },
- stubs: {
- MarkdownField,
- WorkItemCommentLocked,
- },
- });
-
- await waitForPromises();
-
- if (isEditing) {
- wrapper.findComponent(GlButton).vm.$emit('click');
- }
- };
-
- describe('adding a comment', () => {
- it('calls update widgets mutation', async () => {
- const noteText = 'updated desc';
-
- await createComponent({
- isEditing: true,
- signedIn: true,
- });
-
- setText(noteText);
-
- clickSave();
-
- await waitForPromises();
-
- expect(mutationSuccessHandler).toHaveBeenCalledWith({
- input: {
- noteableId: workItemId,
- body: noteText,
- },
- });
- });
-
- it('tracks adding comment', async () => {
- await createComponent();
- const trackingSpy = mockTracking(undefined, wrapper.element, jest.spyOn);
-
- setText('test');
-
- clickSave();
-
- await waitForPromises();
-
- expect(trackingSpy).toHaveBeenCalledWith(TRACKING_CATEGORY_SHOW, 'add_work_item_comment', {
- category: TRACKING_CATEGORY_SHOW,
- label: 'item_comment',
- property: 'type_Task',
- });
- });
-
- it('emits error when mutation returns error', async () => {
- const error = 'eror';
-
- await createComponent({
- isEditing: true,
- mutationHandler: jest.fn().mockResolvedValue({
- data: {
- createNote: {
- note: null,
- errors: [error],
- },
- },
- }),
- });
-
- setText('updated desc');
-
- clickSave();
-
- await waitForPromises();
-
- expect(wrapper.emitted('error')).toEqual([[error]]);
- });
-
- it('emits error when mutation fails', async () => {
- const error = 'eror';
-
- await createComponent({
- isEditing: true,
- mutationHandler: jest.fn().mockRejectedValue(new Error(error)),
- });
-
- setText('updated desc');
-
- clickSave();
-
- await waitForPromises();
-
- expect(wrapper.emitted('error')).toEqual([[error]]);
- });
-
- it('autosaves', async () => {
- await createComponent({
- isEditing: true,
- });
-
- setText('updated');
-
- expect(updateDraft).toHaveBeenCalled();
- });
- });
-
- it('calls the global ID work item query when `fetchByIid` prop is false', async () => {
- createComponent({ fetchByIid: false });
- await waitForPromises();
-
- expect(workItemResponseHandler).toHaveBeenCalled();
- expect(workItemByIidResponseHandler).not.toHaveBeenCalled();
- });
-
- it('calls the IID work item query when when `fetchByIid` prop is true', async () => {
- await createComponent({ fetchByIid: true, isEditing: false });
-
- expect(workItemResponseHandler).not.toHaveBeenCalled();
- expect(workItemByIidResponseHandler).toHaveBeenCalled();
- });
-
- it('skips calling the handlers when missing the needed queryVariables', async () => {
- await createComponent({ queryVariables: {}, fetchByIid: false, isEditing: false });
-
- expect(workItemResponseHandler).not.toHaveBeenCalled();
- });
-});