diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-02-11 12:08:52 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-02-11 12:08:52 +0000 |
commit | 05b5c609cb8c260b10c2eb1b92b711dc82d32c3f (patch) | |
tree | 05253c66806b17c5b1f9f13addab59524d536fc4 /spec/frontend/blob/components/blob_header_spec.js | |
parent | 1078b7bf25c2cb6e03c57da9ae25b0512858556f (diff) | |
download | gitlab-ce-05b5c609cb8c260b10c2eb1b92b711dc82d32c3f.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/frontend/blob/components/blob_header_spec.js')
-rw-r--r-- | spec/frontend/blob/components/blob_header_spec.js | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/spec/frontend/blob/components/blob_header_spec.js b/spec/frontend/blob/components/blob_header_spec.js new file mode 100644 index 00000000000..7d1443fb069 --- /dev/null +++ b/spec/frontend/blob/components/blob_header_spec.js @@ -0,0 +1,133 @@ +import { shallowMount, mount } from '@vue/test-utils'; +import BlobHeader from '~/blob/components/blob_header.vue'; +import ViewerSwitcher from '~/blob/components/blob_header_viewer_switcher.vue'; +import DefaultActions from '~/blob/components/blob_header_default_actions.vue'; +import BlobFilepath from '~/blob/components/blob_header_filepath.vue'; +import eventHub from '~/blob/event_hub'; + +import { Blob } from './mock_data'; + +describe('Blob Header Default Actions', () => { + let wrapper; + + function createComponent(blobProps = {}, options = {}, propsData = {}, shouldMount = false) { + const method = shouldMount ? mount : shallowMount; + wrapper = method.call(this, BlobHeader, { + propsData: { + blob: Object.assign({}, Blob, blobProps), + ...propsData, + }, + ...options, + }); + } + + beforeEach(() => { + createComponent(); + }); + + afterEach(() => { + wrapper.destroy(); + }); + + describe('rendering', () => { + const slots = { + prepend: 'Foo Prepend', + actions: 'Actions Bar', + }; + + it('matches the snapshot', () => { + createComponent(); + expect(wrapper.element).toMatchSnapshot(); + }); + + it('renders all components', () => { + createComponent(); + expect(wrapper.find(ViewerSwitcher).exists()).toBe(true); + expect(wrapper.find(DefaultActions).exists()).toBe(true); + expect(wrapper.find(BlobFilepath).exists()).toBe(true); + }); + + it('does not render viewer switcher if the blob has only the simple viewer', () => { + createComponent({ + richViewer: null, + }); + expect(wrapper.find(ViewerSwitcher).exists()).toBe(false); + }); + + it('does not render viewer switcher if a corresponding prop is passed', () => { + createComponent( + {}, + {}, + { + hideViewerSwitcher: true, + }, + ); + expect(wrapper.find(ViewerSwitcher).exists()).toBe(false); + }); + + it('does not render default actions is corresponding prop is passed', () => { + createComponent( + {}, + {}, + { + hideDefaultActions: true, + }, + ); + expect(wrapper.find(DefaultActions).exists()).toBe(false); + }); + + Object.keys(slots).forEach(slot => { + it('renders the slots', () => { + const slotContent = slots[slot]; + createComponent( + {}, + { + scopedSlots: { + [slot]: `<span>${slotContent}</span>`, + }, + }, + {}, + true, + ); + expect(wrapper.text()).toContain(slotContent); + }); + }); + }); + + describe('functionality', () => { + const newViewer = 'Foo Bar'; + + it('listens to "switch-view" event when viewer switcher is shown and updates activeViewer', () => { + expect(wrapper.vm.showViewerSwitcher).toBe(true); + eventHub.$emit('switch-viewer', newViewer); + + return wrapper.vm.$nextTick().then(() => { + expect(wrapper.vm.activeViewer).toBe(newViewer); + }); + }); + + it('does not update active viewer if the switcher is not shown', () => { + const activeViewer = 'Alpha Beta'; + createComponent( + {}, + { + data() { + return { + activeViewer, + }; + }, + }, + { + hideViewerSwitcher: true, + }, + ); + + expect(wrapper.vm.showViewerSwitcher).toBe(false); + eventHub.$emit('switch-viewer', newViewer); + + return wrapper.vm.$nextTick().then(() => { + expect(wrapper.vm.activeViewer).toBe(activeViewer); + }); + }); + }); +}); |