diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-12-14 15:13:33 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-12-14 15:13:33 +0300 |
commit | 79a7da2537e94c34aba92ad4b9a5dc1da431b2c4 (patch) | |
tree | 83b6a53a15a9266ca2e2aca061dd3f33d5282b1f /spec/frontend/packages_and_registries/package_registry/components | |
parent | a58667ab4b4fc4b0d1e47e95d91c27ccadd0acd3 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/frontend/packages_and_registries/package_registry/components')
2 files changed, 0 insertions, 355 deletions
diff --git a/spec/frontend/packages_and_registries/package_registry/components/list/__snapshots__/app_spec.js.snap b/spec/frontend/packages_and_registries/package_registry/components/list/__snapshots__/app_spec.js.snap deleted file mode 100644 index f72698b4aac..00000000000 --- a/spec/frontend/packages_and_registries/package_registry/components/list/__snapshots__/app_spec.js.snap +++ /dev/null @@ -1,73 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`PackagesListApp renders 1`] = ` -<div> - <package-title-stub - count="2" - helpurl="packageHelpUrl" - /> - - <package-search-stub /> - - <div> - <section - class="row empty-state text-center" - > - <div - class="col-12" - > - <div - class="svg-250 svg-content" - > - <img - alt="" - class="gl-max-w-full" - role="img" - src="emptyListIllustration" - /> - </div> - </div> - - <div - class="col-12" - > - <div - class="text-content gl-mx-auto gl-my-0 gl-p-5" - > - <h1 - class="gl-font-size-h-display gl-line-height-36 h4" - > - - There are no packages yet - - </h1> - - <p - class="gl-mt-3" - > - Learn how to - <b-link-stub - class="gl-link" - event="click" - href="emptyListHelpUrl" - routertag="a" - target="_blank" - > - publish and share your packages - </b-link-stub> - with GitLab. - </p> - - <div - class="gl-display-flex gl-flex-wrap gl-justify-content-center" - > - <!----> - - <!----> - </div> - </div> - </div> - </section> - </div> -</div> -`; diff --git a/spec/frontend/packages_and_registries/package_registry/components/list/app_spec.js b/spec/frontend/packages_and_registries/package_registry/components/list/app_spec.js deleted file mode 100644 index ad848f367e0..00000000000 --- a/spec/frontend/packages_and_registries/package_registry/components/list/app_spec.js +++ /dev/null @@ -1,282 +0,0 @@ -import { GlEmptyState, GlSprintf, GlLink } from '@gitlab/ui'; -import { createLocalVue } from '@vue/test-utils'; - -import VueApollo from 'vue-apollo'; -import { nextTick } from 'vue'; -import { shallowMountExtended } from 'helpers/vue_test_utils_helper'; -import createMockApollo from 'helpers/mock_apollo_helper'; -import waitForPromises from 'helpers/wait_for_promises'; -import PackageListApp from '~/packages_and_registries/package_registry/components/list/app.vue'; -import PackageTitle from '~/packages_and_registries/package_registry/components/list/package_title.vue'; -import PackageSearch from '~/packages_and_registries/package_registry/components/list/package_search.vue'; -import OriginalPackageList from '~/packages_and_registries/package_registry/components/list/packages_list.vue'; -import DeletePackage from '~/packages_and_registries/package_registry/components/functional/delete_package.vue'; - -import { - PROJECT_RESOURCE_TYPE, - GROUP_RESOURCE_TYPE, - GRAPHQL_PAGE_SIZE, -} from '~/packages_and_registries/package_registry/constants'; - -import getPackagesQuery from '~/packages_and_registries/package_registry/graphql/queries/get_packages.query.graphql'; - -import { packagesListQuery, packageData, pagination } from '../../mock_data'; - -jest.mock('~/lib/utils/common_utils'); -jest.mock('~/flash'); - -const localVue = createLocalVue(); - -describe('PackagesListApp', () => { - let wrapper; - let apolloProvider; - - const defaultProvide = { - packageHelpUrl: 'packageHelpUrl', - emptyListIllustration: 'emptyListIllustration', - emptyListHelpUrl: 'emptyListHelpUrl', - isGroupPage: true, - fullPath: 'gitlab-org', - }; - - const PackageList = { - name: 'package-list', - template: '<div><slot name="empty-state"></slot></div>', - props: OriginalPackageList.props, - }; - const GlLoadingIcon = { name: 'gl-loading-icon', template: '<div>loading</div>' }; - - const searchPayload = { - sort: 'VERSION_DESC', - filters: { packageName: 'foo', packageType: 'CONAN' }, - }; - - const findPackageTitle = () => wrapper.findComponent(PackageTitle); - const findSearch = () => wrapper.findComponent(PackageSearch); - const findListComponent = () => wrapper.findComponent(PackageList); - const findEmptyState = () => wrapper.findComponent(GlEmptyState); - const findDeletePackage = () => wrapper.findComponent(DeletePackage); - - const mountComponent = ({ - resolver = jest.fn().mockResolvedValue(packagesListQuery()), - provide = defaultProvide, - } = {}) => { - localVue.use(VueApollo); - - const requestHandlers = [[getPackagesQuery, resolver]]; - apolloProvider = createMockApollo(requestHandlers); - - wrapper = shallowMountExtended(PackageListApp, { - localVue, - apolloProvider, - provide, - stubs: { - GlEmptyState, - GlLoadingIcon, - GlSprintf, - GlLink, - PackageList, - DeletePackage, - }, - }); - }; - - afterEach(() => { - wrapper.destroy(); - }); - - const waitForFirstRequest = () => { - // emit a search update so the query is executed - findSearch().vm.$emit('update', { sort: 'NAME_DESC', filters: [] }); - return waitForPromises(); - }; - - it('does not execute the query without sort being set', () => { - const resolver = jest.fn().mockResolvedValue(packagesListQuery()); - - mountComponent({ resolver }); - - expect(resolver).not.toHaveBeenCalled(); - }); - - it('renders', async () => { - mountComponent(); - - await waitForFirstRequest(); - - expect(wrapper.element).toMatchSnapshot(); - }); - - it('has a package title', async () => { - mountComponent(); - - await waitForFirstRequest(); - - expect(findPackageTitle().exists()).toBe(true); - expect(findPackageTitle().props('count')).toBe(2); - }); - - describe('search component', () => { - it('exists', () => { - mountComponent(); - - expect(findSearch().exists()).toBe(true); - }); - - it('on update triggers a new query with updated values', async () => { - const resolver = jest.fn().mockResolvedValue(packagesListQuery()); - mountComponent({ resolver }); - - findSearch().vm.$emit('update', searchPayload); - - await waitForPromises(); - - expect(resolver).toHaveBeenCalledWith( - expect.objectContaining({ - groupSort: searchPayload.sort, - ...searchPayload.filters, - }), - ); - }); - }); - - describe('list component', () => { - let resolver; - - beforeEach(() => { - resolver = jest.fn().mockResolvedValue(packagesListQuery()); - mountComponent({ resolver }); - - return waitForFirstRequest(); - }); - - it('exists and has the right props', () => { - expect(findListComponent().props()).toMatchObject({ - list: expect.arrayContaining([expect.objectContaining({ id: packageData().id })]), - isLoading: false, - pageInfo: expect.objectContaining({ endCursor: pagination().endCursor }), - }); - }); - - it('when list emits next-page fetches the next set of records', () => { - findListComponent().vm.$emit('next-page'); - - expect(resolver).toHaveBeenCalledWith( - expect.objectContaining({ after: pagination().endCursor, first: GRAPHQL_PAGE_SIZE }), - ); - }); - - it('when list emits prev-page fetches the prev set of records', () => { - findListComponent().vm.$emit('prev-page'); - - expect(resolver).toHaveBeenCalledWith( - expect.objectContaining({ before: pagination().startCursor, last: GRAPHQL_PAGE_SIZE }), - ); - }); - }); - - describe.each` - type | sortType - ${PROJECT_RESOURCE_TYPE} | ${'sort'} - ${GROUP_RESOURCE_TYPE} | ${'groupSort'} - `('$type query', ({ type, sortType }) => { - let provide; - let resolver; - - const isGroupPage = type === GROUP_RESOURCE_TYPE; - - beforeEach(() => { - provide = { ...defaultProvide, isGroupPage }; - resolver = jest.fn().mockResolvedValue(packagesListQuery({ type })); - mountComponent({ provide, resolver }); - return waitForFirstRequest(); - }); - - it('succeeds', () => { - expect(findPackageTitle().props('count')).toBe(2); - }); - - it('calls the resolver with the right parameters', () => { - expect(resolver).toHaveBeenCalledWith( - expect.objectContaining({ isGroupPage, [sortType]: 'NAME_DESC' }), - ); - }); - }); - - describe('empty state', () => { - beforeEach(() => { - const resolver = jest.fn().mockResolvedValue(packagesListQuery({ extend: { nodes: [] } })); - mountComponent({ resolver }); - - return waitForFirstRequest(); - }); - it('generate the correct empty list link', () => { - const link = findListComponent().findComponent(GlLink); - - expect(link.attributes('href')).toBe(defaultProvide.emptyListHelpUrl); - expect(link.text()).toBe('publish and share your packages'); - }); - - it('includes the right content on the default tab', () => { - expect(findEmptyState().text()).toContain(PackageListApp.i18n.emptyPageTitle); - }); - }); - - describe('filter without results', () => { - beforeEach(async () => { - mountComponent(); - - await waitForFirstRequest(); - - findSearch().vm.$emit('update', searchPayload); - - return nextTick(); - }); - - it('should show specific empty message', () => { - expect(findEmptyState().text()).toContain(PackageListApp.i18n.noResultsTitle); - expect(findEmptyState().text()).toContain(PackageListApp.i18n.widenFilters); - }); - }); - - describe('delete package', () => { - it('exists and has the correct props', async () => { - mountComponent(); - - await waitForFirstRequest(); - - expect(findDeletePackage().props()).toMatchObject({ - refetchQueries: [{ query: getPackagesQuery, variables: {} }], - showSuccessAlert: true, - }); - }); - - it('deletePackage is bound to package-list package:delete event', async () => { - mountComponent(); - - await waitForFirstRequest(); - - findListComponent().vm.$emit('package:delete', { id: 1 }); - - expect(findDeletePackage().emitted('start')).toEqual([[]]); - }); - - it('start and end event set loading correctly', async () => { - mountComponent(); - - await waitForFirstRequest(); - - findDeletePackage().vm.$emit('start'); - - await nextTick(); - - expect(findListComponent().props('isLoading')).toBe(true); - - findDeletePackage().vm.$emit('end'); - - await nextTick(); - - expect(findListComponent().props('isLoading')).toBe(false); - }); - }); -}); |