diff options
Diffstat (limited to 'spec/frontend/repository/components/breadcrumbs_spec.js')
-rw-r--r-- | spec/frontend/repository/components/breadcrumbs_spec.js | 84 |
1 files changed, 57 insertions, 27 deletions
diff --git a/spec/frontend/repository/components/breadcrumbs_spec.js b/spec/frontend/repository/components/breadcrumbs_spec.js index 2ac2069a177..93bfd3d9d32 100644 --- a/spec/frontend/repository/components/breadcrumbs_spec.js +++ b/spec/frontend/repository/components/breadcrumbs_spec.js @@ -1,24 +1,36 @@ import { GlDropdown } from '@gitlab/ui'; import { shallowMount, RouterLinkStub } from '@vue/test-utils'; import Breadcrumbs from '~/repository/components/breadcrumbs.vue'; - -let vm; - -function factory(currentPath, extraProps = {}) { - vm = shallowMount(Breadcrumbs, { - propsData: { - currentPath, - ...extraProps, - }, - stubs: { - RouterLink: RouterLinkStub, - }, - }); -} +import UploadBlobModal from '~/repository/components/upload_blob_modal.vue'; describe('Repository breadcrumbs component', () => { + let wrapper; + + const factory = (currentPath, extraProps = {}) => { + const $apollo = { + queries: { + userPermissions: { + loading: true, + }, + }, + }; + + wrapper = shallowMount(Breadcrumbs, { + propsData: { + currentPath, + ...extraProps, + }, + stubs: { + RouterLink: RouterLinkStub, + }, + mocks: { $apollo }, + }); + }; + + const findUploadBlobModal = () => wrapper.find(UploadBlobModal); + afterEach(() => { - vm.destroy(); + wrapper.destroy(); }); it.each` @@ -30,13 +42,13 @@ describe('Repository breadcrumbs component', () => { `('renders $linkCount links for path $path', ({ path, linkCount }) => { factory(path); - expect(vm.findAll(RouterLinkStub).length).toEqual(linkCount); + expect(wrapper.findAll(RouterLinkStub).length).toEqual(linkCount); }); it('escapes hash in directory path', () => { factory('app/assets/javascripts#'); - expect(vm.findAll(RouterLinkStub).at(3).props('to')).toEqual( + expect(wrapper.findAll(RouterLinkStub).at(3).props('to')).toEqual( '/-/tree/app/assets/javascripts%23', ); }); @@ -44,26 +56,44 @@ describe('Repository breadcrumbs component', () => { it('renders last link as active', () => { factory('app/assets'); - expect(vm.findAll(RouterLinkStub).at(2).attributes('aria-current')).toEqual('page'); + expect(wrapper.findAll(RouterLinkStub).at(2).attributes('aria-current')).toEqual('page'); }); - it('does not render add to tree dropdown when permissions are false', () => { + it('does not render add to tree dropdown when permissions are false', async () => { factory('/', { canCollaborate: false }); - vm.setData({ userPermissions: { forkProject: false, createMergeRequestIn: false } }); + wrapper.setData({ userPermissions: { forkProject: false, createMergeRequestIn: false } }); - return vm.vm.$nextTick(() => { - expect(vm.find(GlDropdown).exists()).toBe(false); - }); + await wrapper.vm.$nextTick(); + + expect(wrapper.find(GlDropdown).exists()).toBe(false); }); - it('renders add to tree dropdown when permissions are true', () => { + it('renders add to tree dropdown when permissions are true', async () => { factory('/', { canCollaborate: true }); - vm.setData({ userPermissions: { forkProject: true, createMergeRequestIn: true } }); + wrapper.setData({ userPermissions: { forkProject: true, createMergeRequestIn: true } }); + + await wrapper.vm.$nextTick(); + + expect(wrapper.find(GlDropdown).exists()).toBe(true); + }); + + describe('renders the upload blob modal', () => { + beforeEach(() => { + factory('/', { canEditTree: true }); + }); + + it('does not render the modal while loading', () => { + expect(findUploadBlobModal().exists()).toBe(false); + }); + + it('renders the modal once loaded', async () => { + wrapper.setData({ $apollo: { queries: { userPermissions: { loading: false } } } }); + + await wrapper.vm.$nextTick(); - return vm.vm.$nextTick(() => { - expect(vm.find(GlDropdown).exists()).toBe(true); + expect(findUploadBlobModal().exists()).toBe(true); }); }); }); |