diff options
Diffstat (limited to 'spec/finders')
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) |