diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-11-18 13:16:36 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-11-18 13:16:36 +0000 |
commit | 311b0269b4eb9839fa63f80c8d7a58f32b8138a0 (patch) | |
tree | 07e7870bca8aed6d61fdcc810731c50d2c40af47 /spec/support/shared_contexts | |
parent | 27909cef6c4170ed9205afa7426b8d3de47cbb0c (diff) | |
download | gitlab-ce-311b0269b4eb9839fa63f80c8d7a58f32b8138a0.tar.gz |
Add latest changes from gitlab-org/gitlab@14-5-stable-eev14.5.0-rc42
Diffstat (limited to 'spec/support/shared_contexts')
8 files changed, 166 insertions, 42 deletions
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 645ea742f07..9ac3d4a04f9 100644 --- a/spec/support/shared_contexts/graphql/requests/packages_shared_context.rb +++ b/spec/support/shared_contexts/graphql/requests/packages_shared_context.rb @@ -10,6 +10,7 @@ RSpec.shared_context 'package details setup' do let(:excluded) { %w[metadata apiFuzzingCiConfiguration pipeline packageFiles] } let(:package_files) { all_graphql_fields_for('PackageFile') } let(:dependency_links) { all_graphql_fields_for('PackageDependencyLink') } + let(:pipelines) { all_graphql_fields_for('Pipeline', max_depth: 1) } let(:user) { project.owner } let(:package_details) { graphql_data_at(:package) } let(:metadata_response) { graphql_data_at(:package, :metadata) } @@ -34,6 +35,11 @@ RSpec.shared_context 'package details setup' do #{dependency_links} } } + pipelines { + nodes { + #{pipelines} + } + } FIELDS end end diff --git a/spec/support/shared_contexts/lib/gitlab/database/background_migration_job_shared_context.rb b/spec/support/shared_contexts/lib/gitlab/database/background_migration_job_shared_context.rb deleted file mode 100644 index 382eb796f8e..00000000000 --- a/spec/support/shared_contexts/lib/gitlab/database/background_migration_job_shared_context.rb +++ /dev/null @@ -1,21 +0,0 @@ -# frozen_string_literal: true - -RSpec.shared_context 'background migration job class' do - let!(:job_class_name) { 'TestJob' } - let!(:job_class) { Class.new } - let!(:job_perform_method) do - ->(*arguments) do - Gitlab::Database::BackgroundMigrationJob.mark_all_as_succeeded( - # Value is 'TestJob' defined by :job_class_name in the let! above. - # Scoping prohibits us from directly referencing job_class_name. - RSpec.current_example.example_group_instance.job_class_name, - arguments - ) - end - end - - before do - job_class.define_method(:perform, job_perform_method) - expect(Gitlab::BackgroundMigration).to receive(:migration_class_for).with(job_class_name).at_least(:once) { job_class } - end -end diff --git a/spec/support/shared_contexts/navbar_structure_context.rb b/spec/support/shared_contexts/navbar_structure_context.rb index 2abc52fce85..bcc6abdc308 100644 --- a/spec/support/shared_contexts/navbar_structure_context.rb +++ b/spec/support/shared_contexts/navbar_structure_context.rb @@ -119,7 +119,7 @@ RSpec.shared_context 'project navbar structure' do _('Repository'), _('CI/CD'), _('Monitor'), - (s_('UsageQuota|Usage Quotas') if Feature.enabled?(:project_storage_ui, default_enabled: :yaml)) + s_('UsageQuota|Usage Quotas') ] } ].compact diff --git a/spec/support/shared_contexts/policies/project_policy_shared_context.rb b/spec/support/shared_contexts/policies/project_policy_shared_context.rb index d7e4864cb08..8a90f887381 100644 --- a/spec/support/shared_contexts/policies/project_policy_shared_context.rb +++ b/spec/support/shared_contexts/policies/project_policy_shared_context.rb @@ -15,7 +15,7 @@ RSpec.shared_context 'ProjectPolicy context' do let(:base_guest_permissions) do %i[ - award_emoji create_issue create_incident create_merge_request_in create_note + award_emoji create_issue create_merge_request_in create_note create_project read_issue_board read_issue read_issue_iid read_issue_link read_label read_issue_board_list read_milestone read_note read_project read_project_for_iids read_project_member read_release read_snippet @@ -25,10 +25,11 @@ RSpec.shared_context 'ProjectPolicy context' do let(:base_reporter_permissions) do %i[ - admin_issue admin_issue_link admin_label admin_issue_board_list create_snippet - daily_statistics download_code download_wiki_code fork_project metrics_dashboard - read_build read_commit_status read_confidential_issues - read_container_image read_deployment read_environment read_merge_request + admin_issue admin_issue_link admin_label admin_issue_board_list + create_snippet create_incident daily_statistics download_code + download_wiki_code fork_project metrics_dashboard read_build + read_commit_status read_confidential_issues read_container_image + read_deployment read_environment read_merge_request read_metrics_dashboard_annotation read_pipeline read_prometheus read_sentry_issue update_issue ] diff --git a/spec/support/shared_contexts/requests/api/debian_repository_shared_context.rb b/spec/support/shared_contexts/requests/api/debian_repository_shared_context.rb new file mode 100644 index 00000000000..95b8b7ed9f8 --- /dev/null +++ b/spec/support/shared_contexts/requests/api/debian_repository_shared_context.rb @@ -0,0 +1,120 @@ +# frozen_string_literal: true + +RSpec.shared_context 'Debian repository shared context' do |container_type, can_freeze| + include_context 'workhorse headers' + + before do + stub_feature_flags(debian_packages: true, debian_group_packages: true) + end + + let_it_be(:private_container, freeze: can_freeze) { create(container_type, :private) } + let_it_be(:public_container, freeze: can_freeze) { create(container_type, :public) } + let_it_be(:user, freeze: true) { create(:user) } + let_it_be(:personal_access_token, freeze: true) { create(:personal_access_token, user: user) } + + let_it_be(:private_distribution, freeze: true) { create("debian_#{container_type}_distribution", :with_file, container: private_container, codename: 'existing-codename') } + let_it_be(:private_distribution_key, freeze: true) { create("debian_#{container_type}_distribution_key", distribution: private_distribution) } + let_it_be(:private_component, freeze: true) { create("debian_#{container_type}_component", distribution: private_distribution, name: 'existing-component') } + let_it_be(:private_architecture_all, freeze: true) { create("debian_#{container_type}_architecture", distribution: private_distribution, name: 'all') } + let_it_be(:private_architecture, freeze: true) { create("debian_#{container_type}_architecture", distribution: private_distribution, name: 'existing-arch') } + let_it_be(:private_component_file) { create("debian_#{container_type}_component_file", component: private_component, architecture: private_architecture) } + + let_it_be(:public_distribution, freeze: true) { create("debian_#{container_type}_distribution", :with_file, container: public_container, codename: 'existing-codename') } + let_it_be(:public_distribution_key, freeze: true) { create("debian_#{container_type}_distribution_key", distribution: public_distribution) } + let_it_be(:public_component, freeze: true) { create("debian_#{container_type}_component", distribution: public_distribution, name: 'existing-component') } + let_it_be(:public_architecture_all, freeze: true) { create("debian_#{container_type}_architecture", distribution: public_distribution, name: 'all') } + let_it_be(:public_architecture, freeze: true) { create("debian_#{container_type}_architecture", distribution: public_distribution, name: 'existing-arch') } + let_it_be(:public_component_file) { create("debian_#{container_type}_component_file", component: public_component, architecture: public_architecture) } + + if container_type == :group + let_it_be(:private_project) { create(:project, :private, group: private_container) } + let_it_be(:public_project) { create(:project, :public, group: public_container) } + let_it_be(:private_project_distribution) { create(:debian_project_distribution, container: private_project, codename: 'existing-codename') } + let_it_be(:public_project_distribution) { create(:debian_project_distribution, container: public_project, codename: 'existing-codename') } + + let(:project) { { private: private_project, public: public_project }[visibility_level] } + else + let_it_be(:private_project) { private_container } + let_it_be(:public_project) { public_container } + let_it_be(:private_project_distribution) { private_distribution } + let_it_be(:public_project_distribution) { public_distribution } + end + + let_it_be(:private_package) { create(:debian_package, project: private_project, published_in: private_project_distribution) } + let_it_be(:public_package) { create(:debian_package, project: public_project, published_in: public_project_distribution) } + + let(:visibility_level) { :public } + + let(:distribution) { { private: private_distribution, public: public_distribution }[visibility_level] } + let(:architecture) { { private: private_architecture, public: public_architecture }[visibility_level] } + let(:component) { { private: private_component, public: public_component }[visibility_level] } + let(:component_file) { { private: private_component_file, public: public_component_file }[visibility_level] } + let(:package) { { private: private_package, public: public_package }[visibility_level] } + let(:letter) { package.name[0..2] == 'lib' ? package.name[0..3] : package.name[0] } + + let(:method) { :get } + + let(:workhorse_params) do + if method == :put + file_upload = fixture_file_upload("spec/fixtures/packages/debian/#{file_name}") + { file: file_upload } + else + {} + end + end + + let(:api_params) { workhorse_params } + + let(:auth_headers) { {} } + let(:wh_headers) do + if method == :put + workhorse_headers + else + {} + end + end + + let(:headers) { auth_headers.merge(wh_headers) } + + let(:send_rewritten_field) { true } + + subject do + if method == :put + workhorse_finalize( + api(url), + method: method, + file_key: :file, + params: api_params, + headers: headers, + send_rewritten_field: send_rewritten_field + ) + else + send method, api(url), headers: headers, params: api_params + end + end +end + +RSpec.shared_context 'Debian repository auth headers' do |user_type, auth_method = :private_token| + let(:token) { user_type == :invalid_token ? 'wrong' : personal_access_token.token } + + let(:auth_headers) do + if user_type == :anonymous + {} + elsif auth_method == :private_token + { 'Private-Token' => token } + else + basic_auth_header(user.username, token) + end + end +end + +RSpec.shared_context 'Debian repository access' do |visibility_level, user_type, auth_method| + include_context 'Debian repository auth headers', user_type, auth_method do + let(:containers) { { private: private_container, public: public_container } } + let(:container) { containers[visibility_level] } + + before do + container.send("add_#{user_type}", user) if user_type != :anonymous && user_type != :not_a_member && user_type != :invalid_token + end + end +end diff --git a/spec/support/shared_contexts/services/projects/container_repository/delete_tags_service_shared_context.rb b/spec/support/shared_contexts/services/projects/container_repository/delete_tags_service_shared_context.rb index 80f011f622b..21be989d697 100644 --- a/spec/support/shared_contexts/services/projects/container_repository/delete_tags_service_shared_context.rb +++ b/spec/support/shared_contexts/services/projects/container_repository/delete_tags_service_shared_context.rb @@ -31,14 +31,14 @@ RSpec.shared_context 'container repository delete tags service shared context' d end end - def stub_put_manifest_request(tag, status = 200, headers = { 'docker-content-digest' => 'sha256:dummy' }) + def stub_put_manifest_request(tag, status = 200, headers = { DependencyProxy::Manifest::DIGEST_HEADER => 'sha256:dummy' }) stub_request(:put, "http://registry.gitlab/v2/#{repository.path}/manifests/#{tag}") .to_return(status: status, body: '', headers: headers) end def stub_tag_digest(tag, digest) stub_request(:head, "http://registry.gitlab/v2/#{repository.path}/manifests/#{tag}") - .to_return(status: 200, body: '', headers: { 'docker-content-digest' => digest }) + .to_return(status: 200, body: '', headers: { DependencyProxy::Manifest::DIGEST_HEADER => digest }) end def stub_digest_config(digest, created_at) diff --git a/spec/support/shared_contexts/services/service_ping/stubbed_service_ping_metrics_definitions_shared_context.rb b/spec/support/shared_contexts/services/service_ping/stubbed_service_ping_metrics_definitions_shared_context.rb index 2b810e790f0..e1d864213b5 100644 --- a/spec/support/shared_contexts/services/service_ping/stubbed_service_ping_metrics_definitions_shared_context.rb +++ b/spec/support/shared_contexts/services/service_ping/stubbed_service_ping_metrics_definitions_shared_context.rb @@ -38,6 +38,11 @@ RSpec.shared_context 'stubbed service ping metrics definitions' do ) end + after do |example| + Gitlab::Usage::Metric.instance_variable_set(:@all, nil) + Gitlab::Usage::MetricDefinition.instance_variable_set(:@all, nil) + end + def metric_attributes(key_path, category, value_type = 'string') { 'key_path' => key_path, diff --git a/spec/support/shared_contexts/url_shared_context.rb b/spec/support/shared_contexts/url_shared_context.rb index f3d227b6e2b..da1d6e0049c 100644 --- a/spec/support/shared_contexts/url_shared_context.rb +++ b/spec/support/shared_contexts/url_shared_context.rb @@ -1,19 +1,32 @@ # frozen_string_literal: true +RSpec.shared_context 'valid urls with CRLF' do + let(:valid_urls_with_CRLF) do + [ + "http://example.com/pa%0dth", + "http://example.com/pa%0ath", + "http://example.com/pa%0d%0th", + "http://example.com/pa%0D%0Ath", + "http://gitlab.com/path?param=foo%0Abar", + "https://gitlab.com/path?param=foo%0Dbar", + "http://example.org:1024/path?param=foo%0D%0Abar", + "https://storage.googleapis.com/bucket/import_export_upload/import_file/57265/express.tar.gz?GoogleAccessId=hello@example.org&Signature=ABCD%0AEFGHik&Expires=1634663304" + ] + end +end + RSpec.shared_context 'invalid urls' do let(:urls_with_CRLF) do - ["http://127.0.0.1:333/pa\rth", - "http://127.0.0.1:333/pa\nth", - "http://127.0a.0.1:333/pa\r\nth", - "http://127.0.0.1:333/path?param=foo\r\nbar", - "http://127.0.0.1:333/path?param=foo\rbar", - "http://127.0.0.1:333/path?param=foo\nbar", - "http://127.0.0.1:333/pa%0dth", - "http://127.0.0.1:333/pa%0ath", - "http://127.0a.0.1:333/pa%0d%0th", - "http://127.0.0.1:333/pa%0D%0Ath", - "http://127.0.0.1:333/path?param=foo%0Abar", - "http://127.0.0.1:333/path?param=foo%0Dbar", - "http://127.0.0.1:333/path?param=foo%0D%0Abar"] + [ + "git://example.com/pa%0dth", + "git://example.com/pa%0ath", + "git://example.com/pa%0d%0th", + "http://example.com/pa\rth", + "http://example.com/pa\nth", + "http://example.com/pa\r\nth", + "http://example.com/path?param=foo\r\nbar", + "http://example.com/path?param=foo\rbar", + "http://example.com/path?param=foo\nbar" + ] end end |