diff options
author | Winnie Hellmann <winnie@gitlab.com> | 2019-07-03 13:18:49 +0000 |
---|---|---|
committer | Paul Slaughter <pslaughter@gitlab.com> | 2019-07-03 13:18:49 +0000 |
commit | f5461d7ba01b8fe2d28c9bf4197ef3a11b3b6d47 (patch) | |
tree | 61a598463011a39f3fd602f250cb8d5da86163e2 /spec/frontend | |
parent | d427c05f586dc89163105f2b89c8f19b07745966 (diff) | |
download | gitlab-ce-f5461d7ba01b8fe2d28c9bf4197ef3a11b3b6d47.tar.gz |
Migrate markdown header_spec.js to Jest
Diffstat (limited to 'spec/frontend')
-rw-r--r-- | spec/frontend/vue_shared/components/markdown/header_spec.js | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/spec/frontend/vue_shared/components/markdown/header_spec.js b/spec/frontend/vue_shared/components/markdown/header_spec.js new file mode 100644 index 00000000000..aa0b544f948 --- /dev/null +++ b/spec/frontend/vue_shared/components/markdown/header_spec.js @@ -0,0 +1,107 @@ +import Vue from 'vue'; +import $ from 'jquery'; +import headerComponent from '~/vue_shared/components/markdown/header.vue'; + +describe('Markdown field header component', () => { + let vm; + + beforeEach(done => { + const Component = Vue.extend(headerComponent); + + vm = new Component({ + propsData: { + previewMarkdown: false, + }, + }).$mount(); + + Vue.nextTick(done); + }); + + it('renders markdown header buttons', () => { + const buttons = [ + 'Add bold text', + 'Add italic text', + 'Insert a quote', + 'Insert suggestion', + 'Insert code', + 'Add a link', + 'Add a bullet list', + 'Add a numbered list', + 'Add a task list', + 'Add a table', + 'Go full screen', + ]; + const elements = vm.$el.querySelectorAll('.toolbar-btn'); + + elements.forEach((buttonEl, index) => { + expect(buttonEl.getAttribute('data-original-title')).toBe(buttons[index]); + }); + }); + + it('renders `write` link as active when previewMarkdown is false', () => { + expect(vm.$el.querySelector('li:nth-child(1)').classList.contains('active')).toBeTruthy(); + }); + + it('renders `preview` link as active when previewMarkdown is true', done => { + vm.previewMarkdown = true; + + Vue.nextTick(() => { + expect(vm.$el.querySelector('li:nth-child(2)').classList.contains('active')).toBeTruthy(); + + done(); + }); + }); + + it('emits toggle markdown event when clicking preview', () => { + jest.spyOn(vm, '$emit').mockImplementation(); + + vm.$el.querySelector('.js-preview-link').click(); + + expect(vm.$emit).toHaveBeenCalledWith('preview-markdown'); + + vm.$el.querySelector('.js-write-link').click(); + + expect(vm.$emit).toHaveBeenCalledWith('write-markdown'); + }); + + it('does not emit toggle markdown event when triggered from another form', () => { + jest.spyOn(vm, '$emit').mockImplementation(); + + $(document).triggerHandler('markdown-preview:show', [ + $( + '<form><div class="js-vue-markdown-field"><textarea class="markdown-area"></textarea></div></form>', + ), + ]); + + expect(vm.$emit).not.toHaveBeenCalled(); + }); + + it('blurs preview link after click', () => { + const link = vm.$el.querySelector('li:nth-child(2) button'); + jest.spyOn(HTMLElement.prototype, 'blur').mockImplementation(); + + link.click(); + + expect(link.blur).toHaveBeenCalled(); + }); + + it('renders markdown table template', () => { + expect(vm.mdTable).toEqual( + '| header | header |\n| ------ | ------ |\n| cell | cell |\n| cell | cell |', + ); + }); + + it('renders suggestion template', () => { + vm.lineContent = 'Some content'; + + expect(vm.mdSuggestion).toEqual('```suggestion:-0+0\n{text}\n```'); + }); + + it('does not render suggestion button if `canSuggest` is set to false', () => { + vm.canSuggest = false; + + Vue.nextTick(() => { + expect(vm.$el.querySelector('.qa-suggestion-btn')).toBe(null); + }); + }); +}); |