diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-05-15 03:10:46 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-05-15 03:10:46 +0300 |
commit | d0ba8fad6dd850a76848a5032e7380a6db66748e (patch) | |
tree | 3fde17650968919f601592ebea17865d2c58b48a /spec | |
parent | 80088b7f88992a64ef5253d57838b0b3463ce8b1 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
5 files changed, 120 insertions, 0 deletions
diff --git a/spec/fixtures/api/schemas/graphql/packages/package_details.json b/spec/fixtures/api/schemas/graphql/packages/package_details.json index 89e73d48c60..ca08e005e9d 100644 --- a/spec/fixtures/api/schemas/graphql/packages/package_details.json +++ b/spec/fixtures/api/schemas/graphql/packages/package_details.json @@ -82,6 +82,7 @@ { "$ref": "./package_composer_metadata.json" }, { "$ref": "./package_conan_metadata.json" }, { "$ref": "./package_maven_metadata.json" }, + { "$ref": "./package_nuget_metadata.json" }, { "type": "null" } ] }, diff --git a/spec/fixtures/api/schemas/graphql/packages/package_nuget_metadata.json b/spec/fixtures/api/schemas/graphql/packages/package_nuget_metadata.json new file mode 100644 index 00000000000..131b9e97287 --- /dev/null +++ b/spec/fixtures/api/schemas/graphql/packages/package_nuget_metadata.json @@ -0,0 +1,19 @@ +{ + "type": "object", + "additionalProperties": false, + "required": ["id", "licenseUrl", "projectUrl", "iconUrl"], + "properties": { + "id": { + "type": "string" + }, + "licenseUrl": { + "type": "string" + }, + "projectUrl": { + "type": "string" + }, + "iconUrl": { + "type": "string" + } + } +} diff --git a/spec/graphql/types/packages/maven/metadatum_type_spec.rb b/spec/graphql/types/packages/maven/metadatum_type_spec.rb new file mode 100644 index 00000000000..cf24af1456e --- /dev/null +++ b/spec/graphql/types/packages/maven/metadatum_type_spec.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe GitlabSchema.types['MavenMetadata'] do + it 'includes maven metadatum fields' do + expected_fields = %w[ + id created_at updated_at path app_group app_version app_name + ] + + expect(described_class).to include_graphql_fields(*expected_fields) + end +end diff --git a/spec/graphql/types/packages/nuget/metadatum_type_spec.rb b/spec/graphql/types/packages/nuget/metadatum_type_spec.rb new file mode 100644 index 00000000000..e5baa7522e4 --- /dev/null +++ b/spec/graphql/types/packages/nuget/metadatum_type_spec.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe GitlabSchema.types['NugetMetadata'] do + it 'includes nuget metadatum fields' do + expected_fields = %w[ + id license_url project_url icon_url + ] + + expect(described_class).to include_graphql_fields(*expected_fields) + end +end diff --git a/spec/requests/api/graphql/packages/nuget_spec.rb b/spec/requests/api/graphql/packages/nuget_spec.rb new file mode 100644 index 00000000000..fa9d8a0e37e --- /dev/null +++ b/spec/requests/api/graphql/packages/nuget_spec.rb @@ -0,0 +1,74 @@ +# frozen_string_literal: true +require 'spec_helper' + +RSpec.describe 'nuget package details' do + include GraphqlHelpers + + let_it_be(:project) { create(:project) } + let_it_be(:nuget_package) { create(:nuget_package, :with_metadatum, project: project) } + + let(:package_global_id) { global_id_of(nuget_package) } + let(:metadata) { query_graphql_fragment('NugetMetadata') } + let(:first_file) { nuget_package.package_files.find { |f| global_id_of(f) == first_file_response['id'] } } + + let(:depth) { 3 } + let(:excluded) { %w[metadata apiFuzzingCiConfiguration pipeline packageFiles] } + let(:package_files) { all_graphql_fields_for('PackageFile') } + + let(:user) { project.owner } + let(:package_details) { graphql_data_at(:package) } + let(:metadata_response) { graphql_data_at(:package, :metadata) } + let(:package_files_response) { graphql_data_at(:package, :package_files, :nodes) } + let(:first_file_response) { graphql_data_at(:package, :package_files, :nodes, 0)} + + let(:query) do + graphql_query_for(:package, { id: package_global_id }, <<~FIELDS) + #{all_graphql_fields_for('PackageDetailsType', max_depth: depth, excluded: excluded)} + metadata { + #{metadata} + } + packageFiles { + nodes { + #{package_files} + } + } + FIELDS + end + + subject { post_graphql(query, current_user: user) } + + before do + subject + end + + it_behaves_like 'a working graphql query' do + it 'matches the JSON schema' do + expect(package_details).to match_schema('graphql/packages/package_details') + end + end + + it 'has the correct metadata' do + expect(metadata_response).to include( + 'id' => global_id_of(nuget_package.nuget_metadatum), + 'licenseUrl' => nuget_package.nuget_metadatum.license_url, + 'projectUrl' => nuget_package.nuget_metadatum.project_url, + 'iconUrl' => nuget_package.nuget_metadatum.icon_url + ) + end + + it 'has the right amount of files' do + expect(package_files_response.length).to be(nuget_package.package_files.length) + end + + it 'has the basic package files data' do + expect(first_file_response).to include( + 'id' => global_id_of(first_file), + 'fileName' => first_file.file_name, + 'size' => first_file.size.to_s, + 'downloadPath' => first_file.download_path, + 'fileSha1' => first_file.file_sha1, + 'fileMd5' => first_file.file_md5, + 'fileSha256' => first_file.file_sha256 + ) + end +end |