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:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-07-19 17:16:28 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-07-19 17:16:28 +0300
commite4384360a16dd9a19d4d2d25d0ef1f2b862ed2a6 (patch)
tree2fcdfa7dcdb9db8f5208b2562f4b4e803d671243 /spec/finders
parentffda4e7bcac36987f936b4ba515995a6698698f0 (diff)
Add latest changes from gitlab-org/gitlab@16-2-stable-eev16.2.0-rc42
Diffstat (limited to 'spec/finders')
-rw-r--r--spec/finders/award_emojis_finder_spec.rb4
-rw-r--r--spec/finders/ci/group_variables_finder_spec.rb73
-rw-r--r--spec/finders/ci/runners_finder_spec.rb4
-rw-r--r--spec/finders/clusters/agent_tokens_finder_spec.rb5
-rw-r--r--spec/finders/deployments_finder_spec.rb39
-rw-r--r--spec/finders/group_descendants_finder_spec.rb8
-rw-r--r--spec/finders/group_projects_finder_spec.rb10
-rw-r--r--spec/finders/packages/ml_model/package_finder_spec.rb57
-rw-r--r--spec/finders/packages/npm/package_finder_spec.rb67
-rw-r--r--spec/finders/projects/ml/model_finder_spec.rb40
-rw-r--r--spec/finders/projects_finder_spec.rb30
-rw-r--r--spec/finders/users_finder_spec.rb13
12 files changed, 254 insertions, 96 deletions
diff --git a/spec/finders/award_emojis_finder_spec.rb b/spec/finders/award_emojis_finder_spec.rb
index 7a75ad716d0..5c016d9e177 100644
--- a/spec/finders/award_emojis_finder_spec.rb
+++ b/spec/finders/award_emojis_finder_spec.rb
@@ -12,6 +12,10 @@ RSpec.describe AwardEmojisFinder do
let_it_be(:issue_2_thumbsup) { create(:award_emoji, name: 'thumbsup', awardable: issue_2) }
let_it_be(:issue_2_thumbsdown) { create(:award_emoji, name: 'thumbsdown', awardable: issue_2) }
+ before do
+ stub_feature_flags(custom_emoji: false)
+ end
+
describe 'param validation' do
it 'raises an error if `name` is invalid' do
expect { described_class.new(issue_1, { name: 'invalid' }).execute }.to raise_error(
diff --git a/spec/finders/ci/group_variables_finder_spec.rb b/spec/finders/ci/group_variables_finder_spec.rb
new file mode 100644
index 00000000000..9c5d83d7262
--- /dev/null
+++ b/spec/finders/ci/group_variables_finder_spec.rb
@@ -0,0 +1,73 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe Ci::GroupVariablesFinder, feature_category: :secrets_management do
+ subject(:finder) { described_class.new(project, sort_key).execute }
+
+ let_it_be(:user) { create(:user) }
+ let_it_be(:group) { create(:group) }
+ let_it_be(:subgroup) { create(:group, parent: group) }
+ let_it_be(:project_with_subgroup) { create(:project, group: subgroup) }
+ let_it_be(:project_without_group) { create(:project) }
+ let_it_be(:variable1) { create(:ci_group_variable, group: group, key: 'GROUP_VAR_A', created_at: 1.day.ago) }
+ let_it_be(:variable2) { create(:ci_group_variable, group: subgroup, key: 'SUBGROUP_VAR_B') }
+
+ let_it_be(:inherited_ci_variables) do
+ [variable1, variable2]
+ end
+
+ let(:sort_key) { nil }
+
+ context 'when project does not have a group' do
+ let_it_be(:project) { project_without_group }
+
+ it 'returns an empty array' do
+ expect(finder.to_a).to match_array([])
+ end
+ end
+
+ context 'when project belongs to a group' do
+ let_it_be(:project) { project_with_subgroup }
+
+ it 'returns variable from parent group and ancestors' do
+ expect(finder.to_a).to match_array([variable1, variable2])
+ end
+ end
+
+ describe 'sorting behaviour' do
+ let_it_be(:project) { project_with_subgroup }
+
+ context 'with sort by created_at descending' do
+ let(:sort_key) { :created_desc }
+
+ it 'returns variables ordered by created_at in descending order' do
+ expect(finder.to_a).to eq([variable2, variable1])
+ end
+ end
+
+ context 'with sort by created_at ascending' do
+ let(:sort_key) { :created_asc }
+
+ it 'returns variables ordered by created_at in ascending order' do
+ expect(finder.to_a).to eq([variable1, variable2])
+ end
+ end
+
+ context 'with sort by key descending' do
+ let(:sort_key) { :key_desc }
+
+ it 'returns variables ordered by key in descending order' do
+ expect(finder.to_a).to eq([variable2, variable1])
+ end
+ end
+
+ context 'with sort by key ascending' do
+ let(:sort_key) { :key_asc }
+
+ it 'returns variables ordered by key in ascending order' do
+ expect(finder.to_a).to eq([variable1, variable2])
+ end
+ end
+ end
+end
diff --git a/spec/finders/ci/runners_finder_spec.rb b/spec/finders/ci/runners_finder_spec.rb
index 77260bb4c5c..e57ad5bc76d 100644
--- a/spec/finders/ci/runners_finder_spec.rb
+++ b/spec/finders/ci/runners_finder_spec.rb
@@ -302,7 +302,7 @@ RSpec.describe Ci::RunnersFinder, feature_category: :runner_fleet do
end
describe '#execute' do
- subject { described_class.new(current_user: user, params: params).execute }
+ subject(:execute) { described_class.new(current_user: user, params: params).execute }
shared_examples 'membership equal to :descendants' do
it 'returns all descendant runners' do
@@ -321,7 +321,7 @@ RSpec.describe Ci::RunnersFinder, feature_category: :runner_fleet do
context 'with :group as target group' do
let(:target_group) { group }
- context 'passing no params' do
+ context 'passing no membership params' do
it_behaves_like 'membership equal to :descendants'
end
diff --git a/spec/finders/clusters/agent_tokens_finder_spec.rb b/spec/finders/clusters/agent_tokens_finder_spec.rb
index 1f5bfd58e85..16fdbc1b669 100644
--- a/spec/finders/clusters/agent_tokens_finder_spec.rb
+++ b/spec/finders/clusters/agent_tokens_finder_spec.rb
@@ -47,10 +47,7 @@ RSpec.describe Clusters::AgentTokensFinder do
context 'when filtering by an unrecognised status' do
subject(:execute) { described_class.new(agent, user, status: 'dummy').execute }
- it 'raises an error' do
- # 'dummy' is not a valid status as defined in the AgentToken status enum
- expect { execute.count }.to raise_error(ActiveRecord::StatementInvalid)
- end
+ it { is_expected.to be_empty }
end
context 'when user does not have permission' do
diff --git a/spec/finders/deployments_finder_spec.rb b/spec/finders/deployments_finder_spec.rb
index 517fa0e2c7a..65003ea97ef 100644
--- a/spec/finders/deployments_finder_spec.rb
+++ b/spec/finders/deployments_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe DeploymentsFinder do
+RSpec.describe DeploymentsFinder, feature_category: :deployment_management do
subject { described_class.new(params).execute }
describe "validation" do
@@ -166,8 +166,8 @@ RSpec.describe DeploymentsFinder do
'id' | 'desc' | [:deployment_3, :deployment_2, :deployment_1]
'iid' | 'asc' | [:deployment_1, :deployment_2, :deployment_3]
'iid' | 'desc' | [:deployment_3, :deployment_2, :deployment_1]
- 'ref' | 'asc' | [:deployment_2, :deployment_1, :deployment_3]
- 'ref' | 'desc' | [:deployment_3, :deployment_1, :deployment_2]
+ 'ref' | 'asc' | [:deployment_1, :deployment_2, :deployment_3] # ref acts like id because of remove_deployments_api_ref_sort feature flag
+ 'ref' | 'desc' | [:deployment_3, :deployment_2, :deployment_1] # ref acts like id because of remove_deployments_api_ref_sort feature flag
'updated_at' | 'asc' | [:deployment_2, :deployment_3, :deployment_1]
'updated_at' | 'desc' | [:deployment_1, :deployment_3, :deployment_2]
'finished_at' | 'asc' | described_class::InefficientQueryError
@@ -185,6 +185,39 @@ RSpec.describe DeploymentsFinder do
end
end
end
+
+ context 'when remove_deployments_api_ref_sort is disabled' do
+ before do
+ stub_feature_flags(remove_deployments_api_ref_sort: false)
+ end
+
+ where(:order_by, :sort, :ordered_deployments) do
+ 'created_at' | 'asc' | [:deployment_1, :deployment_2, :deployment_3]
+ 'created_at' | 'desc' | [:deployment_3, :deployment_2, :deployment_1]
+ 'id' | 'asc' | [:deployment_1, :deployment_2, :deployment_3]
+ 'id' | 'desc' | [:deployment_3, :deployment_2, :deployment_1]
+ 'iid' | 'asc' | [:deployment_1, :deployment_2, :deployment_3]
+ 'iid' | 'desc' | [:deployment_3, :deployment_2, :deployment_1]
+ 'ref' | 'asc' | [:deployment_2, :deployment_1, :deployment_3] # ref sorts when remove_deployments_api_ref_sort feature flag is disabled
+ 'ref' | 'desc' | [:deployment_3, :deployment_1, :deployment_2] # ref sorts when remove_deployments_api_ref_sort feature flag is disabled
+ 'updated_at' | 'asc' | [:deployment_2, :deployment_3, :deployment_1]
+ 'updated_at' | 'desc' | [:deployment_1, :deployment_3, :deployment_2]
+ 'finished_at' | 'asc' | described_class::InefficientQueryError
+ 'finished_at' | 'desc' | described_class::InefficientQueryError
+ 'invalid' | 'asc' | [:deployment_1, :deployment_2, :deployment_3]
+ 'iid' | 'err' | [:deployment_1, :deployment_2, :deployment_3]
+ end
+
+ with_them do
+ it 'returns the deployments ordered' do
+ if ordered_deployments == described_class::InefficientQueryError
+ expect { subject }.to raise_error(described_class::InefficientQueryError)
+ else
+ expect(subject).to eq(ordered_deployments.map { |name| public_send(name) })
+ end
+ end
+ end
+ end
end
describe 'transform `created_at` sorting to `id` sorting' do
diff --git a/spec/finders/group_descendants_finder_spec.rb b/spec/finders/group_descendants_finder_spec.rb
index 9d528355f54..14cbb6a427c 100644
--- a/spec/finders/group_descendants_finder_spec.rb
+++ b/spec/finders/group_descendants_finder_spec.rb
@@ -276,14 +276,6 @@ RSpec.describe GroupDescendantsFinder do
end
it_behaves_like 'filter examples'
-
- context 'when feature flag :linear_group_descendants_finder_upto is disabled' do
- before do
- stub_feature_flags(linear_group_descendants_finder_upto: false)
- end
-
- it_behaves_like 'filter examples'
- end
end
end
end
diff --git a/spec/finders/group_projects_finder_spec.rb b/spec/finders/group_projects_finder_spec.rb
index 4189be94cc1..87e579dbeec 100644
--- a/spec/finders/group_projects_finder_spec.rb
+++ b/spec/finders/group_projects_finder_spec.rb
@@ -87,6 +87,16 @@ RSpec.describe GroupProjectsFinder do
end
end
+ context "owned" do
+ before do
+ root_group.add_owner(current_user)
+ end
+
+ let(:params) { { owned: true } }
+
+ it { is_expected.to match_array([private_project, public_project]) }
+ end
+
context "all" do
context 'with subgroups projects' do
before do
diff --git a/spec/finders/packages/ml_model/package_finder_spec.rb b/spec/finders/packages/ml_model/package_finder_spec.rb
new file mode 100644
index 00000000000..535360d13c5
--- /dev/null
+++ b/spec/finders/packages/ml_model/package_finder_spec.rb
@@ -0,0 +1,57 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe ::Packages::MlModel::PackageFinder, feature_category: :mlops do
+ let_it_be(:project) { create(:project) }
+ let_it_be(:package) { create(:ml_model_package, project: project) }
+
+ let(:package_name) { package.name }
+ let(:package_version) { package.version }
+
+ describe '#execute!' do
+ subject(:find_package) { described_class.new(project).execute!(package_name, package_version) }
+
+ it 'finds package by name and version' do
+ expect(find_package).to eq(package)
+ end
+
+ it 'ignores packages with same name but different version' do
+ create(:ml_model_package, project: project, name: package.name, version: '3.1.4')
+
+ expect(find_package).to eq(package)
+ end
+
+ context 'when package name+version does not exist' do
+ let(:package_name) { 'a_package_that_does_not_exist' }
+
+ it 'raises ActiveRecord::RecordNotFound' do
+ expect { find_package }.to raise_error(ActiveRecord::RecordNotFound)
+ end
+ end
+
+ context 'when package exists but is marked for destruction' do
+ let_it_be(:invalid_package) do
+ create(:ml_model_package, project: project, status: :pending_destruction)
+ end
+
+ let(:package_name) { invalid_package.name }
+ let(:package_version) { invalid_package.version }
+
+ it 'raises ActiveRecord::RecordNotFound' do
+ expect { find_package }.to raise_error(ActiveRecord::RecordNotFound)
+ end
+ end
+
+ context 'when package name+version does not exist but it is not ml_model' do
+ let_it_be(:another_package) { create(:generic_package, project: project) }
+
+ let(:package_name) { another_package.name }
+ let(:package_version) { another_package.version }
+
+ it 'raises ActiveRecord::RecordNotFound' do
+ expect { find_package }.to raise_error(ActiveRecord::RecordNotFound)
+ end
+ end
+ end
+end
diff --git a/spec/finders/packages/npm/package_finder_spec.rb b/spec/finders/packages/npm/package_finder_spec.rb
index e11b33f71e9..45cc2a07027 100644
--- a/spec/finders/packages/npm/package_finder_spec.rb
+++ b/spec/finders/packages/npm/package_finder_spec.rb
@@ -7,7 +7,6 @@ RSpec.describe ::Packages::Npm::PackageFinder do
let(:project) { package.project }
let(:package_name) { package.name }
- let(:last_of_each_version) { true }
shared_examples 'accepting a namespace for' do |example_name|
before do
@@ -59,35 +58,11 @@ RSpec.describe ::Packages::Npm::PackageFinder do
end
end
- shared_examples 'handling last_of_each_version' do
- include_context 'last_of_each_version setup context'
-
- context 'disabled' do
- let(:last_of_each_version) { false }
-
- it { is_expected.to contain_exactly(package1, package2) }
- end
-
- context 'enabled' do
- it { is_expected.to contain_exactly(package2) }
- end
-
- context 'with npm_allow_packages_in_multiple_projects disabled' do
- before do
- stub_feature_flags(npm_allow_packages_in_multiple_projects: false)
- end
-
- it { is_expected.to contain_exactly(package2) }
- end
- end
-
context 'with a project' do
- let(:finder) { described_class.new(package_name, project: project, last_of_each_version: last_of_each_version) }
+ let(:finder) { described_class.new(package_name, project: project) }
it_behaves_like 'finding packages by name'
- it_behaves_like 'handling last_of_each_version'
-
context 'set to nil' do
let(:project) { nil }
@@ -96,12 +71,10 @@ RSpec.describe ::Packages::Npm::PackageFinder do
end
context 'with a namespace' do
- let(:finder) { described_class.new(package_name, namespace: namespace, last_of_each_version: last_of_each_version) }
+ let(:finder) { described_class.new(package_name, namespace: namespace) }
it_behaves_like 'accepting a namespace for', 'finding packages by name'
- it_behaves_like 'accepting a namespace for', 'handling last_of_each_version'
-
context 'set to nil' do
let_it_be(:namespace) { nil }
@@ -125,28 +98,16 @@ RSpec.describe ::Packages::Npm::PackageFinder do
end
end
- shared_examples 'handling last_of_each_version' do
- include_context 'last_of_each_version setup context'
-
- context 'enabled' do
- it { is_expected.to eq(package2) }
- end
- end
-
context 'with a project' do
- let(:finder) { described_class.new(package_name, project: project, last_of_each_version: last_of_each_version) }
+ let(:finder) { described_class.new(package_name, project: project) }
it_behaves_like 'finding packages by version'
-
- it_behaves_like 'handling last_of_each_version'
end
context 'with a namespace' do
- let(:finder) { described_class.new(package_name, namespace: namespace, last_of_each_version: last_of_each_version) }
+ let(:finder) { described_class.new(package_name, namespace: namespace) }
it_behaves_like 'accepting a namespace for', 'finding packages by version'
-
- it_behaves_like 'accepting a namespace for', 'handling last_of_each_version'
end
end
@@ -157,26 +118,10 @@ RSpec.describe ::Packages::Npm::PackageFinder do
it { is_expected.to eq(package) }
end
- shared_examples 'handling last_of_each_version' do
- include_context 'last_of_each_version setup context'
-
- context 'disabled' do
- let(:last_of_each_version) { false }
-
- it { is_expected.to eq(package2) }
- end
-
- context 'enabled' do
- it { is_expected.to eq(package2) }
- end
- end
-
context 'with a project' do
- let(:finder) { described_class.new(package_name, project: project, last_of_each_version: last_of_each_version) }
+ let(:finder) { described_class.new(package_name, project: project) }
it_behaves_like 'finding package by last'
-
- it_behaves_like 'handling last_of_each_version'
end
context 'with a namespace' do
@@ -184,8 +129,6 @@ RSpec.describe ::Packages::Npm::PackageFinder do
it_behaves_like 'accepting a namespace for', 'finding package by last'
- it_behaves_like 'accepting a namespace for', 'handling last_of_each_version'
-
context 'with duplicate packages' do
let_it_be(:namespace) { create(:group) }
let_it_be(:subgroup1) { create(:group, parent: namespace) }
diff --git a/spec/finders/projects/ml/model_finder_spec.rb b/spec/finders/projects/ml/model_finder_spec.rb
new file mode 100644
index 00000000000..386d690a8d2
--- /dev/null
+++ b/spec/finders/projects/ml/model_finder_spec.rb
@@ -0,0 +1,40 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe Projects::Ml::ModelFinder, feature_category: :mlops do
+ let_it_be(:model1_a) { create(:ml_model_package) }
+ let_it_be(:project) { model1_a.project }
+ let_it_be(:model1_b) do
+ create(:ml_model_package, name: model1_a.name, project: project)
+ end
+
+ let_it_be(:model2) do
+ create(:ml_model_package, status: :pending_destruction, project: project)
+ end
+
+ let_it_be(:model3) { create(:ml_model_package) }
+ let_it_be(:model4) { create(:generic_package, project: project) }
+
+ subject { described_class.new(project).execute.to_a }
+
+ it 'returns the most recent version of a model' do
+ is_expected.to include(model1_b)
+ end
+
+ it 'does not return older versions of a model' do
+ is_expected.not_to include(model1_a)
+ end
+
+ it 'does not return models pending destruction' do
+ is_expected.not_to include(model2)
+ end
+
+ it 'does not return models belonging to a different project' do
+ is_expected.not_to include(model3)
+ end
+
+ it 'does not return packages that are not ml_model' do
+ is_expected.not_to include(model4)
+ end
+end
diff --git a/spec/finders/projects_finder_spec.rb b/spec/finders/projects_finder_spec.rb
index 3d108951c64..a795df4dec6 100644
--- a/spec/finders/projects_finder_spec.rb
+++ b/spec/finders/projects_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe ProjectsFinder do
+RSpec.describe ProjectsFinder, feature_category: :groups_and_projects do
include AdminModeHelper
describe '#execute' do
@@ -25,6 +25,12 @@ RSpec.describe ProjectsFinder do
create(:project, :private, name: 'D', path: 'D')
end
+ let_it_be(:banned_user_project) do
+ create(:project, :public, name: 'Project created by a banned user', creator: create(:user, :banned)).tap do |p|
+ create(:project_authorization, :owner, user: p.creator, project: p)
+ end
+ end
+
let(:params) { {} }
let(:current_user) { user }
let(:project_ids_relation) { nil }
@@ -488,16 +494,32 @@ RSpec.describe ProjectsFinder do
describe 'with admin user' do
let(:user) { create(:admin) }
- context 'admin mode enabled' do
+ context 'with admin mode enabled' do
before do
enable_admin_mode!(current_user)
end
- it { is_expected.to match_array([public_project, internal_project, private_project, shared_project]) }
+ it do
+ is_expected.to match_array([
+ public_project,
+ internal_project,
+ private_project,
+ shared_project,
+ banned_user_project
+ ])
+ end
end
- context 'admin mode disabled' do
+ context 'with admin mode disabled' do
it { is_expected.to match_array([public_project, internal_project]) }
+
+ context 'when hide_projects_of_banned_users FF is disabled' do
+ before do
+ stub_feature_flags(hide_projects_of_banned_users: false)
+ end
+
+ it { is_expected.to match_array([public_project, internal_project, banned_user_project]) }
+ end
end
end
end
diff --git a/spec/finders/users_finder_spec.rb b/spec/finders/users_finder_spec.rb
index e0a9237a79b..c931de92d1c 100644
--- a/spec/finders/users_finder_spec.rb
+++ b/spec/finders/users_finder_spec.rb
@@ -70,19 +70,6 @@ RSpec.describe UsersFinder do
expect(users).to be_empty
end
-
- context 'when autocomplete_users_use_search_service feature flag is disabled' do
- before do
- stub_feature_flags(autocomplete_users_use_search_service: false)
- end
-
- it 'does not pass use_minimum_char_limit from params' do
- search_term = normal_user.username[..1]
- expect(User).to receive(:search).with(search_term, with_private_emails: anything).once.and_call_original
-
- described_class.new(user, { search: search_term, use_minimum_char_limit: false }).execute
- end
- end
end
it 'filters by external users' do