From 6e4e1050d9dba2b7b2523fdd1768823ab85feef4 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Thu, 20 Aug 2020 18:42:06 +0000 Subject: Add latest changes from gitlab-org/gitlab@13-3-stable-ee --- .../batch_comments/components/draft_note_spec.js | 52 +++++++++++++++++++--- .../batch_comments/components/drafts_count_spec.js | 4 +- .../batch_comments/components/preview_item_spec.js | 2 +- .../components/publish_button_spec.js | 2 +- .../components/publish_dropdown_spec.js | 2 +- spec/frontend/batch_comments/mock_data.js | 3 +- .../stores/modules/batch_comments/actions_spec.js | 2 +- 7 files changed, 54 insertions(+), 13 deletions(-) (limited to 'spec/frontend/batch_comments') diff --git a/spec/frontend/batch_comments/components/draft_note_spec.js b/spec/frontend/batch_comments/components/draft_note_spec.js index eea7f25dbc1..99980c98f8b 100644 --- a/spec/frontend/batch_comments/components/draft_note_spec.js +++ b/spec/frontend/batch_comments/components/draft_note_spec.js @@ -1,4 +1,5 @@ import { shallowMount, createLocalVue } from '@vue/test-utils'; +import { getByRole } from '@testing-library/dom'; import DraftNote from '~/batch_comments/components/draft_note.vue'; import { createStore } from '~/batch_comments/stores'; import NoteableNote from '~/notes/components/noteable_note.vue'; @@ -8,21 +9,34 @@ import { createDraft } from '../mock_data'; const localVue = createLocalVue(); describe('Batch comments draft note component', () => { + let store; let wrapper; let draft; + const LINE_RANGE = {}; + const draftWithLineRange = { + position: { + line_range: LINE_RANGE, + }, + }; - beforeEach(() => { - const store = createStore(); - - draft = createDraft(); + const getList = () => getByRole(wrapper.element, 'list'); + const createComponent = (propsData = { draft }, features = {}) => { wrapper = shallowMount(localVue.extend(DraftNote), { store, - propsData: { draft }, + propsData, localVue, + provide: { + glFeatures: { multilineComments: true, ...features }, + }, }); jest.spyOn(wrapper.vm.$store, 'dispatch').mockImplementation(); + }; + + beforeEach(() => { + store = createStore(); + draft = createDraft(); }); afterEach(() => { @@ -30,6 +44,7 @@ describe('Batch comments draft note component', () => { }); it('renders template', () => { + createComponent(); expect(wrapper.find('.draft-pending-label').exists()).toBe(true); const note = wrapper.find(NoteableNote); @@ -40,6 +55,7 @@ describe('Batch comments draft note component', () => { describe('add comment now', () => { it('dispatches publishSingleDraft when clicking', () => { + createComponent(); const publishNowButton = wrapper.find({ ref: 'publishNowButton' }); publishNowButton.vm.$emit('click'); @@ -50,6 +66,7 @@ describe('Batch comments draft note component', () => { }); it('sets as loading when draft is publishing', done => { + createComponent(); wrapper.vm.$store.state.batchComments.currentlyPublishingDrafts.push(1); wrapper.vm.$nextTick(() => { @@ -64,6 +81,7 @@ describe('Batch comments draft note component', () => { describe('update', () => { it('dispatches updateDraft', done => { + createComponent(); const note = wrapper.find(NoteableNote); note.vm.$emit('handleEdit'); @@ -91,6 +109,7 @@ describe('Batch comments draft note component', () => { describe('deleteDraft', () => { it('dispatches deleteDraft', () => { + createComponent(); jest.spyOn(window, 'confirm').mockImplementation(() => true); const note = wrapper.find(NoteableNote); @@ -103,6 +122,7 @@ describe('Batch comments draft note component', () => { describe('quick actions', () => { it('renders referenced commands', done => { + createComponent(); wrapper.setProps({ draft: { ...draft, @@ -122,4 +142,26 @@ describe('Batch comments draft note component', () => { }); }); }); + + describe('multiline comments', () => { + describe.each` + desc | props | features | event | expectedCalls + ${'with `draft.position`'} | ${draftWithLineRange} | ${{}} | ${'mouseenter'} | ${[['setSelectedCommentPositionHover', LINE_RANGE]]} + ${'with `draft.position`'} | ${draftWithLineRange} | ${{}} | ${'mouseleave'} | ${[['setSelectedCommentPositionHover']]} + ${'with `draft.position`'} | ${draftWithLineRange} | ${{ multilineComments: false }} | ${'mouseenter'} | ${[]} + ${'with `draft.position`'} | ${draftWithLineRange} | ${{ multilineComments: false }} | ${'mouseleave'} | ${[]} + ${'without `draft.position`'} | ${{}} | ${{}} | ${'mouseenter'} | ${[]} + ${'without `draft.position`'} | ${{}} | ${{}} | ${'mouseleave'} | ${[]} + `('$desc and features $features', ({ props, event, features, expectedCalls }) => { + beforeEach(() => { + createComponent({ draft: { ...draft, ...props } }, features); + jest.spyOn(store, 'dispatch'); + }); + + it(`calls store ${expectedCalls.length} times on ${event}`, () => { + getList().dispatchEvent(new MouseEvent(event, { bubbles: true })); + expect(store.dispatch.mock.calls).toEqual(expectedCalls); + }); + }); + }); }); diff --git a/spec/frontend/batch_comments/components/drafts_count_spec.js b/spec/frontend/batch_comments/components/drafts_count_spec.js index 9d9fffce7e7..83d2f9eb639 100644 --- a/spec/frontend/batch_comments/components/drafts_count_spec.js +++ b/spec/frontend/batch_comments/components/drafts_count_spec.js @@ -1,6 +1,6 @@ import Vue from 'vue'; -import DraftsCount from '~/batch_comments/components/drafts_count.vue'; import { mountComponentWithStore } from 'helpers/vue_mount_component_helper'; +import DraftsCount from '~/batch_comments/components/drafts_count.vue'; import { createStore } from '~/batch_comments/stores'; describe('Batch comments drafts count component', () => { @@ -24,7 +24,7 @@ describe('Batch comments drafts count component', () => { }); it('renders count', () => { - expect(vm.$el.querySelector('.drafts-count-number').textContent).toBe('1'); + expect(vm.$el.textContent).toContain('1'); }); it('renders screen reader text', done => { diff --git a/spec/frontend/batch_comments/components/preview_item_spec.js b/spec/frontend/batch_comments/components/preview_item_spec.js index 7d951fd7799..2b63ece28ba 100644 --- a/spec/frontend/batch_comments/components/preview_item_spec.js +++ b/spec/frontend/batch_comments/components/preview_item_spec.js @@ -1,6 +1,6 @@ import Vue from 'vue'; -import PreviewItem from '~/batch_comments/components/preview_item.vue'; import { mountComponentWithStore } from 'helpers/vue_mount_component_helper'; +import PreviewItem from '~/batch_comments/components/preview_item.vue'; import { createStore } from '~/batch_comments/stores'; import diffsModule from '~/diffs/store/modules'; import notesModule from '~/notes/stores/modules'; diff --git a/spec/frontend/batch_comments/components/publish_button_spec.js b/spec/frontend/batch_comments/components/publish_button_spec.js index 97f3a1c8939..4362f62c7f8 100644 --- a/spec/frontend/batch_comments/components/publish_button_spec.js +++ b/spec/frontend/batch_comments/components/publish_button_spec.js @@ -1,6 +1,6 @@ import Vue from 'vue'; -import PublishButton from '~/batch_comments/components/publish_button.vue'; import { mountComponentWithStore } from 'helpers/vue_mount_component_helper'; +import PublishButton from '~/batch_comments/components/publish_button.vue'; import { createStore } from '~/batch_comments/stores'; describe('Batch comments publish button component', () => { diff --git a/spec/frontend/batch_comments/components/publish_dropdown_spec.js b/spec/frontend/batch_comments/components/publish_dropdown_spec.js index b50ae340691..fb3c532174d 100644 --- a/spec/frontend/batch_comments/components/publish_dropdown_spec.js +++ b/spec/frontend/batch_comments/components/publish_dropdown_spec.js @@ -1,6 +1,6 @@ import Vue from 'vue'; -import PreviewDropdown from '~/batch_comments/components/preview_dropdown.vue'; import { mountComponentWithStore } from 'helpers/vue_mount_component_helper'; +import PreviewDropdown from '~/batch_comments/components/preview_dropdown.vue'; import { createStore } from '~/mr_notes/stores'; import '~/behaviors/markdown/render_gfm'; import { createDraft } from '../mock_data'; diff --git a/spec/frontend/batch_comments/mock_data.js b/spec/frontend/batch_comments/mock_data.js index c50fea94fe3..5601e489066 100644 --- a/spec/frontend/batch_comments/mock_data.js +++ b/spec/frontend/batch_comments/mock_data.js @@ -1,5 +1,6 @@ import { TEST_HOST } from 'spec/test_constants'; +// eslint-disable-next-line import/prefer-default-export export const createDraft = () => ({ author: { id: 1, @@ -23,5 +24,3 @@ export const createDraft = () => ({ isDraft: true, position: null, }); - -export default () => {}; diff --git a/spec/frontend/batch_comments/stores/modules/batch_comments/actions_spec.js b/spec/frontend/batch_comments/stores/modules/batch_comments/actions_spec.js index 4bac6d4e3dc..a6942115649 100644 --- a/spec/frontend/batch_comments/stores/modules/batch_comments/actions_spec.js +++ b/spec/frontend/batch_comments/stores/modules/batch_comments/actions_spec.js @@ -1,8 +1,8 @@ import MockAdapter from 'axios-mock-adapter'; import testAction from 'helpers/vuex_action_helper'; +import { TEST_HOST } from 'jest/helpers/test_constants'; import * as actions from '~/batch_comments/stores/modules/batch_comments/actions'; import axios from '~/lib/utils/axios_utils'; -import { TEST_HOST } from 'jest/helpers/test_constants'; describe('Batch comments store actions', () => { let res = {}; -- cgit v1.2.1