diff options
author | Jacopo <beschi.jacopo@gmail.com> | 2019-01-17 15:35:23 +0100 |
---|---|---|
committer | Jacopo <beschi.jacopo@gmail.com> | 2019-01-24 18:44:09 +0100 |
commit | 22eb2e4c227b060981bb37708222cdd07e825542 (patch) | |
tree | c02c037a5877e1f7075a99806336fef8cb3b03bc /spec | |
parent | e520a946410ca0007a2a562f2c2a7c6f8c6f1dab (diff) | |
download | gitlab-ce-22eb2e4c227b060981bb37708222cdd07e825542.tar.gz |
Adds milestone search
Adds to search ILIKE search for milestones title in:
- Milestones dashboard
- Group milestones page
- Project milestones page
Diffstat (limited to 'spec')
-rw-r--r-- | spec/controllers/dashboard/milestones_controller_spec.rb | 18 | ||||
-rw-r--r-- | spec/controllers/groups/milestones_controller_spec.rb | 31 | ||||
-rw-r--r-- | spec/controllers/projects/milestones_controller_spec.rb | 12 | ||||
-rw-r--r-- | spec/finders/milestones_finder_spec.rb | 6 | ||||
-rw-r--r-- | spec/models/global_milestone_spec.rb | 6 | ||||
-rw-r--r-- | spec/models/milestone_spec.rb | 23 |
6 files changed, 92 insertions, 4 deletions
diff --git a/spec/controllers/dashboard/milestones_controller_spec.rb b/spec/controllers/dashboard/milestones_controller_spec.rb index c9ccd5f7c55..8b176e07bc8 100644 --- a/spec/controllers/dashboard/milestones_controller_spec.rb +++ b/spec/controllers/dashboard/milestones_controller_spec.rb @@ -56,6 +56,24 @@ describe Dashboard::MilestonesController do expect(json_response.map { |i| i["group_name"] }.compact).to match_array(group.name) end + it 'searches legacy project milestones by title when search_title is given' do + project_milestone = create(:milestone, title: 'Project milestone title', project: project) + + get :index, params: { search_title: 'Project mil' } + + expect(response.body).to include(project_milestone.title) + expect(response.body).not_to include(group_milestone.title) + end + + it 'searches group milestones by title when search_title is given' do + group_milestone = create(:milestone, title: 'Group milestone title', group: group) + + get :index, params: { search_title: 'Group mil' } + + expect(response.body).to include(group_milestone.title) + expect(response.body).not_to include(project_milestone.title) + end + it 'should contain group and project milestones to which the user belongs to' do get :index diff --git a/spec/controllers/groups/milestones_controller_spec.rb b/spec/controllers/groups/milestones_controller_spec.rb index 40d991a669c..043cf28514b 100644 --- a/spec/controllers/groups/milestones_controller_spec.rb +++ b/spec/controllers/groups/milestones_controller_spec.rb @@ -32,10 +32,35 @@ describe Groups::MilestonesController do end describe '#index' do - it 'shows group milestones page' do - get :index, params: { group_id: group.to_param } + describe 'as HTML' do + render_views - expect(response).to have_gitlab_http_status(200) + it 'shows group milestones page' do + milestone + + get :index, params: { group_id: group.to_param } + + expect(response).to have_gitlab_http_status(200) + expect(response.body).to include(milestone.title) + end + + it 'searches legacy milestones by title when search_title is given' do + project_milestone = create(:milestone, project: project, title: 'Project milestone title') + + get :index, params: { group_id: group.to_param, search_title: 'Project mil' } + + expect(response.body).to include(project_milestone.title) + expect(response.body).not_to include(milestone.title) + end + + it 'searches group milestones by title when search_title is given' do + group_milestone = create(:milestone, title: 'Group milestone title', group: group) + + get :index, params: { group_id: group.to_param, search_title: 'Group mil' } + + expect(response.body).to include(group_milestone.title) + expect(response.body).not_to include(milestone.title) + end end context 'as JSON' do diff --git a/spec/controllers/projects/milestones_controller_spec.rb b/spec/controllers/projects/milestones_controller_spec.rb index 5892024e756..ac54b3c3952 100644 --- a/spec/controllers/projects/milestones_controller_spec.rb +++ b/spec/controllers/projects/milestones_controller_spec.rb @@ -42,10 +42,11 @@ describe Projects::MilestonesController do describe "#index" do context "as html" do - def render_index(project:, page:) + def render_index(project:, page:, search_title: '') get :index, params: { namespace_id: project.namespace.id, project_id: project.id, + search_title: search_title, page: page } end @@ -59,6 +60,15 @@ describe Projects::MilestonesController do expect(milestones.where(project_id: nil)).to be_empty end + it 'searches milestones by title when search_title is given' do + milestone1 = create(:milestone, title: 'Project milestone title', project: project) + + render_index project: project, page: 1, search_title: 'Project mile' + + milestones = assigns(:milestones) + expect(milestones).to eq([milestone1]) + end + it 'renders paginated milestones without missing or duplicates' do allow(Milestone).to receive(:default_per_page).and_return(2) create_list(:milestone, 5, project: project) diff --git a/spec/finders/milestones_finder_spec.rb b/spec/finders/milestones_finder_spec.rb index 656d120311a..ecffbb9e197 100644 --- a/spec/finders/milestones_finder_spec.rb +++ b/spec/finders/milestones_finder_spec.rb @@ -69,6 +69,12 @@ describe MilestonesFinder do expect(result.to_a).to contain_exactly(milestone_1) end + + it 'filters by search_title' do + result = described_class.new(params.merge(search_title: 'one t')).execute + + expect(result.to_a).to contain_exactly(milestone_1) + end end describe '#find_by' do diff --git a/spec/models/global_milestone_spec.rb b/spec/models/global_milestone_spec.rb index 62699df5611..f93904065c7 100644 --- a/spec/models/global_milestone_spec.rb +++ b/spec/models/global_milestone_spec.rb @@ -91,6 +91,12 @@ describe GlobalMilestone do it 'sorts collection by due date' do expect(global_milestones.map(&:due_date)).to eq [milestone1_due_date, milestone1_due_date, milestone1_due_date, nil, nil, nil] end + + it 'filters milestones by search_title when params[:search_title] is present' do + global_milestones = described_class.build_collection(projects, { search_title: 'v1.2' }) + + expect(global_milestones.map(&:title)).to match_array(['Milestone v1.2', 'Milestone v1.2', 'Milestone v1.2']) + end end context 'when adding new milestones' do diff --git a/spec/models/milestone_spec.rb b/spec/models/milestone_spec.rb index 2e436f2cc8a..af7e3d3a6c9 100644 --- a/spec/models/milestone_spec.rb +++ b/spec/models/milestone_spec.rb @@ -240,6 +240,29 @@ describe Milestone do end end + describe '#search_title' do + let(:milestone) { create(:milestone, title: 'foo', description: 'bar') } + + it 'returns milestones with a matching title' do + expect(described_class.search_title(milestone.title)) .to eq([milestone]) + end + + it 'returns milestones with a partially matching title' do + expect(described_class.search_title(milestone.title[0..2])).to eq([milestone]) + end + + it 'returns milestones with a matching title regardless of the casing' do + expect(described_class.search_title(milestone.title.upcase)) + .to eq([milestone]) + end + + it 'searches only on the title and ignores milestones with a matching description' do + create(:milestone, title: 'bar', description: 'foo') + + expect(described_class.search_title(milestone.title)) .to eq([milestone]) + end + end + describe '#for_projects_and_groups' do let(:project) { create(:project) } let(:project_other) { create(:project) } |