diff --git a/.rubocop_todo/layout/line_length.yml b/.rubocop_todo/layout/line_length.yml index dd2095491f5ac800c54d5a42bf7fe3590beaf1b7..fe7b3e6d59160fe6484d6bcc685180951cc3864c 100644 --- a/.rubocop_todo/layout/line_length.yml +++ b/.rubocop_todo/layout/line_length.yml @@ -4129,7 +4129,6 @@ Layout/LineLength: - 'spec/support/shared_examples/quick_actions/issue/clone_quick_action_shared_examples.rb' - 'spec/support/shared_examples/quick_actions/issue/move_quick_action_shared_examples.rb' - 'spec/support/shared_examples/quick_actions/merge_request/rebase_quick_action_shared_examples.rb' - - 'spec/support/shared_examples/requests/api/conan_packages_shared_examples.rb' - 'spec/support/shared_examples/requests/api/custom_attributes_shared_examples.rb' - 'spec/support/shared_examples/requests/api/debian_distributions_shared_examples.rb' - 'spec/support/shared_examples/requests/api/debian_packages_shared_examples.rb' diff --git a/.rubocop_todo/rspec/context_wording.yml b/.rubocop_todo/rspec/context_wording.yml index 1da097f48f62e4f4c95b605af758350bdba02499..f442491a32b565f2420dd47426635bd8008163a9 100644 --- a/.rubocop_todo/rspec/context_wording.yml +++ b/.rubocop_todo/rspec/context_wording.yml @@ -2611,7 +2611,6 @@ RSpec/ContextWording: - 'spec/support/shared_contexts/prometheus/alert_shared_context.rb' - 'spec/support/shared_contexts/rack_attack_shared_context.rb' - 'spec/support/shared_contexts/read_ci_configuration_shared_context.rb' - - 'spec/support/shared_contexts/requests/api/conan_packages_shared_context.rb' - 'spec/support/shared_contexts/requests/api/debian_repository_shared_context.rb' - 'spec/support/shared_contexts/requests/api/go_modules_shared_context.rb' - 'spec/support/shared_contexts/requests/api/graphql/group_and_project_boards_query_shared_context.rb' diff --git a/.rubocop_todo/rspec/return_from_stub.yml b/.rubocop_todo/rspec/return_from_stub.yml index 3af4879b0980fa48b480921a0eb919001952ea34..0f26a92fff0760fa0632514db7574c5056f2e83d 100644 --- a/.rubocop_todo/rspec/return_from_stub.yml +++ b/.rubocop_todo/rspec/return_from_stub.yml @@ -176,7 +176,6 @@ RSpec/ReturnFromStub: - 'spec/support/shared_examples/lib/gitlab/middleware/read_only_gitlab_instance_shared_examples.rb' - 'spec/support/shared_examples/lib/gitlab/sidekiq_middleware/strategy_shared_examples.rb' - 'spec/support/shared_examples/models/concerns/can_move_repository_storage_shared_examples.rb' - - 'spec/support/shared_examples/requests/api/conan_packages_shared_examples.rb' - 'spec/support/shared_examples/services/boards/boards_create_service_shared_examples.rb' - 'spec/support/shared_examples/services/boards/create_service_shared_examples.rb' - 'spec/support/shared_examples/uploaders/object_storage_shared_examples.rb' diff --git a/.rubocop_todo/style/format_string.yml b/.rubocop_todo/style/format_string.yml index ec29a5bee09b36c366c3553b2c39e6f62273be82..ad98b870c2481fa8952aa5652346952c164e5441 100644 --- a/.rubocop_todo/style/format_string.yml +++ b/.rubocop_todo/style/format_string.yml @@ -232,7 +232,6 @@ Style/FormatString: - 'spec/support/helpers/javascript_fixtures_helpers.rb' - 'spec/support/shared_contexts/bulk_imports_requests_shared_context.rb' - 'spec/support/shared_examples/features/wiki/user_views_wiki_page_shared_examples.rb' - - 'spec/support/shared_examples/requests/api/conan_packages_shared_examples.rb' - 'spec/support/shared_examples/services/jira/requests/base_shared_examples.rb' - 'spec/support/shared_examples/views/registration_features_prompt_shared_examples.rb' - 'spec/validators/any_field_validator_spec.rb' diff --git a/.rubocop_todo/style/inline_disable_annotation.yml b/.rubocop_todo/style/inline_disable_annotation.yml index 45d4e345b4fd09212f533706f00f746affc36498..3378f6472990d5173a2b8f351cda1d4152229762 100644 --- a/.rubocop_todo/style/inline_disable_annotation.yml +++ b/.rubocop_todo/style/inline_disable_annotation.yml @@ -2405,7 +2405,6 @@ Style/InlineDisableAnnotation: - 'spec/support/shared_examples/models/member_shared_examples.rb' - 'spec/support/shared_examples/models/packages/debian/component_file_shared_example.rb' - 'spec/support/shared_examples/requests/api/award_emoji_todo_shared_examples.rb' - - 'spec/support/shared_examples/requests/api/conan_packages_shared_examples.rb' - 'spec/support/shared_examples/requests/api/graphql/group_and_project_boards_query_shared_examples.rb' - 'spec/support/shared_examples/requests/api/helm_packages_shared_examples.rb' - 'spec/support/shared_examples/requests/api/ml_model_packages_shared_examples.rb' diff --git a/spec/requests/api/conan/v1/instance_packages_spec.rb b/spec/requests/api/conan/v1/instance_packages_spec.rb index be1249514fa5b6345a6664f0d2114e8b12e24275..d53e48b9dbe88d83c4440bccb986f5ce5ea0d338 100644 --- a/spec/requests/api/conan/v1/instance_packages_spec.rb +++ b/spec/requests/api/conan/v1/instance_packages_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' RSpec.describe API::Conan::V1::InstancePackages, feature_category: :package_registry do - include_context 'conan api setup' + include_context 'with conan api setup' let_it_be_with_reload(:package) { create(:conan_package, project: project, without_recipe_revisions: true) } let(:snowplow_gitlab_standard_context) do @@ -43,7 +43,7 @@ end context 'with recipe endpoints' do - include_context 'conan recipe endpoints' + include_context 'for conan recipe endpoints' let(:project_id) { 9999 } let(:url_prefix) { "#{Settings.gitlab.base_url}/api/v4" } @@ -126,7 +126,7 @@ end context 'with file download endpoints' do - include_context 'conan file download endpoints' + include_context 'for conan file download endpoints' describe 'GET /api/v4/packages/conan/v1/files/:package_name/:package_version/:package_username/:package_channel' \ '/:recipe_revision/export/:file_name' do @@ -155,7 +155,7 @@ end context 'with file upload endpoints' do - include_context 'conan file upload endpoints' + include_context 'for conan file upload endpoints' describe 'PUT /api/v4/packages/conan/v1/files/:package_name/:package_version/:package_username/:package_channel' \ '/:recipe_revision/export/:file_name/authorize' do diff --git a/spec/requests/api/conan/v1/project_packages_spec.rb b/spec/requests/api/conan/v1/project_packages_spec.rb index fdaffe5b0f46444cf05b683b2f59a41f082474e6..b28d310a643f82c007e67e63c7195d0727f5556e 100644 --- a/spec/requests/api/conan/v1/project_packages_spec.rb +++ b/spec/requests/api/conan/v1/project_packages_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' RSpec.describe API::Conan::V1::ProjectPackages, feature_category: :package_registry do - include_context 'conan api setup' + include_context 'with conan api setup' let_it_be_with_reload(:package) { create(:conan_package, project: project, without_recipe_revisions: true) } let(:project_id) { project.id } @@ -55,7 +55,7 @@ end context 'with recipe endpoints' do - include_context 'conan recipe endpoints' + include_context 'for conan recipe endpoints' let(:url_prefix) { "#{Settings.gitlab.base_url}/api/v4/projects/#{project_id}" } let(:recipe_path) { package.conan_recipe_path } @@ -150,7 +150,7 @@ end context 'with file download endpoints' do - include_context 'conan file download endpoints' + include_context 'for conan file download endpoints' subject(:request) { get api(url), headers: headers } @@ -181,7 +181,7 @@ end context 'with file upload endpoints' do - include_context 'conan file upload endpoints' + include_context 'for conan file upload endpoints' describe 'PUT /api/v4/projects/:id/packages/conan/v1/files/:package_name/:package_version/:package_username' \ '/:package_channel/:recipe_revision/export/:file_name/authorize' do diff --git a/spec/requests/api/conan/v2/project_packages_spec.rb b/spec/requests/api/conan/v2/project_packages_spec.rb index 646cfd78b18347ab551093e98c9e099bdbd2ce3f..da6774abdda3fac177976a14f11c1578a75c1519 100644 --- a/spec/requests/api/conan/v2/project_packages_spec.rb +++ b/spec/requests/api/conan/v2/project_packages_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' RSpec.describe API::Conan::V2::ProjectPackages, feature_category: :package_registry do - include_context 'conan api setup' + include_context 'with conan api setup' let_it_be_with_reload(:package) { create(:conan_package, project: project) } let(:project_id) { project.id } @@ -30,7 +30,7 @@ describe 'GET /api/v4/projects/:id/packages/conan/v2/conans/:package_name/:package_version/:package_username/' \ ':package_channel/revisions/:recipe_revision/files/:file_name' do - include_context 'conan file download endpoints' + include_context 'for conan file download endpoints' let(:file_name) { recipe_file.file_name } let(:recipe_revision) { recipe_file_metadata.recipe_revision_value } diff --git a/spec/support/shared_contexts/requests/api/conan_packages_shared_context.rb b/spec/support/shared_contexts/requests/api/conan_packages_shared_context.rb index 0c3e70e20ec5a872e642080e1957c2f14e02391d..79fc19b4897588b0886a9d34a948fb545481d47e 100644 --- a/spec/support/shared_contexts/requests/api/conan_packages_shared_context.rb +++ b/spec/support/shared_contexts/requests/api/conan_packages_shared_context.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -RSpec.shared_context 'conan api setup' do +RSpec.shared_context 'with conan api setup' do include PackagesManagerApiSpecHelpers include HttpBasicAuthHelpers @@ -44,7 +44,7 @@ end end -RSpec.shared_context 'conan recipe endpoints' do +RSpec.shared_context 'for conan recipe endpoints' do include PackagesManagerApiSpecHelpers include HttpBasicAuthHelpers @@ -52,7 +52,7 @@ let(:headers) { build_token_auth_header(jwt.encoded) } end -RSpec.shared_context 'conan file download endpoints' do +RSpec.shared_context 'for conan file download endpoints' do include PackagesManagerApiSpecHelpers include HttpBasicAuthHelpers @@ -65,7 +65,7 @@ let(:recipe_file_metadata) { recipe_file.conan_file_metadatum } end -RSpec.shared_context 'conan file upload endpoints' do +RSpec.shared_context 'for conan file upload endpoints' do include PackagesManagerApiSpecHelpers include WorkhorseHelpers include HttpBasicAuthHelpers diff --git a/spec/support/shared_examples/requests/api/conan_packages_shared_examples.rb b/spec/support/shared_examples/requests/api/conan_packages_shared_examples.rb index db06e4ce44cbb34d50f3fb9e86bd38e0772cbad8..3c8fb63199987f5650f2a092314f42ad7c10c931 100644 --- a/spec/support/shared_examples/requests/api/conan_packages_shared_examples.rb +++ b/spec/support/shared_examples/requests/api/conan_packages_shared_examples.rb @@ -63,7 +63,10 @@ end it { expect(response).to have_gitlab_http_status(:bad_request) } - it { expect(json_response['message']).to eq('400 Bad request - Search term length must be less than 200 characters.') } + + it 'returns an error message' do + expect(json_response['message']).to eq('400 Bad request - Search term length must be less than 200 characters.') + end end context 'returns error when search term has too many wildcards' do @@ -74,7 +77,10 @@ end it { expect(response).to have_gitlab_http_status(:bad_request) } - it { expect(json_response['message']).to eq('400 Bad request - Too many wildcards in search term. Maximum is 5.') } + + it 'returns an error message' do + expect(json_response['message']).to eq('400 Bad request - Too many wildcards in search term. Maximum is 5.') + end end end @@ -365,7 +371,8 @@ RSpec.shared_examples 'empty recipe for not found package' do context 'with invalid recipe url' do let(:recipe_path) do - 'aa/bb/%{project}/ccc' % { project: ::Packages::Conan::Metadatum.package_username_from(full_path: project.full_path) } + format('aa/bb/%{project}/ccc', + project: ::Packages::Conan::Metadatum.package_username_from(full_path: project.full_path)) end let(:presenter) { double('::Packages::Conan::PackagePresenter') } @@ -384,8 +391,7 @@ project, any_args ).and_return(presenter) - allow(presenter).to receive(:recipe_snapshot) { {} } - allow(presenter).to receive(:package_snapshot) { {} } + allow(presenter).to receive_messages(recipe_snapshot: {}, package_snapshot: {}) subject @@ -412,13 +418,14 @@ RSpec.shared_examples 'recipe download_urls' do let(:recipe_path) { package.conan_recipe_path } + let(:base_url_with_recipe_path) { "#{url_prefix}/packages/conan/v1/files/#{package.conan_recipe_path}" } it_behaves_like 'enforcing read_packages job token policy' it 'returns the download_urls for the recipe files' do expected_response = { - 'conanfile.py' => "#{url_prefix}/packages/conan/v1/files/#{package.conan_recipe_path}/0/export/conanfile.py", - 'conanmanifest.txt' => "#{url_prefix}/packages/conan/v1/files/#{package.conan_recipe_path}/0/export/conanmanifest.txt" + 'conanfile.py' => "#{base_url_with_recipe_path}/0/export/conanfile.py", + 'conanmanifest.txt' => "#{base_url_with_recipe_path}/0/export/conanmanifest.txt" } subject @@ -431,14 +438,15 @@ RSpec.shared_examples 'package download_urls' do let(:recipe_path) { package.conan_recipe_path } + let(:base_url_with_recipe_path) { "#{url_prefix}/packages/conan/v1/files/#{package.conan_recipe_path}" } it_behaves_like 'enforcing read_packages job token policy' it 'returns the download_urls for the package files' do expected_response = { - 'conaninfo.txt' => "#{url_prefix}/packages/conan/v1/files/#{package.conan_recipe_path}/0/package/#{conan_package_reference}/0/conaninfo.txt", - 'conanmanifest.txt' => "#{url_prefix}/packages/conan/v1/files/#{package.conan_recipe_path}/0/package/#{conan_package_reference}/0/conanmanifest.txt", - 'conan_package.tgz' => "#{url_prefix}/packages/conan/v1/files/#{package.conan_recipe_path}/0/package/#{conan_package_reference}/0/conan_package.tgz" + 'conaninfo.txt' => "#{base_url_with_recipe_path}/0/package/#{conan_package_reference}/0/conaninfo.txt", + 'conanmanifest.txt' => "#{base_url_with_recipe_path}/0/package/#{conan_package_reference}/0/conanmanifest.txt", + 'conan_package.tgz' => "#{base_url_with_recipe_path}/0/package/#{conan_package_reference}/0/conan_package.tgz" } subject @@ -537,6 +545,7 @@ RSpec.shared_examples 'recipe upload_urls endpoint' do let(:recipe_path) { package.conan_recipe_path } + let(:base_url_with_recipe_path) { "#{url_prefix}/packages/conan/v1/files/#{package.conan_recipe_path}" } let(:params) do { 'conanfile.py': 24, @@ -553,8 +562,8 @@ subject expected_response = { - 'conanfile.py': "#{url_prefix}/packages/conan/v1/files/#{package.conan_recipe_path}/0/export/conanfile.py", - 'conanmanifest.txt': "#{url_prefix}/packages/conan/v1/files/#{package.conan_recipe_path}/0/export/conanmanifest.txt" + 'conanfile.py': "#{base_url_with_recipe_path}/0/export/conanfile.py", + 'conanmanifest.txt': "#{base_url_with_recipe_path}/0/export/conanmanifest.txt" } expect(response.body).to eq(expected_response.to_json) @@ -571,9 +580,9 @@ subject expected_response = { - 'conan_sources.tgz': "#{url_prefix}/packages/conan/v1/files/#{package.conan_recipe_path}/0/export/conan_sources.tgz", - 'conan_export.tgz': "#{url_prefix}/packages/conan/v1/files/#{package.conan_recipe_path}/0/export/conan_export.tgz", - 'conanmanifest.txt': "#{url_prefix}/packages/conan/v1/files/#{package.conan_recipe_path}/0/export/conanmanifest.txt" + 'conan_sources.tgz': "#{base_url_with_recipe_path}/0/export/conan_sources.tgz", + 'conan_export.tgz': "#{base_url_with_recipe_path}/0/export/conan_export.tgz", + 'conanmanifest.txt': "#{base_url_with_recipe_path}/0/export/conanmanifest.txt" } expect(response.body).to eq(expected_response.to_json) @@ -590,7 +599,7 @@ subject expected_response = { - 'conanmanifest.txt': "#{url_prefix}/packages/conan/v1/files/#{package.conan_recipe_path}/0/export/conanmanifest.txt" + 'conanmanifest.txt': "#{base_url_with_recipe_path}/0/export/conanmanifest.txt" } expect(response.body).to eq(expected_response.to_json) @@ -600,6 +609,7 @@ RSpec.shared_examples 'package upload_urls endpoint' do let(:recipe_path) { package.conan_recipe_path } + let(:base_url_with_recipe_path) { "#{url_prefix}/packages/conan/v1/files/#{package.conan_recipe_path}" } let(:params) do { 'conaninfo.txt': 24, @@ -615,9 +625,9 @@ it 'returns a set of upload urls for the files requested' do expected_response = { - 'conaninfo.txt': "#{url_prefix}/packages/conan/v1/files/#{package.conan_recipe_path}/0/package/123456789/0/conaninfo.txt", - 'conanmanifest.txt': "#{url_prefix}/packages/conan/v1/files/#{package.conan_recipe_path}/0/package/123456789/0/conanmanifest.txt", - 'conan_package.tgz': "#{url_prefix}/packages/conan/v1/files/#{package.conan_recipe_path}/0/package/123456789/0/conan_package.tgz" + 'conaninfo.txt': "#{base_url_with_recipe_path}/0/package/123456789/0/conaninfo.txt", + 'conanmanifest.txt': "#{base_url_with_recipe_path}/0/package/123456789/0/conanmanifest.txt", + 'conan_package.tgz': "#{base_url_with_recipe_path}/0/package/123456789/0/conan_package.tgz" } subject @@ -633,7 +643,7 @@ it 'returns upload urls only for the valid requested files' do expected_response = { - 'conaninfo.txt': "#{url_prefix}/packages/conan/v1/files/#{package.conan_recipe_path}/0/package/123456789/0/conaninfo.txt" + 'conaninfo.txt': "#{base_url_with_recipe_path}/0/package/123456789/0/conaninfo.txt" } subject @@ -1010,10 +1020,13 @@ end context 'with existing package' do - let!(:existing_package) { create(:conan_package, name: recipe_path_name, version: recipe_path_version, project: project) } + let!(:existing_package) do + create(:conan_package, name: recipe_path_name, version: recipe_path_version, project: project) + end before do - existing_package.conan_metadatum.update!(package_username: recipe_path_username, package_channel: recipe_path_channel) + existing_package.conan_metadatum.update!(package_username: recipe_path_username, + package_channel: recipe_path_channel) end it 'does not create a new package' do @@ -1044,7 +1057,7 @@ end let(:tmp_object) do - fog_connection.directories.new(key: 'packages').files.create( # rubocop:disable Rails/SaveBang + fog_connection.directories.new(key: 'packages').files.create( # rubocop:disable Rails/SaveBang -- Method #create! is undefined for class Fog::AWS::Storage::Files key: "tmp/uploads/#{file_name}", body: 'content' )