Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/support/shared_examples/requests')
-rw-r--r--spec/support/shared_examples/requests/api/composer_packages_shared_examples.rb102
-rw-r--r--spec/support/shared_examples/requests/api/graphql/issue_list_shared_examples.rb22
-rw-r--r--spec/support/shared_examples/requests/api/npm_packages_shared_examples.rb52
-rw-r--r--spec/support/shared_examples/requests/api/nuget_packages_shared_examples.rb23
-rw-r--r--spec/support/shared_examples/requests/organizations_shared_examples.rb35
5 files changed, 128 insertions, 106 deletions
diff --git a/spec/support/shared_examples/requests/api/composer_packages_shared_examples.rb b/spec/support/shared_examples/requests/api/composer_packages_shared_examples.rb
index 6a77de4266f..7e0efd05dd7 100644
--- a/spec/support/shared_examples/requests/api/composer_packages_shared_examples.rb
+++ b/spec/support/shared_examples/requests/api/composer_packages_shared_examples.rb
@@ -1,42 +1,45 @@
# frozen_string_literal: true
-RSpec.shared_context 'Composer user type' do |user_type, add_member|
+RSpec.shared_context 'Composer user type' do |member_role: nil|
before do
- group.send("add_#{user_type}", user) if add_member && user_type != :anonymous
- project.send("add_#{user_type}", user) if add_member && user_type != :anonymous
+ if member_role
+ group.send("add_#{member_role}", user)
+ project.send("add_#{member_role}", user)
+ end
end
end
-RSpec.shared_examples 'Composer package index with version' do |schema_path|
+RSpec.shared_examples 'Composer package index with version' do |schema_path, expected_status|
it 'returns the package index' do
subject
- expect(response).to have_gitlab_http_status(status)
+ expect(response).to have_gitlab_http_status(expected_status)
- if status == :success
+ if expected_status == :success
expect(response).to match_response_schema(schema_path)
expect(json_response).to eq presenter.root
end
end
end
-RSpec.shared_examples 'Composer package index' do |user_type, status, add_member, include_package|
- include_context 'Composer user type', user_type, add_member do
- let(:expected_packages) { include_package == :include_package ? [package] : [] }
- let(:presenter) { ::Packages::Composer::PackagesPresenter.new(group, expected_packages ) }
+RSpec.shared_examples 'Composer package index' do |member_role:, expected_status:, package_returned:|
+ include_context 'Composer user type', member_role: member_role do
+ let_it_be(:expected_packages) { package_returned ? [package] : [] }
+ let_it_be(:presenter) { ::Packages::Composer::PackagesPresenter.new(group, expected_packages ) }
- it_behaves_like 'Composer package index with version', 'public_api/v4/packages/composer/index'
+ it_behaves_like 'Composer package index with version', 'public_api/v4/packages/composer/index', expected_status
context 'with version 2' do
+ let_it_be(:presenter) { ::Packages::Composer::PackagesPresenter.new(group, expected_packages, true ) }
let(:headers) { super().merge('User-Agent' => 'Composer/2.0.9 (Darwin; 19.6.0; PHP 7.4.8; cURL 7.71.1)') }
- it_behaves_like 'Composer package index with version', 'public_api/v4/packages/composer/index_v2'
+ it_behaves_like 'Composer package index with version', 'public_api/v4/packages/composer/index_v2', expected_status
end
end
end
-RSpec.shared_examples 'Composer empty provider index' do |user_type, status, add_member = true|
- include_context 'Composer user type', user_type, add_member do
+RSpec.shared_examples 'Composer empty provider index' do |member_role:, expected_status:|
+ include_context 'Composer user type', member_role: member_role do
it 'returns the package index' do
subject
@@ -47,24 +50,24 @@ RSpec.shared_examples 'Composer empty provider index' do |user_type, status, add
end
end
-RSpec.shared_examples 'Composer provider index' do |user_type, status, add_member = true|
- include_context 'Composer user type', user_type, add_member do
+RSpec.shared_examples 'Composer provider index' do |member_role:, expected_status:|
+ include_context 'Composer user type', member_role: member_role do
it 'returns the package index' do
subject
- expect(response).to have_gitlab_http_status(status)
+ expect(response).to have_gitlab_http_status(expected_status)
expect(response).to match_response_schema('public_api/v4/packages/composer/provider')
expect(json_response['providers']).to include(package.name)
end
end
end
-RSpec.shared_examples 'Composer package api request' do |user_type, status, add_member = true|
- include_context 'Composer user type', user_type, add_member do
+RSpec.shared_examples 'Composer package api request' do |member_role:, expected_status:|
+ include_context 'Composer user type', member_role: member_role do
it 'returns the package index' do
subject
- expect(response).to have_gitlab_http_status(status)
+ expect(response).to have_gitlab_http_status(expected_status)
expect(response).to match_response_schema('public_api/v4/packages/composer/package')
expect(json_response['packages']).to include(package.name)
expect(json_response['packages'][package.name]).to include(package.version)
@@ -72,18 +75,13 @@ RSpec.shared_examples 'Composer package api request' do |user_type, status, add_
end
end
-RSpec.shared_examples 'Composer package creation' do |user_type, status, add_member = true|
- context "for user type #{user_type}" do
- before do
- group.send("add_#{user_type}", user) if add_member && user_type != :anonymous
- project.send("add_#{user_type}", user) if add_member && user_type != :anonymous
- end
-
+RSpec.shared_examples 'Composer package creation' do |expected_status:, member_role: nil|
+ include_context 'Composer user type', member_role: member_role do
it 'creates package files' do
expect { subject }
.to change { project.packages.composer.count }.by(1)
- expect(response).to have_gitlab_http_status(status)
+ expect(response).to have_gitlab_http_status(expected_status)
end
it_behaves_like 'a package tracking event', described_class.name, 'push_package'
@@ -100,42 +98,38 @@ RSpec.shared_examples 'Composer package creation' do |user_type, status, add_mem
end
end
-RSpec.shared_examples 'process Composer api request' do |user_type, status, add_member = true|
- context "for user type #{user_type}" do
- before do
- group.send("add_#{user_type}", user) if add_member && user_type != :anonymous
- project.send("add_#{user_type}", user) if add_member && user_type != :anonymous
- end
-
- it_behaves_like 'returning response status', status
- it_behaves_like 'bumping the package last downloaded at field' if status == :success
+RSpec.shared_examples 'process Composer api request' do |expected_status:, member_role: nil, **extra|
+ include_context 'Composer user type', member_role: member_role do
+ it_behaves_like 'returning response status', expected_status
+ it_behaves_like 'bumping the package last downloaded at field' if expected_status == :success
end
end
-RSpec.shared_context 'Composer auth headers' do |user_role, user_token, auth_method = :token|
- let(:token) { user_token ? personal_access_token.token : 'wrong' }
-
+RSpec.shared_context 'Composer auth headers' do |token_type:, valid_token:, auth_method: :token|
let(:headers) do
- if user_role == :anonymous
- {}
- elsif auth_method == :token
- { 'Private-Token' => token }
+ if token_type == :user
+ token = valid_token ? personal_access_token.token : 'wrong'
+ auth_method == :token ? { 'Private-Token' => token } : basic_auth_header(user.username, token)
+ elsif token_type == :job && valid_token
+ auth_method == :token ? { 'Job-Token' => job.token } : job_basic_auth_header(job)
else
- basic_auth_header(user.username, token)
+ {} # Anonymous user
end
end
end
-RSpec.shared_context 'Composer api project access' do |project_visibility_level, user_role, user_token, auth_method|
- include_context 'Composer auth headers', user_role, user_token, auth_method do
+RSpec.shared_context 'Composer api project access' do |auth_method:, project_visibility_level:, token_type:,
+ valid_token: true|
+ include_context 'Composer auth headers', auth_method: auth_method, token_type: token_type, valid_token: valid_token do
before do
project.update!(visibility_level: Gitlab::VisibilityLevel.const_get(project_visibility_level, false))
end
end
end
-RSpec.shared_context 'Composer api group access' do |project_visibility_level, user_role, user_token|
- include_context 'Composer auth headers', user_role, user_token do
+RSpec.shared_context 'Composer api group access' do |auth_method:, project_visibility_level:, token_type:,
+ valid_token: true|
+ include_context 'Composer auth headers', auth_method: auth_method, token_type: token_type, valid_token: valid_token do
before do
project.update!(visibility_level: Gitlab::VisibilityLevel.const_get(project_visibility_level, false))
group.update!(visibility_level: Gitlab::VisibilityLevel.const_get(project_visibility_level, false))
@@ -148,13 +142,13 @@ RSpec.shared_examples 'rejects Composer access with unknown group id' do
let(:group) { double(id: non_existing_record_id) }
context 'as anonymous' do
- it_behaves_like 'process Composer api request', :anonymous, :not_found
+ it_behaves_like 'process Composer api request', expected_status: :unauthorized
end
context 'as authenticated user' do
subject { get api(url), headers: basic_auth_header(user.username, personal_access_token.token) }
- it_behaves_like 'process Composer api request', :anonymous, :not_found
+ it_behaves_like 'process Composer api request', expected_status: :not_found
end
end
end
@@ -164,13 +158,13 @@ RSpec.shared_examples 'rejects Composer access with unknown project id' do
let(:project) { double(id: non_existing_record_id) }
context 'as anonymous' do
- it_behaves_like 'process Composer api request', :anonymous, :unauthorized
+ it_behaves_like 'process Composer api request', expected_status: :unauthorized
end
context 'as authenticated user' do
subject { get api(url), params: params, headers: basic_auth_header(user.username, personal_access_token.token) }
- it_behaves_like 'process Composer api request', :anonymous, :not_found
+ it_behaves_like 'process Composer api request', expected_status: :not_found
end
end
end
@@ -191,7 +185,7 @@ RSpec.shared_examples 'Composer access with deploy tokens' do
context 'invalid token' do
let(:headers) { basic_auth_header(deploy_token.username, 'bar') }
- it_behaves_like 'returning response status', :not_found
+ it_behaves_like 'returning response status', :unauthorized
end
end
end
diff --git a/spec/support/shared_examples/requests/api/graphql/issue_list_shared_examples.rb b/spec/support/shared_examples/requests/api/graphql/issue_list_shared_examples.rb
index 04f340fef37..c6e4aba6968 100644
--- a/spec/support/shared_examples/requests/api/graphql/issue_list_shared_examples.rb
+++ b/spec/support/shared_examples/requests/api/graphql/issue_list_shared_examples.rb
@@ -408,28 +408,6 @@ RSpec.shared_examples 'graphql issue list request spec' do
include_examples 'N+1 query check'
end
- context 'when requesting participants' do
- let(:search_params) { { iids: [issue_a.iid.to_s, issue_c.iid.to_s] } }
- let(:requested_fields) { 'participants { nodes { name } }' }
-
- before do
- create(:award_emoji, :upvote, awardable: issue_a)
- create(:award_emoji, :upvote, awardable: issue_b)
- create(:award_emoji, :upvote, awardable: issue_c)
-
- note_with_emoji_a = create(:note_on_issue, noteable: issue_a, project: issue_a.project)
- note_with_emoji_b = create(:note_on_issue, noteable: issue_b, project: issue_b.project)
- note_with_emoji_c = create(:note_on_issue, noteable: issue_c, project: issue_c.project)
-
- create(:award_emoji, :upvote, awardable: note_with_emoji_a)
- create(:award_emoji, :upvote, awardable: note_with_emoji_b)
- create(:award_emoji, :upvote, awardable: note_with_emoji_c)
- end
-
- # Executes 3 extra queries to fetch participant_attrs
- include_examples 'N+1 query check', threshold: 3
- end
-
context 'when requesting labels', :use_sql_query_cache do
let(:requested_fields) { 'labels { nodes { id } }' }
let(:extra_iid_for_second_query) { same_project_issue2.iid.to_s }
diff --git a/spec/support/shared_examples/requests/api/npm_packages_shared_examples.rb b/spec/support/shared_examples/requests/api/npm_packages_shared_examples.rb
index 5f043cdd996..a4091d6bceb 100644
--- a/spec/support/shared_examples/requests/api/npm_packages_shared_examples.rb
+++ b/spec/support/shared_examples/requests/api/npm_packages_shared_examples.rb
@@ -68,22 +68,22 @@ RSpec.shared_examples 'handling get metadata requests' do |scope: :project|
nil | :unscoped | false | :public | nil | :accept | :ok
nil | :non_existing | true | :public | nil | :redirect | :redirected
nil | :non_existing | false | :public | nil | :reject | :not_found
- nil | :scoped_naming_convention | true | :private | nil | :reject | :not_found
- nil | :scoped_naming_convention | false | :private | nil | :reject | :not_found
- nil | :scoped_no_naming_convention | true | :private | nil | :reject | :not_found
- nil | :scoped_no_naming_convention | false | :private | nil | :reject | :not_found
- nil | :unscoped | true | :private | nil | :reject | :not_found
- nil | :unscoped | false | :private | nil | :reject | :not_found
+ nil | :scoped_naming_convention | true | :private | nil | :reject | :unauthorized
+ nil | :scoped_naming_convention | false | :private | nil | :reject | :unauthorized
+ nil | :scoped_no_naming_convention | true | :private | nil | :reject | :unauthorized
+ nil | :scoped_no_naming_convention | false | :private | nil | :reject | :unauthorized
+ nil | :unscoped | true | :private | nil | :reject | :unauthorized
+ nil | :unscoped | false | :private | nil | :reject | :unauthorized
nil | :non_existing | true | :private | nil | :redirect | :redirected
- nil | :non_existing | false | :private | nil | :reject | :not_found
- nil | :scoped_naming_convention | true | :internal | nil | :reject | :not_found
- nil | :scoped_naming_convention | false | :internal | nil | :reject | :not_found
- nil | :scoped_no_naming_convention | true | :internal | nil | :reject | :not_found
- nil | :scoped_no_naming_convention | false | :internal | nil | :reject | :not_found
- nil | :unscoped | true | :internal | nil | :reject | :not_found
- nil | :unscoped | false | :internal | nil | :reject | :not_found
+ nil | :non_existing | false | :private | nil | :reject | :unauthorized
+ nil | :scoped_naming_convention | true | :internal | nil | :reject | :unauthorized
+ nil | :scoped_naming_convention | false | :internal | nil | :reject | :unauthorized
+ nil | :scoped_no_naming_convention | true | :internal | nil | :reject | :unauthorized
+ nil | :scoped_no_naming_convention | false | :internal | nil | :reject | :unauthorized
+ nil | :unscoped | true | :internal | nil | :reject | :unauthorized
+ nil | :unscoped | false | :internal | nil | :reject | :unauthorized
nil | :non_existing | true | :internal | nil | :redirect | :redirected
- nil | :non_existing | false | :internal | nil | :reject | :not_found
+ nil | :non_existing | false | :internal | nil | :reject | :unauthorized
:oauth | :scoped_naming_convention | true | :public | :guest | :accept | :ok
:oauth | :scoped_naming_convention | true | :public | :reporter | :accept | :ok
@@ -280,11 +280,15 @@ RSpec.shared_examples 'handling get metadata requests' do |scope: :project|
end
end
- if (scope == :group && params[:package_name_type] == :non_existing) &&
- (!params[:request_forward] || (!params[:auth] && params[:request_forward] && params[:visibility] != :public))
+ if scope == :group && params[:package_name_type] == :non_existing && !params[:request_forward] && params[:auth]
status = :not_found
end
+ if scope == :group && params[:package_name_type] == :non_existing && params[:request_forward] && !params[:auth] && params[:visibility] != :public
+ example_name = 'reject metadata request'
+ status = :unauthorized
+ end
+
# Check the error message for :not_found
example_name = 'returning response status with error' if status == :not_found
@@ -522,14 +526,14 @@ RSpec.shared_examples 'handling get dist tags requests' do |scope: :project|
nil | :scoped_no_naming_convention | :public | nil | :accept | :ok
nil | :unscoped | :public | nil | :accept | :ok
nil | :non_existing | :public | nil | :reject | :not_found
- nil | :scoped_naming_convention | :private | nil | :reject | :not_found
- nil | :scoped_no_naming_convention | :private | nil | :reject | :not_found
- nil | :unscoped | :private | nil | :reject | :not_found
- nil | :non_existing | :private | nil | :reject | :not_found
- nil | :scoped_naming_convention | :internal | nil | :reject | :not_found
- nil | :scoped_no_naming_convention | :internal | nil | :reject | :not_found
- nil | :unscoped | :internal | nil | :reject | :not_found
- nil | :non_existing | :internal | nil | :reject | :not_found
+ nil | :scoped_naming_convention | :private | nil | :reject | :unauthorized
+ nil | :scoped_no_naming_convention | :private | nil | :reject | :unauthorized
+ nil | :unscoped | :private | nil | :reject | :unauthorized
+ nil | :non_existing | :private | nil | :reject | :unauthorized
+ nil | :scoped_naming_convention | :internal | nil | :reject | :unauthorized
+ nil | :scoped_no_naming_convention | :internal | nil | :reject | :unauthorized
+ nil | :unscoped | :internal | nil | :reject | :unauthorized
+ nil | :non_existing | :internal | nil | :reject | :unauthorized
:oauth | :scoped_naming_convention | :public | :guest | :accept | :ok
:oauth | :scoped_naming_convention | :public | :reporter | :accept | :ok
diff --git a/spec/support/shared_examples/requests/api/nuget_packages_shared_examples.rb b/spec/support/shared_examples/requests/api/nuget_packages_shared_examples.rb
index 1be99040ae5..f8e78c8c9b1 100644
--- a/spec/support/shared_examples/requests/api/nuget_packages_shared_examples.rb
+++ b/spec/support/shared_examples/requests/api/nuget_packages_shared_examples.rb
@@ -357,12 +357,7 @@ RSpec.shared_examples 'process nuget download content request' do |user_type, st
end
context 'with normalized package version' do
- let(:normalized_version) { '0.1.0' }
- let(:url) { "/projects/#{target.id}/packages/nuget/download/#{package.name}/#{normalized_version}/#{package.name}.#{package.version}.#{format}" }
-
- before do
- package.nuget_metadatum.update_column(:normalized_version, normalized_version)
- end
+ let(:package_version) { '0.1.0' }
it_behaves_like 'returning response status', status
@@ -737,3 +732,19 @@ RSpec.shared_examples 'nuget upload endpoint' do |symbol_package: false|
end
end
end
+
+RSpec.shared_examples 'process nuget delete request' do |user_type, status|
+ context "for user type #{user_type}" do
+ before do
+ target.send("add_#{user_type}", user) if user_type
+ end
+
+ it_behaves_like 'returning response status', status
+
+ it_behaves_like 'a package tracking event', 'API::NugetPackages', 'delete_package'
+
+ it 'marks package for deletion' do
+ expect { subject }.to change { package.reset.status }.from('default').to('pending_destruction')
+ end
+ end
+end
diff --git a/spec/support/shared_examples/requests/organizations_shared_examples.rb b/spec/support/shared_examples/requests/organizations_shared_examples.rb
new file mode 100644
index 00000000000..78e7c3c6bde
--- /dev/null
+++ b/spec/support/shared_examples/requests/organizations_shared_examples.rb
@@ -0,0 +1,35 @@
+# frozen_string_literal: true
+
+RSpec.shared_examples 'organization - successful response' do
+ it 'renders 200 OK' do
+ gitlab_request
+
+ expect(response).to have_gitlab_http_status(:ok)
+ end
+end
+
+RSpec.shared_examples 'organization - not found response' do
+ it 'renders 404 NOT_FOUND' do
+ gitlab_request
+
+ expect(response).to have_gitlab_http_status(:not_found)
+ end
+end
+
+RSpec.shared_examples 'organization - redirects to sign in page' do
+ it 'redirects to sign in page' do
+ gitlab_request
+
+ expect(response).to redirect_to(new_user_session_path)
+ end
+end
+
+RSpec.shared_examples 'organization - action disabled by `ui_for_organizations` feature flag' do
+ context 'when `ui_for_organizations` feature flag is disabled' do
+ before do
+ stub_feature_flags(ui_for_organizations: false)
+ end
+
+ it_behaves_like 'organization - not found response'
+ end
+end