diff options
Diffstat (limited to 'spec/frontend/packages_and_registries')
16 files changed, 88 insertions, 91 deletions
diff --git a/spec/frontend/packages_and_registries/container_registry/explorer/components/details_page/delete_alert_spec.js b/spec/frontend/packages_and_registries/container_registry/explorer/components/details_page/delete_alert_spec.js index 4a026f35822..d45b993b5a2 100644 --- a/spec/frontend/packages_and_registries/container_registry/explorer/components/details_page/delete_alert_spec.js +++ b/spec/frontend/packages_and_registries/container_registry/explorer/components/details_page/delete_alert_spec.js @@ -6,7 +6,6 @@ import { DELETE_TAG_ERROR_MESSAGE, DELETE_TAGS_SUCCESS_MESSAGE, DELETE_TAGS_ERROR_MESSAGE, - DETAILS_IMPORTING_ERROR_MESSAGE, ADMIN_GARBAGE_COLLECTION_TIP, } from '~/packages_and_registries/container_registry/explorer/constants'; @@ -77,7 +76,6 @@ describe('Delete alert', () => { }); }); }); - describe('error states', () => { describe.each` deleteAlertType | message @@ -107,25 +105,6 @@ describe('Delete alert', () => { }); }); - describe('importing repository error state', () => { - beforeEach(() => { - mountComponent({ - deleteAlertType: 'danger_importing', - containerRegistryImportingHelpPagePath: 'https://foobar', - }); - }); - - it('alert exist and text is appropriate', () => { - expect(findAlert().text()).toMatchInterpolatedText(DETAILS_IMPORTING_ERROR_MESSAGE); - }); - - it('alert body contains link', () => { - const alertLink = findLink(); - expect(alertLink.exists()).toBe(true); - expect(alertLink.attributes('href')).toBe('https://foobar'); - }); - }); - describe('dismissing alert', () => { it('GlAlert dismiss event triggers a change event', () => { mountComponent({ deleteAlertType: 'success_tags' }); diff --git a/spec/frontend/packages_and_registries/container_registry/explorer/components/details_page/tags_list_spec.js b/spec/frontend/packages_and_registries/container_registry/explorer/components/details_page/tags_list_spec.js index b163557618e..1017ff06a25 100644 --- a/spec/frontend/packages_and_registries/container_registry/explorer/components/details_page/tags_list_spec.js +++ b/spec/frontend/packages_and_registries/container_registry/explorer/components/details_page/tags_list_spec.js @@ -18,7 +18,7 @@ import { NO_TAGS_MATCHING_FILTERS_TITLE, NO_TAGS_MATCHING_FILTERS_DESCRIPTION, } from '~/packages_and_registries/container_registry/explorer/constants/index'; -import { FILTERED_SEARCH_TERM } from '~/packages_and_registries/shared/constants'; +import { FILTERED_SEARCH_TERM } from '~/vue_shared/components/filtered_search_bar/constants'; import { tagsMock, imageTagsMock, tagsPageInfo } from '../../mock_data'; describe('Tags List', () => { diff --git a/spec/frontend/packages_and_registries/container_registry/explorer/mock_data.js b/spec/frontend/packages_and_registries/container_registry/explorer/mock_data.js index b11048cd7a2..e5b99f15e8c 100644 --- a/spec/frontend/packages_and_registries/container_registry/explorer/mock_data.js +++ b/spec/frontend/packages_and_registries/container_registry/explorer/mock_data.js @@ -249,15 +249,6 @@ export const graphQLDeleteImageRepositoryTagsMock = { }, }; -export const graphQLDeleteImageRepositoryTagImportingErrorMock = { - data: { - destroyContainerRepositoryTags: { - errors: ['repository importing'], - __typename: 'DestroyContainerRepositoryTagsPayload', - }, - }, -}; - export const dockerCommands = { dockerBuildCommand: 'foofoo', dockerPushCommand: 'barbar', diff --git a/spec/frontend/packages_and_registries/container_registry/explorer/pages/details_spec.js b/spec/frontend/packages_and_registries/container_registry/explorer/pages/details_spec.js index 310398b01cf..26f0e506829 100644 --- a/spec/frontend/packages_and_registries/container_registry/explorer/pages/details_spec.js +++ b/spec/frontend/packages_and_registries/container_registry/explorer/pages/details_spec.js @@ -18,7 +18,6 @@ import { UNFINISHED_STATUS, DELETE_SCHEDULED, ALERT_DANGER_IMAGE, - ALERT_DANGER_IMPORTING, MISSING_OR_DELETED_IMAGE_BREADCRUMB, MISSING_OR_DELETED_IMAGE_TITLE, MISSING_OR_DELETED_IMAGE_MESSAGE, @@ -34,7 +33,6 @@ import Tracking from '~/tracking'; import { graphQLImageDetailsMock, graphQLDeleteImageRepositoryTagsMock, - graphQLDeleteImageRepositoryTagImportingErrorMock, graphQLProjectImageRepositoriesDetailsMock, containerRepositoryMock, graphQLEmptyImageDetailsMock, @@ -341,7 +339,6 @@ describe('Details Page', () => { const config = { isAdmin: true, garbageCollectionHelpPagePath: 'baz', - containerRegistryImportingHelpPagePath: 'https://foobar', }; const deleteAlertType = 'success_tag'; @@ -366,38 +363,6 @@ describe('Details Page', () => { expect(findDeleteAlert().props()).toEqual({ ...config, deleteAlertType }); }); - - describe('importing repository error', () => { - let mutationResolver; - let tagsResolver; - let detailsResolver; - - beforeEach(async () => { - mutationResolver = jest - .fn() - .mockResolvedValue(graphQLDeleteImageRepositoryTagImportingErrorMock); - tagsResolver = jest.fn().mockResolvedValue(graphQLImageDetailsMock(imageTagsMock())); - detailsResolver = jest.fn().mockResolvedValue(graphQLProjectImageRepositoriesDetailsMock); - - mountComponent({ mutationResolver, tagsResolver, detailsResolver }); - await waitForApolloRequestRender(); - }); - - it('displays the proper alert', async () => { - findTagsList().vm.$emit('delete', [cleanTags[0]]); - await nextTick(); - - findDeleteModal().vm.$emit('confirmDelete'); - await waitForPromises(); - - expect(tagsResolver).toHaveBeenCalled(); - expect(detailsResolver).toHaveBeenCalled(); - - const deleteAlert = findDeleteAlert(); - expect(deleteAlert.exists()).toBe(true); - expect(deleteAlert.props('deleteAlertType')).toBe(ALERT_DANGER_IMPORTING); - }); - }); }); describe('Partial Cleanup Alert', () => { diff --git a/spec/frontend/packages_and_registries/container_registry/explorer/pages/list_spec.js b/spec/frontend/packages_and_registries/container_registry/explorer/pages/list_spec.js index 79403d29d18..1e514d85e82 100644 --- a/spec/frontend/packages_and_registries/container_registry/explorer/pages/list_spec.js +++ b/spec/frontend/packages_and_registries/container_registry/explorer/pages/list_spec.js @@ -6,7 +6,6 @@ import VueApollo from 'vue-apollo'; import createMockApollo from 'helpers/mock_apollo_helper'; import waitForPromises from 'helpers/wait_for_promises'; import getContainerRepositoriesQuery from 'shared_queries/container_registry/get_container_repositories.query.graphql'; -import { FILTERED_SEARCH_TERM } from '~/packages_and_registries/shared/constants'; import DeleteImage from '~/packages_and_registries/container_registry/explorer/components/delete_image.vue'; import CliCommands from '~/packages_and_registries/shared/components/cli_commands.vue'; import GroupEmptyState from '~/packages_and_registries/container_registry/explorer/components/list_page/group_empty_state.vue'; @@ -23,6 +22,7 @@ import getContainerRepositoriesDetails from '~/packages_and_registries/container import component from '~/packages_and_registries/container_registry/explorer/pages/list.vue'; import Tracking from '~/tracking'; import PersistedSearch from '~/packages_and_registries/shared/components/persisted_search.vue'; +import { FILTERED_SEARCH_TERM } from '~/vue_shared/components/filtered_search_bar/constants'; import TitleArea from '~/vue_shared/components/registry/title_area.vue'; import { $toast } from 'jest/packages_and_registries/shared/mocks'; diff --git a/spec/frontend/packages_and_registries/dependency_proxy/app_spec.js b/spec/frontend/packages_and_registries/dependency_proxy/app_spec.js index fb50d623543..329cc15df97 100644 --- a/spec/frontend/packages_and_registries/dependency_proxy/app_spec.js +++ b/spec/frontend/packages_and_registries/dependency_proxy/app_spec.js @@ -14,7 +14,6 @@ import VueApollo from 'vue-apollo'; import MockAdapter from 'axios-mock-adapter'; import createMockApollo from 'helpers/mock_apollo_helper'; import { shallowMountExtended } from 'helpers/vue_test_utils_helper'; -import { stripTypenames } from 'helpers/graphql_helpers'; import waitForPromises from 'helpers/wait_for_promises'; import { GRAPHQL_PAGE_SIZE } from '~/packages_and_registries/dependency_proxy/constants'; import axios from '~/lib/utils/axios_utils'; @@ -190,7 +189,7 @@ describe('DependencyProxyApp', () => { it('shows list', () => { expect(findManifestList().props()).toMatchObject({ manifests: proxyManifests(), - pagination: stripTypenames(pagination()), + pagination: pagination(), }); }); diff --git a/spec/frontend/packages_and_registries/dependency_proxy/components/manifest_list_spec.js b/spec/frontend/packages_and_registries/dependency_proxy/components/manifest_list_spec.js index 9e4c747a1bd..2f415bfd6f9 100644 --- a/spec/frontend/packages_and_registries/dependency_proxy/components/manifest_list_spec.js +++ b/spec/frontend/packages_and_registries/dependency_proxy/components/manifest_list_spec.js @@ -1,5 +1,4 @@ import { GlKeysetPagination } from '@gitlab/ui'; -import { stripTypenames } from 'helpers/graphql_helpers'; import { shallowMountExtended } from 'helpers/vue_test_utils_helper'; import ManifestRow from '~/packages_and_registries/dependency_proxy/components/manifest_row.vue'; @@ -14,7 +13,7 @@ describe('Manifests List', () => { const defaultProps = { manifests: proxyManifests(), - pagination: stripTypenames(pagination()), + pagination: pagination(), }; const createComponent = (propsData = defaultProps) => { @@ -60,9 +59,8 @@ describe('Manifests List', () => { it('has the correct props', () => { createComponent(); - expect(findPagination().props()).toMatchObject({ - ...defaultProps.pagination, - }); + const { __typename, ...paginationProps } = defaultProps.pagination; + expect(findPagination().props()).toMatchObject(paginationProps); }); it('emits the next-page event', () => { diff --git a/spec/frontend/packages_and_registries/harbor_registry/pages/details_spec.js b/spec/frontend/packages_and_registries/harbor_registry/pages/details_spec.js index 8fd50bea280..69765d31674 100644 --- a/spec/frontend/packages_and_registries/harbor_registry/pages/details_spec.js +++ b/spec/frontend/packages_and_registries/harbor_registry/pages/details_spec.js @@ -8,7 +8,7 @@ import ArtifactsList from '~/packages_and_registries/harbor_registry/components/ import waitForPromises from 'helpers/wait_for_promises'; import DetailsHeader from '~/packages_and_registries/harbor_registry/components/details/details_header.vue'; import PersistedSearch from '~/packages_and_registries/shared/components/persisted_search.vue'; -import { OPERATOR_IS_ONLY } from '~/vue_shared/components/filtered_search_bar/constants'; +import { OPERATORS_IS } from '~/vue_shared/components/filtered_search_bar/constants'; import { NAME_SORT_FIELD, TOKEN_TYPE_TAG_NAME, @@ -137,7 +137,7 @@ describe('Harbor Details Page', () => { title: s__('HarborRegistry|Tag'), unique: true, token: GlFilteredSearchToken, - operators: OPERATOR_IS_ONLY, + operators: OPERATORS_IS, }, ], }); diff --git a/spec/frontend/packages_and_registries/infrastructure_registry/components/list/components/packages_list_app_spec.js b/spec/frontend/packages_and_registries/infrastructure_registry/components/list/components/packages_list_app_spec.js index dff95364d7d..d237023d0cd 100644 --- a/spec/frontend/packages_and_registries/infrastructure_registry/components/list/components/packages_list_app_spec.js +++ b/spec/frontend/packages_and_registries/infrastructure_registry/components/list/components/packages_list_app_spec.js @@ -7,13 +7,11 @@ import { createAlert, VARIANT_INFO } from '~/flash'; import * as commonUtils from '~/lib/utils/common_utils'; import PackageListApp from '~/packages_and_registries/infrastructure_registry/list/components/packages_list_app.vue'; import { DELETE_PACKAGE_SUCCESS_MESSAGE } from '~/packages_and_registries/infrastructure_registry/list/constants'; -import { - SHOW_DELETE_SUCCESS_ALERT, - FILTERED_SEARCH_TERM, -} from '~/packages_and_registries/shared/constants'; +import { SHOW_DELETE_SUCCESS_ALERT } from '~/packages_and_registries/shared/constants'; import * as packageUtils from '~/packages_and_registries/shared/utils'; import InfrastructureSearch from '~/packages_and_registries/infrastructure_registry/list/components/infrastructure_search.vue'; +import { FILTERED_SEARCH_TERM } from '~/vue_shared/components/filtered_search_bar/constants'; jest.mock('~/lib/utils/common_utils'); jest.mock('~/flash'); diff --git a/spec/frontend/packages_and_registries/package_registry/components/details/__snapshots__/pypi_installation_spec.js.snap b/spec/frontend/packages_and_registries/package_registry/components/details/__snapshots__/pypi_installation_spec.js.snap index 92c2cd90568..c4020eeb75f 100644 --- a/spec/frontend/packages_and_registries/package_registry/components/details/__snapshots__/pypi_installation_spec.js.snap +++ b/spec/frontend/packages_and_registries/package_registry/components/details/__snapshots__/pypi_installation_spec.js.snap @@ -13,7 +13,7 @@ exports[`PypiInstallation renders all the messages 1`] = ` <div> <div - class="dropdown b-dropdown gl-new-dropdown btn-group" + class="dropdown b-dropdown gl-dropdown btn-group" id="__BVID__27" lazy="" > @@ -30,7 +30,7 @@ exports[`PypiInstallation renders all the messages 1`] = ` <!----> <span - class="gl-new-dropdown-button-text" + class="gl-dropdown-button-text" > Show PyPi commands </span> diff --git a/spec/frontend/packages_and_registries/package_registry/components/list/package_list_row_spec.js b/spec/frontend/packages_and_registries/package_registry/components/list/package_list_row_spec.js index 913b4f5926f..bb04701a8b7 100644 --- a/spec/frontend/packages_and_registries/package_registry/components/list/package_list_row_spec.js +++ b/spec/frontend/packages_and_registries/package_registry/components/list/package_list_row_spec.js @@ -1,4 +1,4 @@ -import { GlFormCheckbox, GlSprintf } from '@gitlab/ui'; +import { GlFormCheckbox, GlSprintf, GlTruncate } from '@gitlab/ui'; import Vue, { nextTick } from 'vue'; import VueRouter from 'vue-router'; import { shallowMountExtended } from 'helpers/vue_test_utils_helper'; @@ -15,7 +15,13 @@ import TimeagoTooltip from '~/vue_shared/components/time_ago_tooltip.vue'; import { PACKAGE_ERROR_STATUS } from '~/packages_and_registries/package_registry/constants'; import ListItem from '~/vue_shared/components/registry/list_item.vue'; -import { packageData, packagePipelines, packageProject, packageTags } from '../../mock_data'; +import { + linksData, + packageData, + packagePipelines, + packageProject, + packageTags, +} from '../../mock_data'; Vue.use(VueRouter); @@ -26,9 +32,9 @@ describe('packages_list_row', () => { isGroupPage: false, }; - const packageWithoutTags = { ...packageData(), project: packageProject() }; + const packageWithoutTags = { ...packageData(), project: packageProject(), ...linksData }; const packageWithTags = { ...packageWithoutTags, tags: { nodes: packageTags() } }; - const packageCannotDestroy = { ...packageData(), canDestroy: false }; + const packageCannotDestroy = { ...packageData(), ...linksData, canDestroy: false }; const findPackageTags = () => wrapper.findComponent(PackageTags); const findPackagePath = () => wrapper.findComponent(PackagePath); @@ -41,6 +47,7 @@ describe('packages_list_row', () => { const findCreatedDateText = () => wrapper.findByTestId('created-date'); const findTimeAgoTooltip = () => wrapper.findComponent(TimeagoTooltip); const findBulkDeleteAction = () => wrapper.findComponent(GlFormCheckbox); + const findPackageName = () => wrapper.findComponent(GlTruncate); const mountComponent = ({ packageEntity = packageWithoutTags, @@ -81,6 +88,22 @@ describe('packages_list_row', () => { }); }); + it('does not have a link to navigate to the details page', () => { + mountComponent({ + packageEntity: { + ...packageWithoutTags, + _links: { + webPath: null, + }, + }, + }); + + expect(findPackageLink().exists()).toBe(false); + expect(findPackageName().props()).toMatchObject({ + text: '@gitlab-org/package-15', + }); + }); + describe('tags', () => { it('renders package tags when a package has tags', () => { mountComponent({ packageEntity: packageWithTags }); diff --git a/spec/frontend/packages_and_registries/package_registry/components/list/packages_search_spec.js b/spec/frontend/packages_and_registries/package_registry/components/list/packages_search_spec.js index 19505618ff7..a884959ab62 100644 --- a/spec/frontend/packages_and_registries/package_registry/components/list/packages_search_spec.js +++ b/spec/frontend/packages_and_registries/package_registry/components/list/packages_search_spec.js @@ -10,6 +10,7 @@ import { useMockLocationHelper } from 'helpers/mock_window_location_helper'; import { LIST_KEY_CREATED_AT } from '~/packages_and_registries/package_registry/constants'; import { getQueryParams, extractFilterAndSorting } from '~/packages_and_registries/shared/utils'; +import { TOKEN_TYPE_TYPE } from '~/vue_shared/components/filtered_search_bar/constants'; jest.mock('~/packages_and_registries/shared/utils'); @@ -92,7 +93,11 @@ describe('Package Search', () => { expect(findRegistrySearch().props()).toMatchObject({ tokens: expect.arrayContaining([ - expect.objectContaining({ token: PackageTypeToken, type: 'type', icon: 'package' }), + expect.objectContaining({ + token: PackageTypeToken, + type: TOKEN_TYPE_TYPE, + icon: 'package', + }), ]), sortableFields: sortableFields(isGroupPage), }); diff --git a/spec/frontend/packages_and_registries/package_registry/mock_data.js b/spec/frontend/packages_and_registries/package_registry/mock_data.js index f36c5923532..9e9e08bc196 100644 --- a/spec/frontend/packages_and_registries/package_registry/mock_data.js +++ b/spec/frontend/packages_and_registries/package_registry/mock_data.js @@ -118,6 +118,13 @@ export const packageVersions = () => [ }, ]; +export const linksData = { + _links: { + webPath: '/gitlab-org/package-15', + __typeName: 'PackageLinks', + }, +}; + export const packageData = (extend) => ({ __typename: 'Package', id: 'gid://gitlab/Packages::Package/111', @@ -232,6 +239,7 @@ export const packageDetailsQuery = (extendPackage) => ({ __typename: 'PackageFileConnection', }, versions: { + count: packageVersions().length, nodes: packageVersions(), pageInfo: { hasNextPage: true, @@ -376,6 +384,7 @@ export const packagesListQuery = ({ type = 'group', extend = {}, extendPaginatio nodes: [ { ...packageData(), + ...linksData, project: packageProject(), tags: { nodes: packageTags() }, pipelines: { @@ -387,6 +396,7 @@ export const packagesListQuery = ({ type = 'group', extend = {}, extendPaginatio project: packageProject(), tags: { nodes: [] }, pipelines: { nodes: [] }, + ...linksData, }, ], pageInfo: pagination(extendPagination), diff --git a/spec/frontend/packages_and_registries/package_registry/pages/details_spec.js b/spec/frontend/packages_and_registries/package_registry/pages/details_spec.js index f942a334f40..eb3b999c1ca 100644 --- a/spec/frontend/packages_and_registries/package_registry/pages/details_spec.js +++ b/spec/frontend/packages_and_registries/package_registry/pages/details_spec.js @@ -1,4 +1,4 @@ -import { GlEmptyState, GlBadge, GlTabs, GlTab, GlSprintf } from '@gitlab/ui'; +import { GlEmptyState, GlTabs, GlTab, GlSprintf } from '@gitlab/ui'; import Vue, { nextTick } from 'vue'; import VueApollo from 'vue-apollo'; @@ -42,6 +42,7 @@ import { packageFiles, packageDestroyFilesMutation, packageDestroyFilesMutationError, + pagination, } from '../mock_data'; jest.mock('~/flash'); @@ -122,7 +123,9 @@ describe('PackagesApp', () => { const findDeleteFileModal = () => wrapper.findByTestId('delete-file-modal'); const findDeleteFilesModal = () => wrapper.findByTestId('delete-files-modal'); const findVersionsList = () => wrapper.findComponent(PackageVersionsList); - const findDependenciesCountBadge = () => wrapper.findComponent(GlBadge); + const findVersionsCountBadge = () => wrapper.findByTestId('other-versions-badge'); + const findNoVersionsMessage = () => wrapper.findByTestId('no-versions-message'); + const findDependenciesCountBadge = () => wrapper.findByTestId('dependencies-badge'); const findNoDependenciesMessage = () => wrapper.findByTestId('no-dependencies-message'); const findDependencyRows = () => wrapper.findAllComponents(DependencyRow); const findDeletePackage = () => wrapper.findComponent(DeletePackage); @@ -564,6 +567,30 @@ describe('PackagesApp', () => { await waitForPromises(); expect(findVersionsList()).toBeDefined(); + expect(findVersionsCountBadge().exists()).toBe(true); + expect(findVersionsCountBadge().text()).toBe(packageVersions().length.toString()); + }); + + it('displays tab with 0 count when package has no other versions', async () => { + createComponent({ + resolver: jest.fn().mockResolvedValue( + packageDetailsQuery({ + versions: { + count: 0, + nodes: [], + pageInfo: pagination({ hasNextPage: false, hasPreviousPage: false }), + }, + }), + ), + }); + + await waitForPromises(); + + expect(findVersionsCountBadge().exists()).toBe(true); + expect(findVersionsCountBadge().text()).toBe('0'); + expect(findNoVersionsMessage().text()).toMatchInterpolatedText( + 'There are no other versions of this package.', + ); }); it('binds the correct props', async () => { @@ -576,6 +603,7 @@ describe('PackagesApp', () => { }); }); }); + describe('dependency links', () => { it('does not show the dependency links for a non nuget package', async () => { createComponent(); diff --git a/spec/frontend/packages_and_registries/settings/project/settings/components/container_expiration_policy_form_spec.js b/spec/frontend/packages_and_registries/settings/project/settings/components/container_expiration_policy_form_spec.js index 8e08864bdb8..cbb5aa52694 100644 --- a/spec/frontend/packages_and_registries/settings/project/settings/components/container_expiration_policy_form_spec.js +++ b/spec/frontend/packages_and_registries/settings/project/settings/components/container_expiration_policy_form_spec.js @@ -232,6 +232,7 @@ describe('Container Expiration Policy Settings Form', () => { describe('form', () => { describe('form submit event', () => { useMockLocationHelper(); + const originalHref = window.location.href; it('save has type submit', () => { mountComponent(); @@ -319,7 +320,7 @@ describe('Container Expiration Policy Settings Form', () => { await submitForm(); expect(wrapper.vm.$toast.show).toHaveBeenCalledWith(UPDATE_SETTINGS_ERROR_MESSAGE); - expect(window.location.href).toBeUndefined(); + expect(window.location.href).toBe(originalHref); }); it('parses the error messages', async () => { diff --git a/spec/frontend/packages_and_registries/shared/utils_spec.js b/spec/frontend/packages_and_registries/shared/utils_spec.js index 962cb2257ce..d81cdbfd8bd 100644 --- a/spec/frontend/packages_and_registries/shared/utils_spec.js +++ b/spec/frontend/packages_and_registries/shared/utils_spec.js @@ -1,4 +1,3 @@ -import { FILTERED_SEARCH_TERM } from '~/packages_and_registries/shared/constants'; import { getQueryParams, keyValueToFilterToken, @@ -7,6 +6,7 @@ import { beautifyPath, getCommitLink, } from '~/packages_and_registries/shared/utils'; +import { FILTERED_SEARCH_TERM } from '~/vue_shared/components/filtered_search_bar/constants'; import { packageList } from 'jest/packages_and_registries/infrastructure_registry/components/mock_data'; |