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>2020-06-18 14:18:50 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-06-18 14:18:50 +0300
commit8c7f4e9d5f36cff46365a7f8c4b9c21578c1e781 (patch)
treea77e7fe7a93de11213032ed4ab1f33a3db51b738 /spec/finders
parent00b35af3db1abfe813a778f643dad221aad51fca (diff)
Add latest changes from gitlab-org/gitlab@13-1-stable-ee
Diffstat (limited to 'spec/finders')
-rw-r--r--spec/finders/abuse_reports_finder_spec.rb2
-rw-r--r--spec/finders/access_requests_finder_spec.rb2
-rw-r--r--spec/finders/admin/projects_finder_spec.rb2
-rw-r--r--spec/finders/admin/runners_finder_spec.rb81
-rw-r--r--spec/finders/alert_management/alerts_finder_spec.rb14
-rw-r--r--spec/finders/applications_finder_spec.rb2
-rw-r--r--spec/finders/autocomplete/acts_as_taggable_on/tags_finder_spec.rb2
-rw-r--r--spec/finders/autocomplete/group_finder_spec.rb2
-rw-r--r--spec/finders/autocomplete/move_to_project_finder_spec.rb2
-rw-r--r--spec/finders/autocomplete/project_finder_spec.rb2
-rw-r--r--spec/finders/autocomplete/users_finder_spec.rb2
-rw-r--r--spec/finders/award_emojis_finder_spec.rb2
-rw-r--r--spec/finders/boards/visits_finder_spec.rb2
-rw-r--r--spec/finders/branches_finder_spec.rb2
-rw-r--r--spec/finders/ci/daily_build_group_report_results_finder_spec.rb28
-rw-r--r--spec/finders/ci/job_artifacts_finder_spec.rb2
-rw-r--r--spec/finders/ci/jobs_finder_spec.rb2
-rw-r--r--spec/finders/ci/pipeline_schedules_finder_spec.rb2
-rw-r--r--spec/finders/ci/pipelines_finder_spec.rb2
-rw-r--r--spec/finders/ci/pipelines_for_merge_request_finder_spec.rb2
-rw-r--r--spec/finders/ci/runner_jobs_finder_spec.rb2
-rw-r--r--spec/finders/ci/runners_finder_spec.rb304
-rw-r--r--spec/finders/cluster_ancestors_finder_spec.rb2
-rw-r--r--spec/finders/clusters/knative_services_finder_spec.rb2
-rw-r--r--spec/finders/clusters_finder_spec.rb2
-rw-r--r--spec/finders/concerns/finder_methods_spec.rb2
-rw-r--r--spec/finders/concerns/finder_with_cross_project_access_spec.rb2
-rw-r--r--spec/finders/container_repositories_finder_spec.rb2
-rw-r--r--spec/finders/context_commits_finder_spec.rb2
-rw-r--r--spec/finders/contributed_projects_finder_spec.rb2
-rw-r--r--spec/finders/deployments_finder_spec.rb2
-rw-r--r--spec/finders/design_management/designs_finder_spec.rb2
-rw-r--r--spec/finders/design_management/versions_finder_spec.rb2
-rw-r--r--spec/finders/environments_finder_spec.rb2
-rw-r--r--spec/finders/events_finder_spec.rb14
-rw-r--r--spec/finders/fork_projects_finder_spec.rb2
-rw-r--r--spec/finders/fork_targets_finder_spec.rb2
-rw-r--r--spec/finders/freeze_periods_finder_spec.rb2
-rw-r--r--spec/finders/group_descendants_finder_spec.rb2
-rw-r--r--spec/finders/group_labels_finder_spec.rb2
-rw-r--r--spec/finders/group_members_finder_spec.rb2
-rw-r--r--spec/finders/group_projects_finder_spec.rb2
-rw-r--r--spec/finders/groups_finder_spec.rb8
-rw-r--r--spec/finders/issues_finder_spec.rb2
-rw-r--r--spec/finders/joined_groups_finder_spec.rb2
-rw-r--r--spec/finders/keys_finder_spec.rb2
-rw-r--r--spec/finders/labels_finder_spec.rb92
-rw-r--r--spec/finders/license_template_finder_spec.rb2
-rw-r--r--spec/finders/members_finder_spec.rb2
-rw-r--r--spec/finders/merge_request_target_project_finder_spec.rb2
-rw-r--r--spec/finders/merge_requests_finder_spec.rb79
-rw-r--r--spec/finders/metrics/dashboards/annotations_finder_spec.rb2
-rw-r--r--spec/finders/metrics/users_starred_dashboards_finder_spec.rb2
-rw-r--r--spec/finders/milestones_finder_spec.rb2
-rw-r--r--spec/finders/notes_finder_spec.rb2
-rw-r--r--spec/finders/pending_todos_finder_spec.rb2
-rw-r--r--spec/finders/personal_access_tokens_finder_spec.rb2
-rw-r--r--spec/finders/personal_projects_finder_spec.rb2
-rw-r--r--spec/finders/projects/export_job_finder_spec.rb2
-rw-r--r--spec/finders/projects/prometheus/alerts_finder_spec.rb2
-rw-r--r--spec/finders/projects/serverless/functions_finder_spec.rb2
-rw-r--r--spec/finders/projects_finder_spec.rb2
-rw-r--r--spec/finders/prometheus_metrics_finder_spec.rb2
-rw-r--r--spec/finders/protected_branches_finder_spec.rb2
-rw-r--r--spec/finders/releases_finder_spec.rb2
-rw-r--r--spec/finders/resource_label_event_finder_spec.rb61
-rw-r--r--spec/finders/resource_milestone_event_finder_spec.rb83
-rw-r--r--spec/finders/sentry_issue_finder_spec.rb2
-rw-r--r--spec/finders/serverless_domain_finder_spec.rb2
-rw-r--r--spec/finders/snippets_finder_spec.rb2
-rw-r--r--spec/finders/starred_projects_finder_spec.rb2
-rw-r--r--spec/finders/tags_finder_spec.rb2
-rw-r--r--spec/finders/template_finder_spec.rb2
-rw-r--r--spec/finders/todos_finder_spec.rb2
-rw-r--r--spec/finders/uploader_finder_spec.rb55
-rw-r--r--spec/finders/user_finder_spec.rb2
-rw-r--r--spec/finders/user_recent_events_finder_spec.rb2
-rw-r--r--spec/finders/users_finder_spec.rb14
-rw-r--r--spec/finders/users_star_projects_finder_spec.rb2
-rw-r--r--spec/finders/users_with_pending_todos_finder_spec.rb2
80 files changed, 677 insertions, 292 deletions
diff --git a/spec/finders/abuse_reports_finder_spec.rb b/spec/finders/abuse_reports_finder_spec.rb
index c84a645ca08..52620b3e421 100644
--- a/spec/finders/abuse_reports_finder_spec.rb
+++ b/spec/finders/abuse_reports_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe AbuseReportsFinder, '#execute' do
+RSpec.describe AbuseReportsFinder, '#execute' do
let(:params) { {} }
let!(:user1) { create(:user) }
let!(:user2) { create(:user) }
diff --git a/spec/finders/access_requests_finder_spec.rb b/spec/finders/access_requests_finder_spec.rb
index fbfc8035bcc..f4fda1f3dd2 100644
--- a/spec/finders/access_requests_finder_spec.rb
+++ b/spec/finders/access_requests_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe AccessRequestsFinder do
+RSpec.describe AccessRequestsFinder do
let(:user) { create(:user) }
let(:access_requester) { create(:user) }
diff --git a/spec/finders/admin/projects_finder_spec.rb b/spec/finders/admin/projects_finder_spec.rb
index eb5d0bba183..03eb41ddfb6 100644
--- a/spec/finders/admin/projects_finder_spec.rb
+++ b/spec/finders/admin/projects_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe Admin::ProjectsFinder do
+RSpec.describe Admin::ProjectsFinder do
describe '#execute' do
let(:user) { create(:user) }
let(:group) { create(:group, :public) }
diff --git a/spec/finders/admin/runners_finder_spec.rb b/spec/finders/admin/runners_finder_spec.rb
deleted file mode 100644
index 94ccb398801..00000000000
--- a/spec/finders/admin/runners_finder_spec.rb
+++ /dev/null
@@ -1,81 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe Admin::RunnersFinder do
- describe '#execute' do
- context 'with empty params' do
- it 'returns all runners' do
- runner1 = create :ci_runner, active: true
- runner2 = create :ci_runner, active: false
-
- expect(described_class.new(params: {}).execute).to match_array [runner1, runner2]
- end
- end
-
- context 'filter by search term' do
- it 'calls Ci::Runner.search' do
- expect(Ci::Runner).to receive(:search).with('term').and_call_original
-
- described_class.new(params: { search: 'term' }).execute
- end
- end
-
- context 'filter by status' do
- it 'calls the corresponding scope on Ci::Runner' do
- expect(Ci::Runner).to receive(:paused).and_call_original
-
- described_class.new(params: { status_status: 'paused' }).execute
- end
- end
-
- context 'filter by runner type' do
- it 'calls the corresponding scope on Ci::Runner' do
- expect(Ci::Runner).to receive(:project_type).and_call_original
-
- described_class.new(params: { type_type: 'project_type' }).execute
- end
- end
-
- context 'filter by tag_name' do
- it 'calls the corresponding scope on Ci::Runner' do
- expect(Ci::Runner).to receive(:tagged_with).with(%w[tag1 tag2]).and_call_original
-
- described_class.new(params: { tag_name: %w[tag1 tag2] }).execute
- end
- end
-
- context 'sort' do
- context 'without sort param' do
- it 'sorts by created_at' do
- runner1 = create :ci_runner, created_at: '2018-07-12 07:00'
- runner2 = create :ci_runner, created_at: '2018-07-12 08:00'
- runner3 = create :ci_runner, created_at: '2018-07-12 09:00'
-
- expect(described_class.new(params: {}).execute).to eq [runner3, runner2, runner1]
- end
- end
-
- context 'with sort param' do
- it 'sorts by specified attribute' do
- runner1 = create :ci_runner, contacted_at: 1.minute.ago
- runner2 = create :ci_runner, contacted_at: 3.minutes.ago
- runner3 = create :ci_runner, contacted_at: 2.minutes.ago
-
- expect(described_class.new(params: { sort: 'contacted_asc' }).execute).to eq [runner2, runner3, runner1]
- end
- end
- end
-
- context 'paginate' do
- it 'returns the runners for the specified page' do
- stub_const('Admin::RunnersFinder::NUMBER_OF_RUNNERS_PER_PAGE', 1)
- runner1 = create :ci_runner, created_at: '2018-07-12 07:00'
- runner2 = create :ci_runner, created_at: '2018-07-12 08:00'
-
- expect(described_class.new(params: { page: 1 }).execute).to eq [runner2]
- expect(described_class.new(params: { page: 2 }).execute).to eq [runner1]
- end
- end
- end
-end
diff --git a/spec/finders/alert_management/alerts_finder_spec.rb b/spec/finders/alert_management/alerts_finder_spec.rb
index c6d2d0ad4ef..5920d579ba6 100644
--- a/spec/finders/alert_management/alerts_finder_spec.rb
+++ b/spec/finders/alert_management/alerts_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe AlertManagement::AlertsFinder, '#execute' do
+RSpec.describe AlertManagement::AlertsFinder, '#execute' do
let_it_be(:current_user) { create(:user) }
let_it_be(:project) { create(:project) }
let_it_be(:alert_1) { create(:alert_management_alert, :all_fields, :resolved, project: project, ended_at: 1.year.ago, events: 2, severity: :high) }
@@ -100,13 +100,13 @@ describe AlertManagement::AlertsFinder, '#execute' do
context 'when sorting by start time' do
context 'sorts alerts ascending' do
- let(:params) { { sort: 'start_time_asc' } }
+ let(:params) { { sort: 'started_at_asc' } }
it { is_expected.to eq [alert_1, alert_2] }
end
context 'sorts alerts descending' do
- let(:params) { { sort: 'start_time_desc' } }
+ let(:params) { { sort: 'started_at_desc' } }
it { is_expected.to eq [alert_2, alert_1] }
end
@@ -114,13 +114,13 @@ describe AlertManagement::AlertsFinder, '#execute' do
context 'when sorting by end time' do
context 'sorts alerts ascending' do
- let(:params) { { sort: 'end_time_asc' } }
+ let(:params) { { sort: 'ended_at_asc' } }
it { is_expected.to eq [alert_1, alert_2] }
end
context 'sorts alerts descending' do
- let(:params) { { sort: 'end_time_desc' } }
+ let(:params) { { sort: 'ended_at_desc' } }
it { is_expected.to eq [alert_2, alert_1] }
end
@@ -131,13 +131,13 @@ describe AlertManagement::AlertsFinder, '#execute' do
let_it_be(:alert_count_3) { create(:alert_management_alert, project: project, events: 3) }
context 'sorts alerts ascending' do
- let(:params) { { sort: 'events_count_asc' } }
+ let(:params) { { sort: 'event_count_asc' } }
it { is_expected.to eq [alert_2, alert_1, alert_count_3, alert_count_6] }
end
context 'sorts alerts descending' do
- let(:params) { { sort: 'events_count_desc' } }
+ let(:params) { { sort: 'event_count_desc' } }
it { is_expected.to eq [alert_count_6, alert_count_3, alert_1, alert_2] }
end
diff --git a/spec/finders/applications_finder_spec.rb b/spec/finders/applications_finder_spec.rb
index 14d6b35cc27..dc615144b88 100644
--- a/spec/finders/applications_finder_spec.rb
+++ b/spec/finders/applications_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe ApplicationsFinder do
+RSpec.describe ApplicationsFinder do
let(:application1) { create(:application, name: 'some_application', owner: nil, redirect_uri: 'http://some_application.url', scopes: '') }
let(:application2) { create(:application, name: 'another_application', owner: nil, redirect_uri: 'http://other_application.url', scopes: '') }
diff --git a/spec/finders/autocomplete/acts_as_taggable_on/tags_finder_spec.rb b/spec/finders/autocomplete/acts_as_taggable_on/tags_finder_spec.rb
index c4e6c9cc9f5..9e91de32d0b 100644
--- a/spec/finders/autocomplete/acts_as_taggable_on/tags_finder_spec.rb
+++ b/spec/finders/autocomplete/acts_as_taggable_on/tags_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe Autocomplete::ActsAsTaggableOn::TagsFinder do
+RSpec.describe Autocomplete::ActsAsTaggableOn::TagsFinder do
describe '#execute' do
context 'with empty params' do
it 'returns all tags' do
diff --git a/spec/finders/autocomplete/group_finder_spec.rb b/spec/finders/autocomplete/group_finder_spec.rb
index d7cb2c3bbe2..8cbb8cdbee8 100644
--- a/spec/finders/autocomplete/group_finder_spec.rb
+++ b/spec/finders/autocomplete/group_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe Autocomplete::GroupFinder do
+RSpec.describe Autocomplete::GroupFinder do
let(:user) { create(:user) }
describe '#execute' do
diff --git a/spec/finders/autocomplete/move_to_project_finder_spec.rb b/spec/finders/autocomplete/move_to_project_finder_spec.rb
index f2da82bb9be..61328a5335a 100644
--- a/spec/finders/autocomplete/move_to_project_finder_spec.rb
+++ b/spec/finders/autocomplete/move_to_project_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe Autocomplete::MoveToProjectFinder do
+RSpec.describe Autocomplete::MoveToProjectFinder do
let_it_be(:user) { create(:user) }
let_it_be(:project) { create(:project) }
diff --git a/spec/finders/autocomplete/project_finder_spec.rb b/spec/finders/autocomplete/project_finder_spec.rb
index 207d0598c28..0c9b4989ed1 100644
--- a/spec/finders/autocomplete/project_finder_spec.rb
+++ b/spec/finders/autocomplete/project_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe Autocomplete::ProjectFinder do
+RSpec.describe Autocomplete::ProjectFinder do
let(:user) { create(:user) }
describe '#execute' do
diff --git a/spec/finders/autocomplete/users_finder_spec.rb b/spec/finders/autocomplete/users_finder_spec.rb
index 5d340c46114..357b6dfcea2 100644
--- a/spec/finders/autocomplete/users_finder_spec.rb
+++ b/spec/finders/autocomplete/users_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe Autocomplete::UsersFinder do
+RSpec.describe Autocomplete::UsersFinder do
describe '#execute' do
let!(:user1) { create(:user, username: 'johndoe') }
let!(:user2) { create(:user, :blocked, username: 'notsorandom') }
diff --git a/spec/finders/award_emojis_finder_spec.rb b/spec/finders/award_emojis_finder_spec.rb
index 975722e780b..7a75ad716d0 100644
--- a/spec/finders/award_emojis_finder_spec.rb
+++ b/spec/finders/award_emojis_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe AwardEmojisFinder do
+RSpec.describe AwardEmojisFinder do
let_it_be(:issue_1) { create(:issue) }
let_it_be(:issue_1_thumbsup) { create(:award_emoji, name: 'thumbsup', awardable: issue_1) }
let_it_be(:issue_1_thumbsdown) { create(:award_emoji, name: 'thumbsdown', awardable: issue_1) }
diff --git a/spec/finders/boards/visits_finder_spec.rb b/spec/finders/boards/visits_finder_spec.rb
index 7e3ad8aa9f0..3811c99cc59 100644
--- a/spec/finders/boards/visits_finder_spec.rb
+++ b/spec/finders/boards/visits_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe Boards::VisitsFinder do
+RSpec.describe Boards::VisitsFinder do
describe '#latest' do
let(:user) { create(:user) }
diff --git a/spec/finders/branches_finder_spec.rb b/spec/finders/branches_finder_spec.rb
index 5f75ff8c6ff..2e52093342d 100644
--- a/spec/finders/branches_finder_spec.rb
+++ b/spec/finders/branches_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe BranchesFinder do
+RSpec.describe BranchesFinder do
let(:user) { create(:user) }
let(:project) { create(:project, :repository) }
let(:repository) { project.repository }
diff --git a/spec/finders/ci/daily_build_group_report_results_finder_spec.rb b/spec/finders/ci/daily_build_group_report_results_finder_spec.rb
index 3000ef650d3..bdb0bc9b561 100644
--- a/spec/finders/ci/daily_build_group_report_results_finder_spec.rb
+++ b/spec/finders/ci/daily_build_group_report_results_finder_spec.rb
@@ -2,23 +2,12 @@
require 'spec_helper'
-describe Ci::DailyBuildGroupReportResultsFinder do
+RSpec.describe Ci::DailyBuildGroupReportResultsFinder do
describe '#execute' do
let(:project) { create(:project, :private) }
let(:ref_path) { 'refs/heads/master' }
let(:limit) { nil }
- def create_daily_coverage(group_name, coverage, date)
- create(
- :ci_daily_build_group_report_result,
- project: project,
- ref_path: ref_path,
- group_name: group_name,
- data: { 'coverage' => coverage },
- date: date
- )
- end
-
let!(:rspec_coverage_1) { create_daily_coverage('rspec', 79.0, '2020-03-09') }
let!(:karma_coverage_1) { create_daily_coverage('karma', 89.0, '2020-03-09') }
let!(:rspec_coverage_2) { create_daily_coverage('rspec', 95.0, '2020-03-10') }
@@ -37,7 +26,7 @@ describe Ci::DailyBuildGroupReportResultsFinder do
).execute
end
- context 'when current user is allowed to download project code' do
+ context 'when current user is allowed to read build report results' do
let(:current_user) { project.owner }
it 'returns all matching results within the given date range' do
@@ -61,7 +50,7 @@ describe Ci::DailyBuildGroupReportResultsFinder do
end
end
- context 'when current user is not allowed to download project code' do
+ context 'when current user is not allowed to read build report results' do
let(:current_user) { create(:user) }
it 'returns an empty result' do
@@ -69,4 +58,15 @@ describe Ci::DailyBuildGroupReportResultsFinder do
end
end
end
+
+ def create_daily_coverage(group_name, coverage, date)
+ create(
+ :ci_daily_build_group_report_result,
+ project: project,
+ ref_path: ref_path,
+ group_name: group_name,
+ data: { 'coverage' => coverage },
+ date: date
+ )
+ end
end
diff --git a/spec/finders/ci/job_artifacts_finder_spec.rb b/spec/finders/ci/job_artifacts_finder_spec.rb
index 3e701ba87fa..74875ab8b06 100644
--- a/spec/finders/ci/job_artifacts_finder_spec.rb
+++ b/spec/finders/ci/job_artifacts_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe Ci::JobArtifactsFinder do
+RSpec.describe Ci::JobArtifactsFinder do
let(:project) { create(:project) }
describe '#execute' do
diff --git a/spec/finders/ci/jobs_finder_spec.rb b/spec/finders/ci/jobs_finder_spec.rb
index 7083e8fbf43..e6680afa15c 100644
--- a/spec/finders/ci/jobs_finder_spec.rb
+++ b/spec/finders/ci/jobs_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe Ci::JobsFinder, '#execute' do
+RSpec.describe Ci::JobsFinder, '#execute' do
let_it_be(:user) { create(:user) }
let_it_be(:admin) { create(:user, :admin) }
let_it_be(:project) { create(:project, :private, public_builds: false) }
diff --git a/spec/finders/ci/pipeline_schedules_finder_spec.rb b/spec/finders/ci/pipeline_schedules_finder_spec.rb
index 5b5154ce834..57842bbecd7 100644
--- a/spec/finders/ci/pipeline_schedules_finder_spec.rb
+++ b/spec/finders/ci/pipeline_schedules_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe Ci::PipelineSchedulesFinder do
+RSpec.describe Ci::PipelineSchedulesFinder do
let(:project) { create(:project) }
let!(:active_schedule) { create(:ci_pipeline_schedule, project: project) }
diff --git a/spec/finders/ci/pipelines_finder_spec.rb b/spec/finders/ci/pipelines_finder_spec.rb
index 6528093731e..680955ff9f9 100644
--- a/spec/finders/ci/pipelines_finder_spec.rb
+++ b/spec/finders/ci/pipelines_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe Ci::PipelinesFinder do
+RSpec.describe Ci::PipelinesFinder do
let(:project) { create(:project, :public, :repository) }
let(:current_user) { nil }
let(:params) { {} }
diff --git a/spec/finders/ci/pipelines_for_merge_request_finder_spec.rb b/spec/finders/ci/pipelines_for_merge_request_finder_spec.rb
index c49ac487519..543c289d366 100644
--- a/spec/finders/ci/pipelines_for_merge_request_finder_spec.rb
+++ b/spec/finders/ci/pipelines_for_merge_request_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe Ci::PipelinesForMergeRequestFinder do
+RSpec.describe Ci::PipelinesForMergeRequestFinder do
describe '#all' do
let(:merge_request) { create(:merge_request) }
let(:project) { merge_request.source_project }
diff --git a/spec/finders/ci/runner_jobs_finder_spec.rb b/spec/finders/ci/runner_jobs_finder_spec.rb
index a3245119291..7c9f762c000 100644
--- a/spec/finders/ci/runner_jobs_finder_spec.rb
+++ b/spec/finders/ci/runner_jobs_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe Ci::RunnerJobsFinder do
+RSpec.describe Ci::RunnerJobsFinder do
let(:project) { create(:project) }
let(:runner) { create(:ci_runner, :instance) }
diff --git a/spec/finders/ci/runners_finder_spec.rb b/spec/finders/ci/runners_finder_spec.rb
new file mode 100644
index 00000000000..d4795d786bc
--- /dev/null
+++ b/spec/finders/ci/runners_finder_spec.rb
@@ -0,0 +1,304 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe Ci::RunnersFinder do
+ context 'admin' do
+ let_it_be(:admin) { create(:user, :admin) }
+
+ describe '#execute' do
+ context 'with empty params' do
+ it 'returns all runners' do
+ runner1 = create :ci_runner, active: true
+ runner2 = create :ci_runner, active: false
+
+ expect(described_class.new(current_user: admin, params: {}).execute).to match_array [runner1, runner2]
+ end
+ end
+
+ context 'filter by search term' do
+ it 'calls Ci::Runner.search' do
+ expect(Ci::Runner).to receive(:search).with('term').and_call_original
+
+ described_class.new(current_user: admin, params: { search: 'term' }).execute
+ end
+ end
+
+ context 'filter by status' do
+ it 'calls the corresponding scope on Ci::Runner' do
+ expect(Ci::Runner).to receive(:paused).and_call_original
+
+ described_class.new(current_user: admin, params: { status_status: 'paused' }).execute
+ end
+ end
+
+ context 'filter by runner type' do
+ it 'calls the corresponding scope on Ci::Runner' do
+ expect(Ci::Runner).to receive(:project_type).and_call_original
+
+ described_class.new(current_user: admin, params: { type_type: 'project_type' }).execute
+ end
+ end
+
+ context 'filter by tag_name' do
+ it 'calls the corresponding scope on Ci::Runner' do
+ expect(Ci::Runner).to receive(:tagged_with).with(%w[tag1 tag2]).and_call_original
+
+ described_class.new(current_user: admin, params: { tag_name: %w[tag1 tag2] }).execute
+ end
+ end
+
+ context 'sort' do
+ context 'without sort param' do
+ it 'sorts by created_at' do
+ runner1 = create :ci_runner, created_at: '2018-07-12 07:00'
+ runner2 = create :ci_runner, created_at: '2018-07-12 08:00'
+ runner3 = create :ci_runner, created_at: '2018-07-12 09:00'
+
+ expect(described_class.new(current_user: admin, params: {}).execute).to eq [runner3, runner2, runner1]
+ end
+ end
+
+ context 'with sort param' do
+ it 'sorts by specified attribute' do
+ runner1 = create :ci_runner, contacted_at: 1.minute.ago
+ runner2 = create :ci_runner, contacted_at: 3.minutes.ago
+ runner3 = create :ci_runner, contacted_at: 2.minutes.ago
+
+ expect(described_class.new(current_user: admin, params: { sort: 'contacted_asc' }).execute).to eq [runner2, runner3, runner1]
+ end
+ end
+ end
+
+ context 'paginate' do
+ it 'returns the runners for the specified page' do
+ stub_const('Ci::RunnersFinder::NUMBER_OF_RUNNERS_PER_PAGE', 1)
+ runner1 = create :ci_runner, created_at: '2018-07-12 07:00'
+ runner2 = create :ci_runner, created_at: '2018-07-12 08:00'
+
+ expect(described_class.new(current_user: admin, params: { page: 1 }).execute).to eq [runner2]
+ expect(described_class.new(current_user: admin, params: { page: 2 }).execute).to eq [runner1]
+ end
+ end
+
+ context 'non admin user' do
+ it 'returns no runners' do
+ user = create :user
+ create :ci_runner, active: true
+ create :ci_runner, active: false
+
+ expect(described_class.new(current_user: user, params: {}).execute).to be_empty
+ end
+ end
+
+ context 'user is nil' do
+ it 'returns no runners' do
+ user = nil
+ create :ci_runner, active: true
+ create :ci_runner, active: false
+
+ expect(described_class.new(current_user: user, params: {}).execute).to be_empty
+ end
+ end
+ end
+ end
+
+ context 'group' do
+ let_it_be(:user) { create(:user) }
+ let_it_be(:group) { create(:group) }
+ let_it_be(:sub_group_1) { create(:group, parent: group) }
+ let_it_be(:sub_group_2) { create(:group, parent: group) }
+ let_it_be(:sub_group_3) { create(:group, parent: sub_group_1) }
+ let_it_be(:sub_group_4) { create(:group, parent: sub_group_3) }
+ let_it_be(:project) { create(:project, group: group) }
+ let_it_be(:project_2) { create(:project, group: group) }
+ let_it_be(:project_3) { create(:project, group: sub_group_1) }
+ let_it_be(:project_4) { create(:project, group: sub_group_2) }
+ let_it_be(:project_5) { create(:project, group: sub_group_3) }
+ let_it_be(:project_6) { create(:project, group: sub_group_4) }
+ let_it_be(:runner_group) { create(:ci_runner, :group, contacted_at: 12.minutes.ago) }
+ let_it_be(:runner_sub_group_1) { create(:ci_runner, :group, active: false, contacted_at: 11.minutes.ago) }
+ let_it_be(:runner_sub_group_2) { create(:ci_runner, :group, contacted_at: 10.minutes.ago) }
+ let_it_be(:runner_sub_group_3) { create(:ci_runner, :group, contacted_at: 9.minutes.ago) }
+ let_it_be(:runner_sub_group_4) { create(:ci_runner, :group, contacted_at: 8.minutes.ago) }
+ let_it_be(:runner_project_1) { create(:ci_runner, :project, contacted_at: 7.minutes.ago, projects: [project])}
+ let_it_be(:runner_project_2) { create(:ci_runner, :project, contacted_at: 6.minutes.ago, projects: [project_2])}
+ let_it_be(:runner_project_3) { create(:ci_runner, :project, contacted_at: 5.minutes.ago, description: 'runner_project_search', projects: [project, project_2])}
+ let_it_be(:runner_project_4) { create(:ci_runner, :project, contacted_at: 4.minutes.ago, projects: [project_3])}
+ let_it_be(:runner_project_5) { create(:ci_runner, :project, contacted_at: 3.minutes.ago, tag_list: %w[runner_tag], projects: [project_4])}
+ let_it_be(:runner_project_6) { create(:ci_runner, :project, contacted_at: 2.minutes.ago, projects: [project_5])}
+ let_it_be(:runner_project_7) { create(:ci_runner, :project, contacted_at: 1.minute.ago, projects: [project_6])}
+
+ let(:params) { {} }
+
+ before do
+ group.runners << runner_group
+ sub_group_1.runners << runner_sub_group_1
+ sub_group_2.runners << runner_sub_group_2
+ sub_group_3.runners << runner_sub_group_3
+ sub_group_4.runners << runner_sub_group_4
+ end
+
+ describe '#execute' do
+ subject { described_class.new(current_user: user, group: group, params: params).execute }
+
+ context 'no params' do
+ before do
+ group.add_owner(user)
+ end
+
+ it 'returns all runners' do
+ expect(subject).to eq([runner_project_7, runner_project_6, runner_project_5,
+ runner_project_4, runner_project_3, runner_project_2,
+ runner_project_1, runner_sub_group_4, runner_sub_group_3,
+ runner_sub_group_2, runner_sub_group_1, runner_group])
+ end
+ end
+
+ context 'with sort param' do
+ let(:params) { { sort: 'contacted_asc' } }
+
+ before do
+ group.add_owner(user)
+ end
+
+ it 'sorts by specified attribute' do
+ expect(subject).to eq([runner_group, runner_sub_group_1, runner_sub_group_2,
+ runner_sub_group_3, runner_sub_group_4, runner_project_1,
+ runner_project_2, runner_project_3, runner_project_4,
+ runner_project_5, runner_project_6, runner_project_7])
+ end
+ end
+
+ context 'paginate' do
+ using RSpec::Parameterized::TableSyntax
+
+ let(:runners) do
+ [[runner_project_7, runner_project_6, runner_project_5],
+ [runner_project_4, runner_project_3, runner_project_2],
+ [runner_project_1, runner_sub_group_4, runner_sub_group_3],
+ [runner_sub_group_2, runner_sub_group_1, runner_group]]
+ end
+
+ where(:page, :index) do
+ 1 | 0
+ 2 | 1
+ 3 | 2
+ 4 | 3
+ end
+
+ before do
+ stub_const('Ci::RunnersFinder::NUMBER_OF_RUNNERS_PER_PAGE', 3)
+
+ group.add_owner(user)
+ end
+
+ with_them do
+ let(:params) { { page: page } }
+
+ it 'returns the runners for the specified page' do
+ expect(subject).to eq(runners[index])
+ end
+ end
+ end
+
+ context 'filter by search term' do
+ let(:params) { { search: 'runner_project_search' } }
+
+ before do
+ group.add_owner(user)
+ end
+
+ it 'returns correct runner' do
+ expect(subject).to eq([runner_project_3])
+ end
+ end
+
+ context 'filter by status' do
+ let(:params) { { status_status: 'paused' } }
+
+ before do
+ group.add_owner(user)
+ end
+
+ it 'returns correct runner' do
+ expect(subject).to eq([runner_sub_group_1])
+ end
+ end
+
+ context 'filter by tag_name' do
+ let(:params) { { tag_name: %w[runner_tag] } }
+
+ before do
+ group.add_owner(user)
+ end
+
+ it 'returns correct runner' do
+ expect(subject).to eq([runner_project_5])
+ end
+ end
+
+ context 'filter by runner type' do
+ let(:params) { { type_type: 'project_type' } }
+
+ before do
+ group.add_owner(user)
+ end
+
+ it 'returns correct runners' do
+ expect(subject).to eq([runner_project_7, runner_project_6,
+ runner_project_5, runner_project_4,
+ runner_project_3, runner_project_2, runner_project_1])
+ end
+ end
+
+ context 'user has no access to runners' do
+ where(:user_permission) do
+ [:maintainer, :developer, :reporter, :guest]
+ end
+
+ with_them do
+ before do
+ create(:group_member, user_permission, group: group, user: user)
+ end
+
+ it 'returns no runners' do
+ expect(subject).to be_empty
+ end
+ end
+ end
+
+ context 'user with no access' do
+ it 'returns no runners' do
+ expect(subject).to be_empty
+ end
+ end
+
+ context 'user is nil' do
+ let_it_be(:user) { nil }
+
+ it 'returns no runners' do
+ expect(subject).to be_empty
+ end
+ end
+ end
+
+ describe '#sort_key' do
+ subject { described_class.new(current_user: user, group: group, params: params).sort_key }
+
+ context 'no params' do
+ it 'returns created_date' do
+ expect(subject).to eq('created_date')
+ end
+ end
+
+ context 'with params' do
+ let(:params) { { sort: 'contacted_asc' } }
+
+ it 'returns contacted_asc' do
+ expect(subject).to eq('contacted_asc')
+ end
+ end
+ end
+ end
+end
diff --git a/spec/finders/cluster_ancestors_finder_spec.rb b/spec/finders/cluster_ancestors_finder_spec.rb
index 4aedb41d446..ea1dbea4cfe 100644
--- a/spec/finders/cluster_ancestors_finder_spec.rb
+++ b/spec/finders/cluster_ancestors_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe ClusterAncestorsFinder, '#execute' do
+RSpec.describe ClusterAncestorsFinder, '#execute' do
let(:group) { create(:group) }
let(:project) { create(:project, group: group) }
let(:user) { create(:user) }
diff --git a/spec/finders/clusters/knative_services_finder_spec.rb b/spec/finders/clusters/knative_services_finder_spec.rb
index 57dbead7921..c61fac27bd9 100644
--- a/spec/finders/clusters/knative_services_finder_spec.rb
+++ b/spec/finders/clusters/knative_services_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe Clusters::KnativeServicesFinder do
+RSpec.describe Clusters::KnativeServicesFinder do
include KubernetesHelpers
include ReactiveCachingHelpers
diff --git a/spec/finders/clusters_finder_spec.rb b/spec/finders/clusters_finder_spec.rb
index 3bad88573f7..fc6616f4a28 100644
--- a/spec/finders/clusters_finder_spec.rb
+++ b/spec/finders/clusters_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe ClustersFinder do
+RSpec.describe ClustersFinder do
let(:project) { create(:project) }
let_it_be(:user) { create(:user) }
diff --git a/spec/finders/concerns/finder_methods_spec.rb b/spec/finders/concerns/finder_methods_spec.rb
index 2e44df8b044..3e299c93eda 100644
--- a/spec/finders/concerns/finder_methods_spec.rb
+++ b/spec/finders/concerns/finder_methods_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe FinderMethods do
+RSpec.describe FinderMethods do
let(:finder_class) do
Class.new do
include FinderMethods
diff --git a/spec/finders/concerns/finder_with_cross_project_access_spec.rb b/spec/finders/concerns/finder_with_cross_project_access_spec.rb
index d11d4da25a8..116b523bd99 100644
--- a/spec/finders/concerns/finder_with_cross_project_access_spec.rb
+++ b/spec/finders/concerns/finder_with_cross_project_access_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe FinderWithCrossProjectAccess do
+RSpec.describe FinderWithCrossProjectAccess do
let(:finder_class) do
Class.new do
prepend FinderWithCrossProjectAccess
diff --git a/spec/finders/container_repositories_finder_spec.rb b/spec/finders/container_repositories_finder_spec.rb
index d0c91a8f734..b6305e3f5b7 100644
--- a/spec/finders/container_repositories_finder_spec.rb
+++ b/spec/finders/container_repositories_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe ContainerRepositoriesFinder do
+RSpec.describe ContainerRepositoriesFinder do
let_it_be(:reporter) { create(:user) }
let_it_be(:guest) { create(:user) }
diff --git a/spec/finders/context_commits_finder_spec.rb b/spec/finders/context_commits_finder_spec.rb
index 13cfa32ecfc..95c685aea24 100644
--- a/spec/finders/context_commits_finder_spec.rb
+++ b/spec/finders/context_commits_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe ContextCommitsFinder do
+RSpec.describe ContextCommitsFinder do
describe "#execute" do
let(:project) { create(:project, :repository) }
let(:merge_request) { create(:merge_request) }
diff --git a/spec/finders/contributed_projects_finder_spec.rb b/spec/finders/contributed_projects_finder_spec.rb
index 1d907261fe9..86d3e7f8f19 100644
--- a/spec/finders/contributed_projects_finder_spec.rb
+++ b/spec/finders/contributed_projects_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe ContributedProjectsFinder do
+RSpec.describe ContributedProjectsFinder do
let(:source_user) { create(:user) }
let(:current_user) { create(:user) }
diff --git a/spec/finders/deployments_finder_spec.rb b/spec/finders/deployments_finder_spec.rb
index b20c7e5a8a5..e4e0f366eeb 100644
--- a/spec/finders/deployments_finder_spec.rb
+++ b/spec/finders/deployments_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe DeploymentsFinder do
+RSpec.describe DeploymentsFinder do
subject { described_class.new(project, params).execute }
let(:project) { create(:project, :public, :test_repo) }
diff --git a/spec/finders/design_management/designs_finder_spec.rb b/spec/finders/design_management/designs_finder_spec.rb
index 04bd0ad0a45..696327cc49c 100644
--- a/spec/finders/design_management/designs_finder_spec.rb
+++ b/spec/finders/design_management/designs_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe DesignManagement::DesignsFinder do
+RSpec.describe DesignManagement::DesignsFinder do
include DesignManagementTestHelpers
let_it_be(:user) { create(:user) }
diff --git a/spec/finders/design_management/versions_finder_spec.rb b/spec/finders/design_management/versions_finder_spec.rb
index 11d53d0d630..6a56ccb10b8 100644
--- a/spec/finders/design_management/versions_finder_spec.rb
+++ b/spec/finders/design_management/versions_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe DesignManagement::VersionsFinder do
+RSpec.describe DesignManagement::VersionsFinder do
include DesignManagementTestHelpers
let_it_be(:user) { create(:user) }
diff --git a/spec/finders/environments_finder_spec.rb b/spec/finders/environments_finder_spec.rb
index 66e404f5236..fd714ab9a8f 100644
--- a/spec/finders/environments_finder_spec.rb
+++ b/spec/finders/environments_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe EnvironmentsFinder do
+RSpec.describe EnvironmentsFinder do
let(:project) { create(:project, :repository) }
let(:user) { project.creator }
let(:environment) { create(:environment, :available, project: project) }
diff --git a/spec/finders/events_finder_spec.rb b/spec/finders/events_finder_spec.rb
index 443e9ab4bc4..45a049f9442 100644
--- a/spec/finders/events_finder_spec.rb
+++ b/spec/finders/events_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe EventsFinder do
+RSpec.describe EventsFinder do
let_it_be(:user) { create(:user) }
let(:other_user) { create(:user) }
@@ -11,18 +11,18 @@ describe EventsFinder do
let(:closed_issue) { create(:closed_issue, project: project1, author: user) }
let(:opened_merge_request) { create(:merge_request, source_project: project2, author: user) }
- let!(:closed_issue_event) { create(:event, project: project1, author: user, target: closed_issue, action: Event::CLOSED, created_at: Date.new(2016, 12, 30)) }
- let!(:opened_merge_request_event) { create(:event, project: project2, author: user, target: opened_merge_request, action: Event::CREATED, created_at: Date.new(2017, 1, 31)) }
+ let!(:closed_issue_event) { create(:event, :closed, project: project1, author: user, target: closed_issue, created_at: Date.new(2016, 12, 30)) }
+ let!(:opened_merge_request_event) { create(:event, :created, project: project2, author: user, target: opened_merge_request, created_at: Date.new(2017, 1, 31)) }
let(:closed_issue2) { create(:closed_issue, project: project1, author: user) }
let(:opened_merge_request2) { create(:merge_request, source_project: project2, author: user) }
- let!(:closed_issue_event2) { create(:event, project: project1, author: user, target: closed_issue, action: Event::CLOSED, created_at: Date.new(2016, 2, 2)) }
- let!(:opened_merge_request_event2) { create(:event, project: project2, author: user, target: opened_merge_request, action: Event::CREATED, created_at: Date.new(2017, 2, 2)) }
+ let!(:closed_issue_event2) { create(:event, :closed, project: project1, author: user, target: closed_issue, created_at: Date.new(2016, 2, 2)) }
+ let!(:opened_merge_request_event2) { create(:event, :created, project: project2, author: user, target: opened_merge_request, created_at: Date.new(2017, 2, 2)) }
let(:opened_merge_request3) { create(:merge_request, source_project: project1, author: other_user) }
- let!(:other_developer_event) { create(:event, project: project1, author: other_user, target: opened_merge_request3, action: Event::CREATED) }
+ let!(:other_developer_event) { create(:event, :created, project: project1, author: other_user, target: opened_merge_request3 ) }
let_it_be(:public_project) { create(:project, :public, creator_id: user.id, namespace: user.namespace) }
let(:confidential_issue) { create(:closed_issue, confidential: true, project: public_project, author: user) }
- let!(:confidential_event) { create(:event, project: public_project, author: user, target: confidential_issue, action: Event::CLOSED) }
+ let!(:confidential_event) { create(:event, :closed, project: public_project, author: user, target: confidential_issue) }
context 'when targeting a user' do
it 'returns events between specified dates filtered on action and type' do
diff --git a/spec/finders/fork_projects_finder_spec.rb b/spec/finders/fork_projects_finder_spec.rb
index 02ce17ac907..9e58378b953 100644
--- a/spec/finders/fork_projects_finder_spec.rb
+++ b/spec/finders/fork_projects_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe ForkProjectsFinder do
+RSpec.describe ForkProjectsFinder do
include ProjectForksHelper
let(:source_project) { create(:project, :public, :empty_repo) }
diff --git a/spec/finders/fork_targets_finder_spec.rb b/spec/finders/fork_targets_finder_spec.rb
index f8c03cdf9b3..3c66f4e5757 100644
--- a/spec/finders/fork_targets_finder_spec.rb
+++ b/spec/finders/fork_targets_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe ForkTargetsFinder do
+RSpec.describe ForkTargetsFinder do
subject(:finder) { described_class.new(project, user) }
let(:project) { create(:project, namespace: create(:group)) }
diff --git a/spec/finders/freeze_periods_finder_spec.rb b/spec/finders/freeze_periods_finder_spec.rb
index 4ff356b85b7..53cc07d91b0 100644
--- a/spec/finders/freeze_periods_finder_spec.rb
+++ b/spec/finders/freeze_periods_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe FreezePeriodsFinder do
+RSpec.describe FreezePeriodsFinder do
subject(:finder) { described_class.new(project, user).execute }
let(:project) { create(:project, :private) }
diff --git a/spec/finders/group_descendants_finder_spec.rb b/spec/finders/group_descendants_finder_spec.rb
index a08772c6e7e..77ef546e083 100644
--- a/spec/finders/group_descendants_finder_spec.rb
+++ b/spec/finders/group_descendants_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe GroupDescendantsFinder do
+RSpec.describe GroupDescendantsFinder do
let(:user) { create(:user) }
let(:group) { create(:group) }
let(:params) { {} }
diff --git a/spec/finders/group_labels_finder_spec.rb b/spec/finders/group_labels_finder_spec.rb
index 7bdd312eff0..d65a8fb4fed 100644
--- a/spec/finders/group_labels_finder_spec.rb
+++ b/spec/finders/group_labels_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe GroupLabelsFinder, '#execute' do
+RSpec.describe GroupLabelsFinder, '#execute' do
let!(:group) { create(:group) }
let!(:user) { create(:user) }
let!(:label1) { create(:group_label, title: 'Foo', description: 'Lorem ipsum', group: group) }
diff --git a/spec/finders/group_members_finder_spec.rb b/spec/finders/group_members_finder_spec.rb
index d1d97f6f9f0..68b120db227 100644
--- a/spec/finders/group_members_finder_spec.rb
+++ b/spec/finders/group_members_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe GroupMembersFinder, '#execute' do
+RSpec.describe GroupMembersFinder, '#execute' do
let(:group) { create(:group) }
let(:nested_group) { create(:group, parent: group) }
let(:deeper_nested_group) { create(:group, parent: nested_group) }
diff --git a/spec/finders/group_projects_finder_spec.rb b/spec/finders/group_projects_finder_spec.rb
index 89fc1e380dc..7499461ad8f 100644
--- a/spec/finders/group_projects_finder_spec.rb
+++ b/spec/finders/group_projects_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe GroupProjectsFinder do
+RSpec.describe GroupProjectsFinder do
include_context 'GroupProjectsFinder context'
subject { finder.execute }
diff --git a/spec/finders/groups_finder_spec.rb b/spec/finders/groups_finder_spec.rb
index 939b818f165..78764f79a6c 100644
--- a/spec/finders/groups_finder_spec.rb
+++ b/spec/finders/groups_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe GroupsFinder do
+RSpec.describe GroupsFinder do
describe '#execute' do
let(:user) { create(:user) }
@@ -74,6 +74,12 @@ describe GroupsFinder do
let!(:internal_subgroup) { create(:group, :internal, parent: parent_group) }
let!(:private_subgroup) { create(:group, :private, parent: parent_group) }
+ context 'with [nil] parent' do
+ it 'returns only top-level groups' do
+ expect(described_class.new(user, parent: [nil]).execute).to contain_exactly(parent_group)
+ end
+ end
+
context 'without a user' do
it 'only returns parent and public subgroups' do
expect(described_class.new(nil).execute).to contain_exactly(parent_group, public_subgroup)
diff --git a/spec/finders/issues_finder_spec.rb b/spec/finders/issues_finder_spec.rb
index 7493fafb5cc..672318c292e 100644
--- a/spec/finders/issues_finder_spec.rb
+++ b/spec/finders/issues_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe IssuesFinder do
+RSpec.describe IssuesFinder do
include_context 'IssuesFinder context'
describe '#execute' do
diff --git a/spec/finders/joined_groups_finder_spec.rb b/spec/finders/joined_groups_finder_spec.rb
index b01bd44470a..8f826ef67ec 100644
--- a/spec/finders/joined_groups_finder_spec.rb
+++ b/spec/finders/joined_groups_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe JoinedGroupsFinder do
+RSpec.describe JoinedGroupsFinder do
describe '#execute' do
let!(:profile_owner) { create(:user) }
let!(:profile_visitor) { create(:user) }
diff --git a/spec/finders/keys_finder_spec.rb b/spec/finders/keys_finder_spec.rb
index bae4a542484..277c852c953 100644
--- a/spec/finders/keys_finder_spec.rb
+++ b/spec/finders/keys_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe KeysFinder do
+RSpec.describe KeysFinder do
subject { described_class.new(params).execute }
let(:user) { create(:user) }
diff --git a/spec/finders/labels_finder_spec.rb b/spec/finders/labels_finder_spec.rb
index 7590c399cf9..851b9e64db6 100644
--- a/spec/finders/labels_finder_spec.rb
+++ b/spec/finders/labels_finder_spec.rb
@@ -2,37 +2,37 @@
require 'spec_helper'
-describe LabelsFinder do
+RSpec.describe LabelsFinder do
describe '#execute' do
- let(:group_1) { create(:group) }
- let(:group_2) { create(:group) }
- let(:group_3) { create(:group) }
- let(:private_group_1) { create(:group, :private) }
- let(:private_subgroup_1) { create(:group, :private, parent: private_group_1) }
-
- let(:project_1) { create(:project, namespace: group_1) }
- let(:project_2) { create(:project, namespace: group_2) }
- let(:project_3) { create(:project) }
- let(:project_4) { create(:project, :public) }
- let(:project_5) { create(:project, namespace: group_1) }
-
- let!(:project_label_1) { create(:label, project: project_1, title: 'Label 1', description: 'awesome label') }
- let!(:project_label_2) { create(:label, project: project_2, title: 'Label 2') }
- let!(:project_label_4) { create(:label, project: project_4, title: 'Label 4') }
- let!(:project_label_5) { create(:label, project: project_5, title: 'Label 5') }
-
- let!(:group_label_1) { create(:group_label, group: group_1, title: 'Label 1 (group)') }
- let!(:group_label_2) { create(:group_label, group: group_1, title: 'Group Label 2') }
- let!(:group_label_3) { create(:group_label, group: group_2, title: 'Group Label 3') }
- let!(:private_group_label_1) { create(:group_label, group: private_group_1, title: 'Private Group Label 1') }
- let!(:private_subgroup_label_1) { create(:group_label, group: private_subgroup_1, title: 'Private Sub Group Label 1') }
-
- let(:user) { create(:user) }
+ let_it_be(:group_1) { create(:group) }
+ let_it_be(:group_2) { create(:group) }
+ let_it_be(:group_3) { create(:group) }
+ let_it_be(:private_group_1) { create(:group, :private) }
+ let_it_be(:private_subgroup_1) { create(:group, :private, parent: private_group_1) }
+
+ let_it_be(:project_1, reload: true) { create(:project, namespace: group_1) }
+ let_it_be(:project_2) { create(:project, namespace: group_2) }
+ let_it_be(:project_3) { create(:project) }
+ let_it_be(:project_4) { create(:project, :public) }
+ let_it_be(:project_5) { create(:project, namespace: group_1) }
+
+ let_it_be(:project_label_1) { create(:label, project: project_1, title: 'Label 1', description: 'awesome label') }
+ let_it_be(:project_label_2) { create(:label, project: project_2, title: 'Label 2') }
+ let_it_be(:project_label_4) { create(:label, project: project_4, title: 'Label 4') }
+ let_it_be(:project_label_5) { create(:label, project: project_5, title: 'Label 5') }
+
+ let_it_be(:group_label_1) { create(:group_label, group: group_1, title: 'Label 1 (group)') }
+ let_it_be(:group_label_2) { create(:group_label, group: group_1, title: 'Group Label 2') }
+ let_it_be(:group_label_3) { create(:group_label, group: group_2, title: 'Group Label 3') }
+ let_it_be(:private_group_label_1) { create(:group_label, group: private_group_1, title: 'Private Group Label 1') }
+ let_it_be(:private_subgroup_label_1) { create(:group_label, group: private_subgroup_1, title: 'Private Sub Group Label 1') }
+
+ let_it_be(:unused_label) { create(:label, project: project_3, title: 'Label 3') }
+ let_it_be(:unused_group_label) { create(:group_label, group: group_3, title: 'Group Label 4') }
+
+ let_it_be(:user) { create(:user) }
before do
- create(:label, project: project_3, title: 'Label 3')
- create(:group_label, group: group_3, title: 'Group Label 4')
-
project_1.add_developer(user)
end
@@ -54,11 +54,11 @@ describe LabelsFinder do
end
end
- context 'filtering by group_id' do
+ shared_examples 'filtering by group' do
it 'returns labels available for any non-archived project within the group' do
group_1.add_developer(user)
::Projects::UpdateService.new(project_1, user, archived: true).execute
- finder = described_class.new(user, group_id: group_1.id)
+ finder = described_class.new(user, **group_params(group_1))
expect(finder.execute).to eq [group_label_2, group_label_1, project_label_5]
end
@@ -67,7 +67,7 @@ describe LabelsFinder do
it 'returns only group labels' do
group_1.add_developer(user)
- finder = described_class.new(user, group_id: group_1.id, only_group_labels: true)
+ finder = described_class.new(user, only_group_labels: true, **group_params(group_1))
expect(finder.execute).to eq [group_label_2, group_label_1]
end
@@ -84,7 +84,7 @@ describe LabelsFinder do
context 'when only group labels is false' do
it 'returns group labels' do
- finder = described_class.new(user, group_id: empty_group.id)
+ finder = described_class.new(user, **group_params(empty_group))
expect(finder.execute).to eq [empty_group_label_1, empty_group_label_2]
end
@@ -96,7 +96,7 @@ describe LabelsFinder do
private_group_1.add_developer(user)
private_subgroup_1.add_developer(user)
- finder = described_class.new(user, group_id: private_subgroup_1.id, only_group_labels: true, include_ancestor_groups: true)
+ finder = described_class.new(user, **group_params(private_subgroup_1), only_group_labels: true, include_ancestor_groups: true)
expect(finder.execute).to eq [private_group_label_1, private_subgroup_label_1]
end
@@ -104,7 +104,7 @@ describe LabelsFinder do
it 'ignores labels from groups which user can not read' do
private_subgroup_1.add_developer(user)
- finder = described_class.new(user, group_id: private_subgroup_1.id, only_group_labels: true, include_ancestor_groups: true)
+ finder = described_class.new(user, **group_params(private_subgroup_1), only_group_labels: true, include_ancestor_groups: true)
expect(finder.execute).to eq [private_subgroup_label_1]
end
@@ -115,7 +115,7 @@ describe LabelsFinder do
private_group_1.add_developer(user)
private_subgroup_1.add_developer(user)
- finder = described_class.new(user, group_id: private_group_1.id, only_group_labels: true, include_descendant_groups: true)
+ finder = described_class.new(user, **group_params(private_group_1), only_group_labels: true, include_descendant_groups: true)
expect(finder.execute).to eq [private_group_label_1, private_subgroup_label_1]
end
@@ -123,14 +123,14 @@ describe LabelsFinder do
it 'ignores labels from groups which user can not read' do
private_subgroup_1.add_developer(user)
- finder = described_class.new(user, group_id: private_group_1.id, only_group_labels: true, include_descendant_groups: true)
+ finder = described_class.new(user, **group_params(private_group_1), only_group_labels: true, include_descendant_groups: true)
expect(finder.execute).to eq [private_subgroup_label_1]
end
end
context 'when including labels from group projects with limited visibility' do
- let(:finder) { described_class.new(user, group_id: group_4.id) }
+ let(:finder) { described_class.new(user, **group_params(group_4)) }
let(:group_4) { create(:group) }
let(:limited_visibility_project) { create(:project, :public, group: group_4) }
let(:visible_project) { create(:project, :public, group: group_4) }
@@ -213,6 +213,24 @@ describe LabelsFinder do
end
end
+ it_behaves_like 'filtering by group' do
+ def group_params(group)
+ { group: group }
+ end
+ end
+
+ it_behaves_like 'filtering by group' do
+ def group_params(group)
+ { group_id: group.id }
+ end
+ end
+
+ it_behaves_like 'filtering by group' do
+ def group_params(group)
+ { group: '', group_id: group.id }
+ end
+ end
+
context 'filtering by project_id' do
context 'when include_ancestor_groups is true' do
let!(:sub_project) { create(:project, namespace: private_subgroup_1 ) }
diff --git a/spec/finders/license_template_finder_spec.rb b/spec/finders/license_template_finder_spec.rb
index 183ee67d801..93f13632b6f 100644
--- a/spec/finders/license_template_finder_spec.rb
+++ b/spec/finders/license_template_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe LicenseTemplateFinder do
+RSpec.describe LicenseTemplateFinder do
describe '#execute' do
subject(:result) { described_class.new(nil, params).execute }
diff --git a/spec/finders/members_finder_spec.rb b/spec/finders/members_finder_spec.rb
index d77548c6fd0..b14ad84a96e 100644
--- a/spec/finders/members_finder_spec.rb
+++ b/spec/finders/members_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe MembersFinder, '#execute' do
+RSpec.describe MembersFinder, '#execute' do
let_it_be(:group) { create(:group) }
let_it_be(:nested_group) { create(:group, parent: group) }
let_it_be(:project, reload: true) { create(:project, namespace: nested_group) }
diff --git a/spec/finders/merge_request_target_project_finder_spec.rb b/spec/finders/merge_request_target_project_finder_spec.rb
index 4d2e4c5318c..dfb4d86fbb6 100644
--- a/spec/finders/merge_request_target_project_finder_spec.rb
+++ b/spec/finders/merge_request_target_project_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe MergeRequestTargetProjectFinder do
+RSpec.describe MergeRequestTargetProjectFinder do
include ProjectForksHelper
let(:user) { create(:user) }
diff --git a/spec/finders/merge_requests_finder_spec.rb b/spec/finders/merge_requests_finder_spec.rb
index b6f2c7bb992..f76110e3d85 100644
--- a/spec/finders/merge_requests_finder_spec.rb
+++ b/spec/finders/merge_requests_finder_spec.rb
@@ -2,10 +2,28 @@
require 'spec_helper'
-describe MergeRequestsFinder do
+RSpec.describe MergeRequestsFinder do
context "multiple projects with merge requests" do
include_context 'MergeRequestsFinder multiple projects with merge requests context'
+ shared_examples 'scalar or array parameter' do
+ let(:values) { merge_requests.pluck(attribute) }
+ let(:params) { {} }
+ let(:key) { attribute }
+
+ it 'takes scalar values' do
+ found = described_class.new(user, params.merge(key => values.first)).execute
+
+ expect(found).to contain_exactly(merge_requests.first)
+ end
+
+ it 'takes array values' do
+ found = described_class.new(user, params.merge(key => values)).execute
+
+ expect(found).to match_array(merge_requests)
+ end
+ end
+
describe '#execute' do
it 'filters by scope' do
params = { scope: 'authored', state: 'opened' }
@@ -91,28 +109,56 @@ describe MergeRequestsFinder do
expect(merge_requests).to contain_exactly(merge_request1, merge_request2, merge_request3, merge_request5)
end
- it 'filters by iid' do
- params = { project_id: project1.id, iids: merge_request1.iid }
+ describe ':iid parameter' do
+ it_behaves_like 'scalar or array parameter' do
+ let(:params) { { project_id: project1.id } }
+ let(:merge_requests) { [merge_request1, merge_request2] }
+ let(:key) { :iids }
+ let(:attribute) { :iid }
+ end
+ end
- merge_requests = described_class.new(user, params).execute
+ [:source_branch, :target_branch].each do |param|
+ describe "#{param} parameter" do
+ let(:merge_requests) { create_list(:merge_request, 2, :unique_branches, source_project: project4, target_project: project4, author: user) }
+ let(:attribute) { param }
- expect(merge_requests).to contain_exactly(merge_request1)
+ it_behaves_like 'scalar or array parameter'
+ end
end
- it 'filters by source branch' do
- params = { source_branch: merge_request2.source_branch }
+ describe ':label_name parameter' do
+ let(:common_labels) { create_list(:label, 3) }
+ let(:distinct_labels) { create_list(:label, 3) }
+ let(:merge_requests) do
+ common_attrs = {
+ source_project: project1, target_project: project1, author: user
+ }
+ distinct_labels.map do |label|
+ labels = [label, *common_labels]
+ create(:labeled_merge_request, :closed, labels: labels, **common_attrs)
+ end
+ end
- merge_requests = described_class.new(user, params).execute
+ def find(label_name)
+ described_class.new(user, label_name: label_name).execute
+ end
- expect(merge_requests).to contain_exactly(merge_request2)
- end
+ it 'accepts a single label' do
+ found = find(distinct_labels.first.title)
+ common = find(common_labels.first.title)
- it 'filters by target branch' do
- params = { target_branch: merge_request2.target_branch }
+ expect(found).to contain_exactly(merge_requests.first)
+ expect(common).to match_array(merge_requests)
+ end
- merge_requests = described_class.new(user, params).execute
+ it 'accepts an array of labels, all of which must match' do
+ all_distinct = find(distinct_labels.pluck(:title))
+ all_common = find(common_labels.pluck(:title))
- expect(merge_requests).to contain_exactly(merge_request2)
+ expect(all_distinct).to be_empty
+ expect(all_common).to match_array(merge_requests)
+ end
end
it 'filters by source project id' do
@@ -158,7 +204,10 @@ describe MergeRequestsFinder do
merge_requests = described_class.new(user, params).execute
- expect(merge_requests).to contain_exactly(merge_request1, merge_request2, merge_request3, merge_request4, merge_request5, wip_merge_request1, wip_merge_request2, wip_merge_request3, wip_merge_request4)
+ expect(merge_requests).to contain_exactly(
+ merge_request1, merge_request2, merge_request3, merge_request4,
+ merge_request5, wip_merge_request1, wip_merge_request2, wip_merge_request3,
+ wip_merge_request4)
end
it 'adds wip to scalar params' do
diff --git a/spec/finders/metrics/dashboards/annotations_finder_spec.rb b/spec/finders/metrics/dashboards/annotations_finder_spec.rb
index 222875ba2e2..223fd2c047c 100644
--- a/spec/finders/metrics/dashboards/annotations_finder_spec.rb
+++ b/spec/finders/metrics/dashboards/annotations_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe Metrics::Dashboards::AnnotationsFinder do
+RSpec.describe Metrics::Dashboards::AnnotationsFinder do
describe '#execute' do
subject(:annotations) { described_class.new(dashboard: dashboard, params: params).execute }
diff --git a/spec/finders/metrics/users_starred_dashboards_finder_spec.rb b/spec/finders/metrics/users_starred_dashboards_finder_spec.rb
index c32b8c2d335..61dadb5239c 100644
--- a/spec/finders/metrics/users_starred_dashboards_finder_spec.rb
+++ b/spec/finders/metrics/users_starred_dashboards_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe Metrics::UsersStarredDashboardsFinder do
+RSpec.describe Metrics::UsersStarredDashboardsFinder do
describe '#execute' do
subject(:starred_dashboards) { described_class.new(user: user, project: project, params: params).execute }
diff --git a/spec/finders/milestones_finder_spec.rb b/spec/finders/milestones_finder_spec.rb
index 3402eb39b3b..5920c185c64 100644
--- a/spec/finders/milestones_finder_spec.rb
+++ b/spec/finders/milestones_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe MilestonesFinder do
+RSpec.describe MilestonesFinder do
let(:now) { Time.now }
let(:group) { create(:group) }
let(:project_1) { create(:project, namespace: group) }
diff --git a/spec/finders/notes_finder_spec.rb b/spec/finders/notes_finder_spec.rb
index 44636a22ef9..5610f5889e6 100644
--- a/spec/finders/notes_finder_spec.rb
+++ b/spec/finders/notes_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe NotesFinder do
+RSpec.describe NotesFinder do
let(:user) { create :user }
let(:project) { create(:project) }
diff --git a/spec/finders/pending_todos_finder_spec.rb b/spec/finders/pending_todos_finder_spec.rb
index b41b1b46a93..10d3c2905be 100644
--- a/spec/finders/pending_todos_finder_spec.rb
+++ b/spec/finders/pending_todos_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe PendingTodosFinder do
+RSpec.describe PendingTodosFinder do
let(:user) { create(:user) }
describe '#execute' do
diff --git a/spec/finders/personal_access_tokens_finder_spec.rb b/spec/finders/personal_access_tokens_finder_spec.rb
index ce8ef80bb99..dde4f010e41 100644
--- a/spec/finders/personal_access_tokens_finder_spec.rb
+++ b/spec/finders/personal_access_tokens_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe PersonalAccessTokensFinder do
+RSpec.describe PersonalAccessTokensFinder do
def finder(options = {})
described_class.new(options)
end
diff --git a/spec/finders/personal_projects_finder_spec.rb b/spec/finders/personal_projects_finder_spec.rb
index 7686dd3dc9d..62e9999fdd6 100644
--- a/spec/finders/personal_projects_finder_spec.rb
+++ b/spec/finders/personal_projects_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe PersonalProjectsFinder do
+RSpec.describe PersonalProjectsFinder do
let(:source_user) { create(:user) }
let(:current_user) { create(:user) }
let(:finder) { described_class.new(source_user) }
diff --git a/spec/finders/projects/export_job_finder_spec.rb b/spec/finders/projects/export_job_finder_spec.rb
index 31b68717d13..1cc39e35e4d 100644
--- a/spec/finders/projects/export_job_finder_spec.rb
+++ b/spec/finders/projects/export_job_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe Projects::ExportJobFinder do
+RSpec.describe Projects::ExportJobFinder do
let(:project) { create(:project) }
let(:project_export_job1) { create(:project_export_job, project: project) }
let(:project_export_job2) { create(:project_export_job, project: project) }
diff --git a/spec/finders/projects/prometheus/alerts_finder_spec.rb b/spec/finders/projects/prometheus/alerts_finder_spec.rb
index bb59e77cca8..f47f8addbe9 100644
--- a/spec/finders/projects/prometheus/alerts_finder_spec.rb
+++ b/spec/finders/projects/prometheus/alerts_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe Projects::Prometheus::AlertsFinder do
+RSpec.describe Projects::Prometheus::AlertsFinder do
let(:finder) { described_class.new(params) }
let(:params) { {} }
diff --git a/spec/finders/projects/serverless/functions_finder_spec.rb b/spec/finders/projects/serverless/functions_finder_spec.rb
index 1f0e3cd2eda..3d3e4183d4e 100644
--- a/spec/finders/projects/serverless/functions_finder_spec.rb
+++ b/spec/finders/projects/serverless/functions_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe Projects::Serverless::FunctionsFinder do
+RSpec.describe Projects::Serverless::FunctionsFinder do
include KubernetesHelpers
include PrometheusHelpers
include ReactiveCachingHelpers
diff --git a/spec/finders/projects_finder_spec.rb b/spec/finders/projects_finder_spec.rb
index 379cbe83a08..929927ec1c4 100644
--- a/spec/finders/projects_finder_spec.rb
+++ b/spec/finders/projects_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe ProjectsFinder, :do_not_mock_admin_mode do
+RSpec.describe ProjectsFinder, :do_not_mock_admin_mode do
include AdminModeHelper
describe '#execute' do
diff --git a/spec/finders/prometheus_metrics_finder_spec.rb b/spec/finders/prometheus_metrics_finder_spec.rb
index 41b2e700e1e..10ef9f76637 100644
--- a/spec/finders/prometheus_metrics_finder_spec.rb
+++ b/spec/finders/prometheus_metrics_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe PrometheusMetricsFinder do
+RSpec.describe PrometheusMetricsFinder do
describe '#execute' do
let(:finder) { described_class.new(params) }
let(:params) { {} }
diff --git a/spec/finders/protected_branches_finder_spec.rb b/spec/finders/protected_branches_finder_spec.rb
index c6b9964b6c5..487d1be697a 100644
--- a/spec/finders/protected_branches_finder_spec.rb
+++ b/spec/finders/protected_branches_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe ProtectedBranchesFinder do
+RSpec.describe ProtectedBranchesFinder do
let(:project) { create(:project) }
let!(:protected_branch) { create(:protected_branch, project: project) }
let!(:another_protected_branch) { create(:protected_branch, project: project) }
diff --git a/spec/finders/releases_finder_spec.rb b/spec/finders/releases_finder_spec.rb
index cb4e5fed816..3dc01570d64 100644
--- a/spec/finders/releases_finder_spec.rb
+++ b/spec/finders/releases_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe ReleasesFinder do
+RSpec.describe ReleasesFinder do
let(:user) { create(:user) }
let(:project) { create(:project, :repository) }
let(:params) { {} }
diff --git a/spec/finders/resource_label_event_finder_spec.rb b/spec/finders/resource_label_event_finder_spec.rb
deleted file mode 100644
index 5068ea19d63..00000000000
--- a/spec/finders/resource_label_event_finder_spec.rb
+++ /dev/null
@@ -1,61 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe ResourceLabelEventFinder do
- let_it_be(:user) { create(:user) }
- let_it_be(:issue_project) { create(:project) }
- let_it_be(:issue) { create(:issue, project: issue_project) }
-
- describe '#execute' do
- subject { described_class.new(user, issue).execute }
-
- it 'returns events with labels accessible by user' do
- label = create(:label, project: issue_project)
- event = create_event(label)
- issue_project.add_guest(user)
-
- expect(subject).to eq [event]
- end
-
- it 'filters events with public project labels if issues and MRs are private' do
- project = create(:project, :public, :issues_private, :merge_requests_private)
- label = create(:label, project: project)
- create_event(label)
-
- expect(subject).to be_empty
- end
-
- it 'filters events with project labels not accessible by user' do
- project = create(:project, :private)
- label = create(:label, project: project)
- create_event(label)
-
- expect(subject).to be_empty
- end
-
- it 'filters events with group labels not accessible by user' do
- group = create(:group, :private)
- label = create(:group_label, group: group)
- create_event(label)
-
- expect(subject).to be_empty
- end
-
- it 'paginates results' do
- label = create(:label, project: issue_project)
- create_event(label)
- create_event(label)
- issue_project.add_guest(user)
-
- paginated = described_class.new(user, issue, per_page: 1).execute
-
- expect(subject.count).to eq 2
- expect(paginated.count).to eq 1
- end
-
- def create_event(label)
- create(:resource_label_event, issue: issue, label: label)
- end
- end
-end
diff --git a/spec/finders/resource_milestone_event_finder_spec.rb b/spec/finders/resource_milestone_event_finder_spec.rb
new file mode 100644
index 00000000000..ff4508996e2
--- /dev/null
+++ b/spec/finders/resource_milestone_event_finder_spec.rb
@@ -0,0 +1,83 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe ResourceMilestoneEventFinder do
+ let_it_be(:user) { create(:user) }
+ let_it_be(:issue_project) { create(:project) }
+ let_it_be(:issue) { create(:issue, project: issue_project) }
+
+ describe '#execute' do
+ subject { described_class.new(user, issue).execute }
+
+ it 'returns events with milestones accessible by user' do
+ milestone = create(:milestone, project: issue_project)
+ event = create_event(milestone)
+ issue_project.add_guest(user)
+
+ expect(subject).to eq [event]
+ end
+
+ it 'filters events with public project milestones if issues and MRs are private' do
+ project = create(:project, :public, :issues_private, :merge_requests_private)
+ milestone = create(:milestone, project: project)
+ create_event(milestone)
+
+ expect(subject).to be_empty
+ end
+
+ it 'filters events with project milestones not accessible by user' do
+ project = create(:project, :private)
+ milestone = create(:milestone, project: project)
+ create_event(milestone)
+
+ expect(subject).to be_empty
+ end
+
+ it 'filters events with group milestones not accessible by user' do
+ group = create(:group, :private)
+ milestone = create(:milestone, group: group)
+ create_event(milestone)
+
+ expect(subject).to be_empty
+ end
+
+ it 'paginates results' do
+ milestone = create(:milestone, project: issue_project)
+ create_event(milestone)
+ create_event(milestone)
+ issue_project.add_guest(user)
+
+ paginated = described_class.new(user, issue, per_page: 1).execute
+
+ expect(subject.count).to eq 2
+ expect(paginated.count).to eq 1
+ end
+
+ context 'when multiple events share the same milestone' do
+ it 'avoids N+1 queries' do
+ issue_project.add_developer(user)
+
+ milestone1 = create(:milestone, project: issue_project)
+ milestone2 = create(:milestone, project: issue_project)
+
+ control_count = ActiveRecord::QueryRecorder.new { described_class.new(user, issue).execute }.count
+ expect(control_count).to eq(1) # 1 events query
+
+ create_event(milestone1, :add)
+ create_event(milestone1, :remove)
+ create_event(milestone1, :add)
+ create_event(milestone1, :remove)
+ create_event(milestone2, :add)
+ create_event(milestone2, :remove)
+
+ # 1 events + 1 milestones + 1 project + 1 user + 4 ability
+ expect { described_class.new(user, issue).execute }.not_to exceed_query_limit(control_count + 7)
+ end
+ end
+
+ def create_event(milestone, action = :add)
+ create(:resource_milestone_event, issue: issue, milestone: milestone, action: action)
+ end
+ end
+end
diff --git a/spec/finders/sentry_issue_finder_spec.rb b/spec/finders/sentry_issue_finder_spec.rb
index 520f690a134..b6d62965cb9 100644
--- a/spec/finders/sentry_issue_finder_spec.rb
+++ b/spec/finders/sentry_issue_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe SentryIssueFinder do
+RSpec.describe SentryIssueFinder do
let(:user) { create(:user) }
let(:project) { create(:project, :repository) }
let(:issue) { create(:issue, project: project) }
diff --git a/spec/finders/serverless_domain_finder_spec.rb b/spec/finders/serverless_domain_finder_spec.rb
index c41f09535d3..4e6b9f07544 100644
--- a/spec/finders/serverless_domain_finder_spec.rb
+++ b/spec/finders/serverless_domain_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe ServerlessDomainFinder do
+RSpec.describe ServerlessDomainFinder do
let(:function_name) { 'test-function' }
let(:pages_domain_name) { 'serverless.gitlab.io' }
let(:valid_cluster_uuid) { 'aba1cdef123456f278' }
diff --git a/spec/finders/snippets_finder_spec.rb b/spec/finders/snippets_finder_spec.rb
index fdcc73f6e92..0affc832b30 100644
--- a/spec/finders/snippets_finder_spec.rb
+++ b/spec/finders/snippets_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe SnippetsFinder do
+RSpec.describe SnippetsFinder do
include ExternalAuthorizationServiceHelpers
include Gitlab::Allowable
diff --git a/spec/finders/starred_projects_finder_spec.rb b/spec/finders/starred_projects_finder_spec.rb
index 7aa8251c3ab..15d4ae52ddd 100644
--- a/spec/finders/starred_projects_finder_spec.rb
+++ b/spec/finders/starred_projects_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe StarredProjectsFinder do
+RSpec.describe StarredProjectsFinder do
let(:project1) { create(:project, :public, :empty_repo) }
let(:project2) { create(:project, :public, :empty_repo) }
let(:other_project) { create(:project, :public, :empty_repo) }
diff --git a/spec/finders/tags_finder_spec.rb b/spec/finders/tags_finder_spec.rb
index b9de2d29895..08978a32e50 100644
--- a/spec/finders/tags_finder_spec.rb
+++ b/spec/finders/tags_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe TagsFinder do
+RSpec.describe TagsFinder do
let(:user) { create(:user) }
let(:project) { create(:project, :repository) }
let(:repository) { project.repository }
diff --git a/spec/finders/template_finder_spec.rb b/spec/finders/template_finder_spec.rb
index ed47752cf60..34f81e249e2 100644
--- a/spec/finders/template_finder_spec.rb
+++ b/spec/finders/template_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe TemplateFinder do
+RSpec.describe TemplateFinder do
using RSpec::Parameterized::TableSyntax
describe '#build' do
diff --git a/spec/finders/todos_finder_spec.rb b/spec/finders/todos_finder_spec.rb
index 87650835b05..4123783d828 100644
--- a/spec/finders/todos_finder_spec.rb
+++ b/spec/finders/todos_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe TodosFinder do
+RSpec.describe TodosFinder do
describe '#execute' do
let(:user) { create(:user) }
let(:group) { create(:group) }
diff --git a/spec/finders/uploader_finder_spec.rb b/spec/finders/uploader_finder_spec.rb
new file mode 100644
index 00000000000..814d4b88b57
--- /dev/null
+++ b/spec/finders/uploader_finder_spec.rb
@@ -0,0 +1,55 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe UploaderFinder do
+ describe '#execute' do
+ let(:project) { build(:project) }
+ let(:upload) { create(:upload, :issuable_upload, :with_file) }
+ let(:secret) { upload.secret }
+ let(:file_name) { upload.path }
+
+ subject { described_class.new(project, secret, file_name).execute }
+
+ before do
+ upload.save
+ end
+
+ context 'when successful' do
+ before do
+ allow_next_instance_of(FileUploader) do |uploader|
+ allow(uploader).to receive(:retrieve_from_store!).with(upload.path).and_return(uploader)
+ end
+ end
+
+ it 'gets the file-like uploader' do
+ expect(subject).to be_an_instance_of(FileUploader)
+ expect(subject.model).to eq(project)
+ expect(subject.secret).to eq(secret)
+ end
+ end
+
+ context 'when path traversal in file name' do
+ before do
+ upload.path = '/uploads/11111111111111111111111111111111/../../../../../../../../../../../../../../etc/passwd)'
+ upload.save
+ end
+
+ it 'returns nil' do
+ expect(subject).to be(nil)
+ end
+ end
+
+ context 'when unexpected failure' do
+ before do
+ allow_next_instance_of(FileUploader) do |uploader|
+ allow(uploader).to receive(:retrieve_from_store!).and_raise(StandardError)
+ end
+ end
+
+ it 'returns nil when unexpected error is raised' do
+ expect { subject }.to raise_error(StandardError)
+ end
+ end
+ end
+end
diff --git a/spec/finders/user_finder_spec.rb b/spec/finders/user_finder_spec.rb
index b89b422aa2c..e9ba2f48164 100644
--- a/spec/finders/user_finder_spec.rb
+++ b/spec/finders/user_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe UserFinder do
+RSpec.describe UserFinder do
let_it_be(:user) { create(:user) }
describe '#find_by_id' do
diff --git a/spec/finders/user_recent_events_finder_spec.rb b/spec/finders/user_recent_events_finder_spec.rb
index eef6448a4a2..04ba05c68e4 100644
--- a/spec/finders/user_recent_events_finder_spec.rb
+++ b/spec/finders/user_recent_events_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe UserRecentEventsFinder do
+RSpec.describe UserRecentEventsFinder do
let(:current_user) { create(:user) }
let(:project_owner) { create(:user) }
let(:private_project) { create(:project, :private, creator: project_owner) }
diff --git a/spec/finders/users_finder_spec.rb b/spec/finders/users_finder_spec.rb
index 7f1fc1cc1c5..17b36247b05 100644
--- a/spec/finders/users_finder_spec.rb
+++ b/spec/finders/users_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe UsersFinder do
+RSpec.describe UsersFinder do
describe '#execute' do
include_context 'UsersFinder#execute filter by project context'
@@ -21,6 +21,12 @@ describe UsersFinder do
expect(users).to contain_exactly(normal_user)
end
+ it 'filters by id' do
+ users = described_class.new(user, id: normal_user.id).execute
+
+ expect(users).to contain_exactly(normal_user)
+ end
+
it 'filters by username (case insensitive)' do
users = described_class.new(user, username: 'joHNdoE').execute
@@ -70,6 +76,12 @@ describe UsersFinder do
expect(users).to contain_exactly(user, normal_user, blocked_user, omniauth_user)
end
+
+ it 'orders returned results' do
+ users = described_class.new(user, sort: 'id_asc').execute
+
+ expect(users).to eq([normal_user, blocked_user, omniauth_user, user])
+ end
end
context 'with an admin user' do
diff --git a/spec/finders/users_star_projects_finder_spec.rb b/spec/finders/users_star_projects_finder_spec.rb
index fb1d8088f44..038506cc93f 100644
--- a/spec/finders/users_star_projects_finder_spec.rb
+++ b/spec/finders/users_star_projects_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe UsersStarProjectsFinder do
+RSpec.describe UsersStarProjectsFinder do
let(:project) { create(:project, :public, :empty_repo) }
let(:user) { create(:user) }
diff --git a/spec/finders/users_with_pending_todos_finder_spec.rb b/spec/finders/users_with_pending_todos_finder_spec.rb
index fa15355531c..565b65fbefe 100644
--- a/spec/finders/users_with_pending_todos_finder_spec.rb
+++ b/spec/finders/users_with_pending_todos_finder_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe UsersWithPendingTodosFinder do
+RSpec.describe UsersWithPendingTodosFinder do
describe '#execute' do
it 'returns the users for all pending todos of a target' do
issue = create(:issue)