diff options
author | Filipa Lacerda <filipa@gitlab.com> | 2019-07-03 22:39:10 +0100 |
---|---|---|
committer | Filipa Lacerda <filipa@gitlab.com> | 2019-07-03 22:39:10 +0100 |
commit | 50be7237f41b0ac44b9aaf8b73c57993548d4c35 (patch) | |
tree | ecfeeae58829dadbd90de4f834c730d1d8c55e74 /spec/frontend/vue_shared/components/markdown/header_spec.js | |
parent | 35331c435196ea1155eb15161f3f9a481a01501d (diff) | |
parent | 2ad75a4f96c4d377e18788966e7eefee4d78b6d2 (diff) | |
download | gitlab-ce-50be7237f41b0ac44b9aaf8b73c57993548d4c35.tar.gz |
Merge branch 'master' into update-todo-in-uiupdate-todo-in-ui
* master: (435 commits)
Change occurrence of Sidekiq::Testing.inline!
Fix order-dependent spec failure in appearance_spec.rb
Put a failed example from appearance_spec in quarantine
Cache PerformanceBar.allowed_user_ids list locally and in Redis
Add Grafana to Admin > Monitoring menu when enabled
Add changelog entry
Add salesforce logo
Move error_tracking_frontend specs to Jest
Only save Peek session in Redis when Peek is enabled
Migrate markdown header_spec.js to Jest
Fix golint command in Go guide doc to be recursive
Move images to their own dirs
Gitlab -> GitLab
Re-align CE and EE API docs
Rename Release groups in issue_workflow.md
Update api docs to finish aligning EE and CE docs
Update locale.pot
Update TODO: allow_collaboration column renaming
Show upcoming status for releases
Rebased and squashed commits
...
Diffstat (limited to 'spec/frontend/vue_shared/components/markdown/header_spec.js')
-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); + }); + }); +}); |