diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-07-25 21:10:00 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-07-25 21:10:00 +0300 |
commit | 0599ea8fb389d70cab67a78e80d61eadc6aeaaff (patch) | |
tree | ec1a88b84086f74d20b5a7c018ef1c53f11a592d /spec/frontend | |
parent | d5fa3bac88ff4b8c5870d6d7988fc7e37832c183 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/frontend')
-rw-r--r-- | spec/frontend/gfm_auto_complete/mock_data.js | 34 | ||||
-rw-r--r-- | spec/frontend/gfm_auto_complete_spec.js | 48 | ||||
-rw-r--r-- | spec/frontend/notes/components/note_form_spec.js | 16 |
3 files changed, 96 insertions, 2 deletions
diff --git a/spec/frontend/gfm_auto_complete/mock_data.js b/spec/frontend/gfm_auto_complete/mock_data.js new file mode 100644 index 00000000000..86795ffd0a5 --- /dev/null +++ b/spec/frontend/gfm_auto_complete/mock_data.js @@ -0,0 +1,34 @@ +export const eventlistenersMockDefaultMap = [ + { + key: 'shown', + namespace: 'atwho', + }, + { + key: 'shown-users', + namespace: 'atwho', + }, + { + key: 'shown-issues', + namespace: 'atwho', + }, + { + key: 'shown-milestones', + namespace: 'atwho', + }, + { + key: 'shown-mergerequests', + namespace: 'atwho', + }, + { + key: 'shown-labels', + namespace: 'atwho', + }, + { + key: 'shown-snippets', + namespace: 'atwho', + }, + { + key: 'shown-contacts', + namespace: 'atwho', + }, +]; diff --git a/spec/frontend/gfm_auto_complete_spec.js b/spec/frontend/gfm_auto_complete_spec.js index 072cf34d0ef..c3dfc4570f9 100644 --- a/spec/frontend/gfm_auto_complete_spec.js +++ b/spec/frontend/gfm_auto_complete_spec.js @@ -10,6 +10,7 @@ import { TEST_HOST } from 'helpers/test_constants'; import waitForPromises from 'helpers/wait_for_promises'; import AjaxCache from '~/lib/utils/ajax_cache'; import axios from '~/lib/utils/axios_utils'; +import { eventlistenersMockDefaultMap } from 'ee_else_ce_jest/gfm_auto_complete/mock_data'; describe('GfmAutoComplete', () => { const fetchDataMock = { fetchData: jest.fn() }; @@ -457,12 +458,12 @@ describe('GfmAutoComplete', () => { it('should be false with actual array data', () => { expect( - GfmAutoComplete.isLoading([{ title: 'Foo' }, { title: 'Bar' }, { title: 'Qux' }]), + GfmAutoComplete.isLoading([{ title: 'events' }, { title: 'Bar' }, { title: 'Qux' }]), ).toBe(false); }); it('should be false with actual data item', () => { - expect(GfmAutoComplete.isLoading({ title: 'Foo' })).toBe(false); + expect(GfmAutoComplete.isLoading({ title: 'events' })).toBe(false); }); }); @@ -884,4 +885,47 @@ describe('GfmAutoComplete', () => { ).toBe(`<li><small>${escapedPayload} ${escapedPayload}</small> ${escapedPayload}</li>`); }); }); + + describe('autocomplete show eventlisteners', () => { + let $textarea; + + beforeEach(() => { + setHTMLFixture('<textarea></textarea>'); + $textarea = $('textarea'); + }); + + it('sets correct eventlisteners when autocomplete features are enabled', () => { + const autocomplete = new GfmAutoComplete({}); + autocomplete.setup($textarea); + autocomplete.setupAtWho($textarea); + /* eslint-disable-next-line no-underscore-dangle */ + const events = $._data($textarea[0], 'events'); + expect( + Object.keys(events) + .filter((x) => { + return x.startsWith('shown'); + }) + .map((e) => { + return { key: e, namespace: events[e][0].namespace }; + }), + ).toEqual(expect.arrayContaining(eventlistenersMockDefaultMap)); + }); + + it('sets no eventlisteners when features are disabled', () => { + const autocomplete = new GfmAutoComplete({}); + autocomplete.setup($textarea, {}); + autocomplete.setupAtWho($textarea); + /* eslint-disable-next-line no-underscore-dangle */ + const events = $._data($textarea[0], 'events'); + expect( + Object.keys(events) + .filter((x) => { + return x.startsWith('shown'); + }) + .map((e) => { + return { key: e, namespace: events[e][0].namespace }; + }), + ).toStrictEqual([]); + }); + }); }); diff --git a/spec/frontend/notes/components/note_form_spec.js b/spec/frontend/notes/components/note_form_spec.js index 252c24d1117..563fd570d52 100644 --- a/spec/frontend/notes/components/note_form_spec.js +++ b/spec/frontend/notes/components/note_form_spec.js @@ -6,6 +6,7 @@ import { getDraft, updateDraft } from '~/lib/utils/autosave'; import NoteForm from '~/notes/components/note_form.vue'; import createStore from '~/notes/stores'; import MarkdownField from '~/vue_shared/components/markdown/field.vue'; +import { AT_WHO_ACTIVE_CLASS } from '~/gfm_auto_complete'; import { noteableDataMock, notesDataMock, discussionMock, note } from '../mock_data'; jest.mock('~/lib/utils/autosave'); @@ -201,6 +202,21 @@ describe('issue_note_form component', () => { expect(wrapper.emitted().cancelForm).toHaveLength(1); }); + it('will not cancel form if there is an active at-who-active class', async () => { + wrapper.setProps({ + ...props, + }); + await nextTick(); + + const textareaEl = wrapper.vm.$refs.textarea; + const cancelButton = findCancelButton(); + textareaEl.classList.add(AT_WHO_ACTIVE_CLASS); + cancelButton.vm.$emit('click'); + await nextTick(); + + expect(wrapper.emitted().cancelForm).toBeUndefined(); + }); + it('should be possible to update the note', async () => { wrapper.setProps({ ...props, |