diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-08-11 18:10:57 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-08-11 18:10:57 +0300 |
commit | 4f54ec92edd344449ee005fd4dd727fa2e3e3ffd (patch) | |
tree | e8e8fe275493e6af3c572c0b93525c77a4623400 /spec | |
parent | 4d68d8b937211e5cdcf58443ddf693f0f1d13794 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
16 files changed, 467 insertions, 67 deletions
diff --git a/spec/fixtures/api/schemas/graphql/packages/package_details.json b/spec/fixtures/api/schemas/graphql/packages/package_details.json index 3dfe6712b75..9e8bf7c52d0 100644 --- a/spec/fixtures/api/schemas/graphql/packages/package_details.json +++ b/spec/fixtures/api/schemas/graphql/packages/package_details.json @@ -99,6 +99,48 @@ "status": { "type": ["string"], "enum": ["DEFAULT", "HIDDEN", "PROCESSING", "ERROR"] + }, + "dependencyLinks": { + "type": "object", + "additionalProperties": false, + "properties": { + "pageInfo": { "type": "object" }, + "edges": { "type": "array" }, + "nodes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "dependencyType": { + "type": "string" + }, + "dependency": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "versionPattern": { + "type": "string" + } + } + }, + "metadata": { + "anyOf": [ + { "$ref": "./package_nuget_dependency_link_metadata.json" }, + { "type": "null" } + ] + } + } + } + } + } } } } diff --git a/spec/fixtures/api/schemas/graphql/packages/package_nuget_dependency_link_metadata.json b/spec/fixtures/api/schemas/graphql/packages/package_nuget_dependency_link_metadata.json new file mode 100644 index 00000000000..0738354528e --- /dev/null +++ b/spec/fixtures/api/schemas/graphql/packages/package_nuget_dependency_link_metadata.json @@ -0,0 +1,12 @@ +{ + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "targetFramework": { + "type": "string" + } + } +} diff --git a/spec/frontend/environments/confirm_rollback_modal_spec.js b/spec/frontend/environments/confirm_rollback_modal_spec.js index d675726b82b..7ecb6602dc6 100644 --- a/spec/frontend/environments/confirm_rollback_modal_spec.js +++ b/spec/frontend/environments/confirm_rollback_modal_spec.js @@ -23,66 +23,73 @@ describe('Confirm Rollback Modal Component', () => { commitUrl: 'test/-/commit/abc0123', }; + const retryPath = 'test/-/jobs/123/retry'; + describe.each` - hasMultipleCommits | environmentData - ${true} | ${envWithLastDeployment} - ${false} | ${envWithoutLastDeployment} - `('when hasMultipleCommits=$hasMultipleCommits', ({ hasMultipleCommits, environmentData }) => { - beforeEach(() => { - environment = environmentData; - }); + hasMultipleCommits | environmentData | retryUrl | primaryPropsAttrs + ${true} | ${envWithLastDeployment} | ${null} | ${[{ variant: 'danger' }]} + ${false} | ${envWithoutLastDeployment} | ${retryPath} | ${[{ variant: 'danger' }, { 'data-method': 'post' }, { href: retryPath }]} + `( + 'when hasMultipleCommits=$hasMultipleCommits', + ({ hasMultipleCommits, environmentData, retryUrl, primaryPropsAttrs }) => { + beforeEach(() => { + environment = environmentData; + }); - it('should show "Rollback" when isLastDeployment is false', () => { - const component = shallowMount(ConfirmRollbackModal, { - propsData: { - environment: { - ...environment, - isLastDeployment: false, + it('should show "Rollback" when isLastDeployment is false', () => { + const component = shallowMount(ConfirmRollbackModal, { + propsData: { + environment: { + ...environment, + isLastDeployment: false, + }, + hasMultipleCommits, + retryUrl, }, - hasMultipleCommits, - }, - }); - const modal = component.find(GlModal); + }); + const modal = component.find(GlModal); - expect(modal.attributes('title')).toContain('Rollback'); - expect(modal.attributes('title')).toContain('test'); - expect(modal.attributes('ok-title')).toBe('Rollback'); - expect(modal.text()).toContain('commit abc0123'); - expect(modal.text()).toContain('Are you sure you want to continue?'); - }); + expect(modal.attributes('title')).toContain('Rollback'); + expect(modal.attributes('title')).toContain('test'); + expect(modal.props('actionPrimary').text).toBe('Rollback'); + expect(modal.props('actionPrimary').attributes).toEqual(primaryPropsAttrs); + expect(modal.text()).toContain('commit abc0123'); + expect(modal.text()).toContain('Are you sure you want to continue?'); + }); - it('should show "Re-deploy" when isLastDeployment is true', () => { - const component = shallowMount(ConfirmRollbackModal, { - propsData: { - environment: { - ...environment, - isLastDeployment: true, + it('should show "Re-deploy" when isLastDeployment is true', () => { + const component = shallowMount(ConfirmRollbackModal, { + propsData: { + environment: { + ...environment, + isLastDeployment: true, + }, + hasMultipleCommits, }, - hasMultipleCommits, - }, + }); + const modal = component.find(GlModal); + + expect(modal.attributes('title')).toContain('Re-deploy'); + expect(modal.attributes('title')).toContain('test'); + expect(modal.props('actionPrimary').text).toBe('Re-deploy'); + expect(modal.text()).toContain('commit abc0123'); + expect(modal.text()).toContain('Are you sure you want to continue?'); }); - const modal = component.find(GlModal); - expect(modal.attributes('title')).toContain('Re-deploy'); - expect(modal.attributes('title')).toContain('test'); - expect(modal.attributes('ok-title')).toBe('Re-deploy'); - expect(modal.text()).toContain('commit abc0123'); - expect(modal.text()).toContain('Are you sure you want to continue?'); - }); + it('should emit the "rollback" event when "ok" is clicked', () => { + const env = { ...environmentData, isLastDeployment: true }; + const component = shallowMount(ConfirmRollbackModal, { + propsData: { + environment: env, + hasMultipleCommits, + }, + }); + const eventHubSpy = jest.spyOn(eventHub, '$emit'); + const modal = component.find(GlModal); + modal.vm.$emit('ok'); - it('should emit the "rollback" event when "ok" is clicked', () => { - const env = { ...environmentData, isLastDeployment: true }; - const component = shallowMount(ConfirmRollbackModal, { - propsData: { - environment: env, - hasMultipleCommits, - }, + expect(eventHubSpy).toHaveBeenCalledWith('rollbackEnvironment', env); }); - const eventHubSpy = jest.spyOn(eventHub, '$emit'); - const modal = component.find(GlModal); - modal.vm.$emit('ok'); - - expect(eventHubSpy).toHaveBeenCalledWith('rollbackEnvironment', env); - }); - }); + }, + ); }); diff --git a/spec/frontend/packages_and_registries/package_registry/components/details/__snapshots__/version_row_spec.js.snap b/spec/frontend/packages_and_registries/package_registry/components/details/__snapshots__/version_row_spec.js.snap new file mode 100644 index 00000000000..8f69f943112 --- /dev/null +++ b/spec/frontend/packages_and_registries/package_registry/components/details/__snapshots__/version_row_spec.js.snap @@ -0,0 +1,101 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`VersionRow renders 1`] = ` +<div + class="gl-display-flex gl-flex-direction-column gl-border-b-solid gl-border-t-solid gl-border-t-1 gl-border-b-1 gl-border-t-transparent gl-border-b-gray-100" +> + <div + class="gl-display-flex gl-align-items-center gl-py-3 gl-px-5" + > + <!----> + + <div + class="gl-display-flex gl-xs-flex-direction-column gl-justify-content-space-between gl-align-items-stretch gl-flex-grow-1" + > + <div + class="gl-display-flex gl-flex-direction-column gl-xs-mb-3 gl-min-w-0 gl-flex-grow-1" + > + <div + class="gl-display-flex gl-align-items-center gl-text-body gl-font-weight-bold gl-min-h-6 gl-min-w-0" + > + <div + class="gl-display-flex gl-align-items-center gl-mr-3 gl-min-w-0" + > + <gl-link-stub + class="gl-text-body gl-min-w-0" + href="243" + > + <span + class="gl-truncate" + title="@gitlab-org/package-15" + > + <span + class="gl-truncate-end" + > + @gitlab-org/package-15 + </span> + </span> + </gl-link-stub> + + <package-tags-stub + class="gl-ml-3" + hidelabel="true" + tagdisplaylimit="1" + tags="[object Object],[object Object],[object Object]" + /> + </div> + + <!----> + </div> + + <div + class="gl-display-flex gl-align-items-center gl-text-gray-500 gl-min-h-6 gl-min-w-0 gl-flex-grow-1" + > + + 1.0.1 + + </div> + </div> + + <div + class="gl-display-flex gl-flex-direction-column gl-sm-align-items-flex-end gl-justify-content-space-between gl-text-gray-500 gl-flex-shrink-0" + > + <div + class="gl-display-flex gl-align-items-center gl-sm-text-body gl-sm-font-weight-bold gl-min-h-6" + > + <publish-method-stub + packageentity="[object Object]" + /> + </div> + + <div + class="gl-display-flex gl-align-items-center gl-min-h-6" + > + Created + <time-ago-tooltip-stub + cssclass="" + time="2021-08-10T09:33:54Z" + tooltipplacement="top" + /> + </div> + </div> + </div> + + <!----> + </div> + + <div + class="gl-display-flex" + > + <div + class="gl-w-7" + /> + + <!----> + + <div + class="gl-w-9" + /> + </div> +</div> +`; diff --git a/spec/frontend/packages_and_registries/package_registry/components/details/app_spec.js b/spec/frontend/packages_and_registries/package_registry/components/details/app_spec.js index e5155a8e140..1bd2058cf5b 100644 --- a/spec/frontend/packages_and_registries/package_registry/components/details/app_spec.js +++ b/spec/frontend/packages_and_registries/package_registry/components/details/app_spec.js @@ -14,6 +14,7 @@ import InstallationCommands from '~/packages_and_registries/package_registry/com import PackageFiles from '~/packages_and_registries/package_registry/components/details/package_files.vue'; import PackageHistory from '~/packages_and_registries/package_registry/components/details/package_history.vue'; import PackageTitle from '~/packages_and_registries/package_registry/components/details/package_title.vue'; +import VersionRow from '~/packages_and_registries/package_registry/components/details/version_row.vue'; import { FETCH_PACKAGE_DETAILS_ERROR_MESSAGE, DELETE_PACKAGE_ERROR_MESSAGE, @@ -28,6 +29,7 @@ import getPackageDetails from '~/packages_and_registries/package_registry/graphq import { packageDetailsQuery, packageData, + packageVersions, emptyPackageDetailsQuery, packageDestroyMutation, packageDestroyMutationError, @@ -96,6 +98,8 @@ describe('PackagesApp', () => { const findDeleteButton = () => wrapper.findByTestId('delete-package'); const findPackageFiles = () => wrapper.findComponent(PackageFiles); const findDeleteFileModal = () => wrapper.findByTestId('delete-file-modal'); + const findVersionRows = () => wrapper.findAllComponents(VersionRow); + const noVersionsMessage = () => wrapper.findByTestId('no-versions-message'); afterEach(() => { wrapper.destroy(); @@ -362,4 +366,39 @@ describe('PackagesApp', () => { }); }); }); + + describe('versions', () => { + it('displays the correct version count when the package has versions', async () => { + createComponent(); + + await waitForPromises(); + + expect(findVersionRows()).toHaveLength(packageVersions().length); + }); + + it('binds the correct props', async () => { + const [versionPackage] = packageVersions(); + // eslint-disable-next-line no-underscore-dangle + delete versionPackage.__typename; + delete versionPackage.tags; + + createComponent(); + + await waitForPromises(); + + expect(findVersionRows().at(0).props()).toMatchObject({ + packageEntity: expect.objectContaining(versionPackage), + }); + }); + + it('displays the no versions message when there are none', async () => { + createComponent({ + resolver: jest.fn().mockResolvedValue(packageDetailsQuery({ versions: { nodes: [] } })), + }); + + await waitForPromises(); + + expect(noVersionsMessage().exists()).toBe(true); + }); + }); }); diff --git a/spec/frontend/packages_and_registries/package_registry/components/details/version_row_spec.js b/spec/frontend/packages_and_registries/package_registry/components/details/version_row_spec.js new file mode 100644 index 00000000000..f7613949fe4 --- /dev/null +++ b/spec/frontend/packages_and_registries/package_registry/components/details/version_row_spec.js @@ -0,0 +1,89 @@ +import { GlLink, GlSprintf, GlTruncate } from '@gitlab/ui'; +import { shallowMountExtended } from 'helpers/vue_test_utils_helper'; +import { getIdFromGraphQLId } from '~/graphql_shared/utils'; +import PackageTags from '~/packages/shared/components/package_tags.vue'; +import PublishMethod from '~/packages/shared/components/publish_method.vue'; +import VersionRow from '~/packages_and_registries/package_registry/components/details/version_row.vue'; +import ListItem from '~/vue_shared/components/registry/list_item.vue'; +import TimeAgoTooltip from '~/vue_shared/components/time_ago_tooltip.vue'; + +import { packageVersions } from '../../mock_data'; + +const packageVersion = packageVersions()[0]; + +describe('VersionRow', () => { + let wrapper; + + const findListItem = () => wrapper.findComponent(ListItem); + const findLink = () => wrapper.findComponent(GlLink); + const findPackageTags = () => wrapper.findComponent(PackageTags); + const findPublishMethod = () => wrapper.findComponent(PublishMethod); + const findTimeAgoTooltip = () => wrapper.findComponent(TimeAgoTooltip); + + function createComponent(packageEntity = packageVersion) { + wrapper = shallowMountExtended(VersionRow, { + propsData: { + packageEntity, + }, + stubs: { + ListItem, + GlSprintf, + GlTruncate, + }, + }); + } + + afterEach(() => { + wrapper.destroy(); + }); + + it('renders', () => { + createComponent(); + + expect(wrapper.element).toMatchSnapshot(); + }); + + it('has a link to the version detail', () => { + createComponent(); + + expect(findLink().attributes('href')).toBe(`${getIdFromGraphQLId(packageVersion.id)}`); + expect(findLink().text()).toBe(packageVersion.name); + }); + + it('has the version of the package', () => { + createComponent(); + + expect(wrapper.text()).toContain(packageVersion.version); + }); + + it('has a package tags component', () => { + createComponent(); + + expect(findPackageTags().props('tags')).toBe(packageVersion.tags.nodes); + }); + + it('has a publish method component', () => { + createComponent(); + + expect(findPublishMethod().props('packageEntity')).toBe(packageVersion); + }); + it('has a time-ago tooltip', () => { + createComponent(); + + expect(findTimeAgoTooltip().props('time')).toBe(packageVersion.createdAt); + }); + + describe('disabled status', () => { + it('disables the list item', () => { + createComponent({ ...packageVersion, status: 'something' }); + + expect(findListItem().props('disabled')).toBe(true); + }); + + it('disables the link', () => { + createComponent({ ...packageVersion, status: 'something' }); + + expect(findLink().attributes('disabled')).toBe('true'); + }); + }); +}); 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 5cf81e5cd09..9e5457aa0fe 100644 --- a/spec/frontend/packages_and_registries/package_registry/mock_data.js +++ b/spec/frontend/packages_and_registries/package_registry/mock_data.js @@ -51,6 +51,27 @@ export const packageFiles = () => [ }, ]; +export const packageVersions = () => [ + { + createdAt: '2021-08-10T09:33:54Z', + id: 'gid://gitlab/Packages::Package/243', + name: '@gitlab-org/package-15', + status: 'DEFAULT', + tags: { nodes: packageTags() }, + version: '1.0.1', + __typename: 'Package', + }, + { + createdAt: '2021-08-10T09:33:54Z', + id: 'gid://gitlab/Packages::Package/244', + name: '@gitlab-org/package-15', + status: 'DEFAULT', + tags: { nodes: packageTags() }, + version: '1.0.2', + __typename: 'Package', + }, +]; + export const packageData = (extend) => ({ id: 'gid://gitlab/Packages::Package/111', name: '@gitlab-org/package-15', @@ -105,6 +126,9 @@ export const packageDetailsQuery = (extendPackage) => ({ ...mavenMetadata(), ...nugetMetadata(), }, + project: { + path: 'projectPath', + }, tags: { nodes: packageTags(), __typename: 'PackageTagConnection', @@ -117,6 +141,10 @@ export const packageDetailsQuery = (extendPackage) => ({ nodes: packageFiles(), __typename: 'PackageFileConnection', }, + versions: { + nodes: packageVersions(), + __typename: 'PackageConnection', + }, __typename: 'PackageDetailsType', ...extendPackage, }, diff --git a/spec/graphql/types/packages/nuget/dependency_link_metdatum_type_spec.rb b/spec/graphql/types/packages/nuget/dependency_link_metdatum_type_spec.rb new file mode 100644 index 00000000000..b11d9d131aa --- /dev/null +++ b/spec/graphql/types/packages/nuget/dependency_link_metdatum_type_spec.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe GitlabSchema.types['NugetDependencyLinkMetadata'] do + it 'includes nuget dependency link metadatum fields' do + expected_fields = %w[ + id target_framework + ] + + expect(described_class).to include_graphql_fields(*expected_fields) + end +end diff --git a/spec/graphql/types/packages/package_dependency_link_type_spec.rb b/spec/graphql/types/packages/package_dependency_link_type_spec.rb new file mode 100644 index 00000000000..53ee8be69a6 --- /dev/null +++ b/spec/graphql/types/packages/package_dependency_link_type_spec.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe GitlabSchema.types['PackageDependencyLink'] do + it 'includes package file fields' do + expected_fields = %w[ + id dependency_type dependency metadata + ] + + expect(described_class).to include_graphql_fields(*expected_fields) + end +end diff --git a/spec/graphql/types/packages/package_dependency_type_enum_spec.rb b/spec/graphql/types/packages/package_dependency_type_enum_spec.rb new file mode 100644 index 00000000000..b8893a3619e --- /dev/null +++ b/spec/graphql/types/packages/package_dependency_type_enum_spec.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe GitlabSchema.types['PackageDependencyType'] do + it 'exposes all depeendency type values' do + expect(described_class.values.keys).to contain_exactly(*%w[DEPENDENCIES DEV_DEPENDENCIES BUNDLE_DEPENDENCIES PEER_DEPENDENCIES]) + end +end diff --git a/spec/graphql/types/packages/package_dependency_type_spec.rb b/spec/graphql/types/packages/package_dependency_type_spec.rb new file mode 100644 index 00000000000..67474729781 --- /dev/null +++ b/spec/graphql/types/packages/package_dependency_type_spec.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe GitlabSchema.types['PackageDependency'] do + it 'includes package file fields' do + expected_fields = %w[ + id name version_pattern + ] + + expect(described_class).to include_graphql_fields(*expected_fields) + end +end diff --git a/spec/graphql/types/packages/package_details_type_spec.rb b/spec/graphql/types/packages/package_details_type_spec.rb index 06093813315..7e1103d8aa0 100644 --- a/spec/graphql/types/packages/package_details_type_spec.rb +++ b/spec/graphql/types/packages/package_details_type_spec.rb @@ -5,7 +5,7 @@ require 'spec_helper' RSpec.describe GitlabSchema.types['PackageDetailsType'] do it 'includes all the package fields' do expected_fields = %w[ - id name version created_at updated_at package_type tags project pipelines versions package_files + id name version created_at updated_at package_type tags project pipelines versions package_files dependency_links ] expect(described_class).to include_graphql_fields(*expected_fields) diff --git a/spec/initializers/rails_asset_host_spec.rb b/spec/initializers/rails_asset_host_spec.rb index 682ef9d9bbe..eb69c1fa85b 100644 --- a/spec/initializers/rails_asset_host_spec.rb +++ b/spec/initializers/rails_asset_host_spec.rb @@ -7,6 +7,15 @@ RSpec.describe 'Rails asset host initializer' do load Rails.root.join('config/initializers/rails_asset_host.rb') end + around do |example| + old_asset_host = Rails.application.config.action_controller.asset_host + + example.run + + Rails.application.config.action_controller.asset_host = old_asset_host + ActionController::Base.asset_host = old_asset_host + end + subject { Rails.application.config.action_controller.asset_host } it 'uses no asset host by default' do diff --git a/spec/lib/gitlab/ci/config/entry/job_spec.rb b/spec/lib/gitlab/ci/config/entry/job_spec.rb index 01a890cacd3..5b47d3a3922 100644 --- a/spec/lib/gitlab/ci/config/entry/job_spec.rb +++ b/spec/lib/gitlab/ci/config/entry/job_spec.rb @@ -434,20 +434,6 @@ RSpec.describe Gitlab::Ci::Config::Entry::Job do expect(entry.errors).to include 'job dependencies the another-job should be part of needs' end end - - context 'when stage: is missing' do - let(:config) do - { - script: 'echo', - needs: ['build-job'] - } - end - - it 'returns error about invalid data' do - expect(entry).not_to be_valid - expect(entry.errors).to include 'job config missing required keys: stage' - end - end end context 'when timeout value is not correct' do diff --git a/spec/requests/api/graphql/packages/nuget_spec.rb b/spec/requests/api/graphql/packages/nuget_spec.rb index 1de16009684..ba8d2ca42d2 100644 --- a/spec/requests/api/graphql/packages/nuget_spec.rb +++ b/spec/requests/api/graphql/packages/nuget_spec.rb @@ -6,8 +6,11 @@ RSpec.describe 'nuget package details' do include_context 'package details setup' let_it_be(:package) { create(:nuget_package, :with_metadatum, project: project) } + let_it_be(:dependency_link) { create(:packages_dependency_link, :with_nuget_metadatum, package: package) } let(:metadata) { query_graphql_fragment('NugetMetadata') } + let(:dependency_link_response) { graphql_data_at(:package, :dependency_links, :nodes, 0) } + let(:dependency_response) { graphql_data_at(:package, :dependency_links, :nodes, 0, :dependency) } subject { post_graphql(query, current_user: user) } @@ -26,4 +29,34 @@ RSpec.describe 'nuget package details' do 'iconUrl' => package.nuget_metadatum.icon_url ) end + + it 'has dependency links' do + expect(dependency_link_response).to include( + 'id' => global_id_of(dependency_link), + 'dependencyType' => dependency_link.dependency_type.upcase + ) + + expect(dependency_response).to include( + 'id' => global_id_of(dependency_link.dependency), + 'name' => dependency_link.dependency.name, + 'versionPattern' => dependency_link.dependency.version_pattern + ) + end + + it 'avoids N+1 queries' do + first_user = create(:user) + second_user = create(:user) + + control_count = ActiveRecord::QueryRecorder.new do + post_graphql(query, current_user: first_user) + end + + create_list(:packages_dependency_link, 10, :with_nuget_metadatum, package: package) + + expect do + post_graphql(query, current_user: second_user) + end.not_to exceed_query_limit(control_count) + + expect(response).to have_gitlab_http_status(:ok) + end end diff --git a/spec/support/shared_contexts/graphql/requests/packages_shared_context.rb b/spec/support/shared_contexts/graphql/requests/packages_shared_context.rb index 334b11c9f6e..645ea742f07 100644 --- a/spec/support/shared_contexts/graphql/requests/packages_shared_context.rb +++ b/spec/support/shared_contexts/graphql/requests/packages_shared_context.rb @@ -9,6 +9,7 @@ RSpec.shared_context 'package details setup' do let(:depth) { 3 } let(:excluded) { %w[metadata apiFuzzingCiConfiguration pipeline packageFiles] } let(:package_files) { all_graphql_fields_for('PackageFile') } + let(:dependency_links) { all_graphql_fields_for('PackageDependencyLink') } let(:user) { project.owner } let(:package_details) { graphql_data_at(:package) } let(:metadata_response) { graphql_data_at(:package, :metadata) } @@ -28,6 +29,11 @@ RSpec.shared_context 'package details setup' do #{package_files} } } + dependencyLinks { + nodes { + #{dependency_links} + } + } FIELDS end end |