diff options
author | Jarka Kadlecová <jarka@gitlab.com> | 2018-07-03 14:23:21 +0200 |
---|---|---|
committer | Jarka Kadlecová <jarka@gitlab.com> | 2018-07-03 14:23:21 +0200 |
commit | aa127d93944227b2ba93b943130f96fdc59bd0bd (patch) | |
tree | 3d53806f88e933adb24b5f987f31af702430343f | |
parent | 48f4ccd31169555d66fed277f30f0001e9b18f4f (diff) | |
download | gitlab-ce-45915-search-api-pagination.tar.gz |
User per_page param properly in Search services45915-search-api-pagination
-rw-r--r-- | app/services/search/global_service.rb | 2 | ||||
-rw-r--r-- | app/services/search/project_service.rb | 3 | ||||
-rw-r--r-- | app/services/search/snippet_service.rb | 2 | ||||
-rw-r--r-- | lib/gitlab/snippet_search_results.rb | 3 | ||||
-rw-r--r-- | spec/services/search_service_spec.rb | 101 |
5 files changed, 107 insertions, 4 deletions
diff --git a/app/services/search/global_service.rb b/app/services/search/global_service.rb index 92a32e703af..944f50201cd 100644 --- a/app/services/search/global_service.rb +++ b/app/services/search/global_service.rb @@ -10,7 +10,7 @@ module Search def execute Gitlab::SearchResults.new(current_user, projects, params[:search], - default_project_filter: default_project_filter) + default_project_filter: default_project_filter, per_page: params[:per_page]) end def projects diff --git a/app/services/search/project_service.rb b/app/services/search/project_service.rb index 9a22abae635..bddd192e6c3 100644 --- a/app/services/search/project_service.rb +++ b/app/services/search/project_service.rb @@ -10,7 +10,8 @@ module Search Gitlab::ProjectSearchResults.new(current_user, project, params[:search], - params[:repository_ref]) + params[:repository_ref], + per_page: params[:per_page]) end def scope diff --git a/app/services/search/snippet_service.rb b/app/services/search/snippet_service.rb index 85da0be6fff..e3e23f64176 100644 --- a/app/services/search/snippet_service.rb +++ b/app/services/search/snippet_service.rb @@ -9,7 +9,7 @@ module Search def execute snippets = SnippetsFinder.new(current_user).execute - Gitlab::SnippetSearchResults.new(snippets, params[:search]) + Gitlab::SnippetSearchResults.new(snippets, params[:search], per_page: params[:per_page]) end def scope diff --git a/lib/gitlab/snippet_search_results.rb b/lib/gitlab/snippet_search_results.rb index 4f86b3e8f73..8a04f63bc2f 100644 --- a/lib/gitlab/snippet_search_results.rb +++ b/lib/gitlab/snippet_search_results.rb @@ -4,9 +4,10 @@ module Gitlab attr_reader :limit_snippets - def initialize(limit_snippets, query) + def initialize(limit_snippets, query, per_page: 20) @limit_snippets = limit_snippets @query = query + @per_page = per_page end def objects(scope, page = nil) diff --git a/spec/services/search_service_spec.rb b/spec/services/search_service_spec.rb index 02de83a2df8..e5220022cb4 100644 --- a/spec/services/search_service_spec.rb +++ b/spec/services/search_service_spec.rb @@ -235,6 +235,31 @@ describe SearchService do end describe '#search_objects' do + # this shared example expects 3 results to be returned, can be overrided + shared_examples 'pagination' do |params| + let(:results_count) { 3 } + let(:last_page_count) { 1 } + + def search(per_page: nil, page: nil) + params[:per_page] = per_page if per_page + params[:page] = page if page + + described_class.new(user, params).search_objects + end + + it 'returns all 3 objects with default params' do + expect(search.count).to eq(results_count) + end + + it 'returns correct count of results ' do + expect(search(per_page: 2).count).to eq(2) + end + + it 'returns correct result page' do + expect(search(per_page: 2, page: 2).count).to eq(last_page_count) + end + end + context 'with accessible project_id' do it 'returns objects in the project' do search_objects = described_class.new( @@ -245,6 +270,26 @@ describe SearchService do expect(search_objects.first).to eq note end + + context 'pagination' do + before do + [ + create(:note_on_issue, project: accessible_project, note: 'simple note'), + create(:note_on_issue, project: accessible_project, note: 'some simple note'), + create(:note_on_issue, project: accessible_project, note: 'non simple note') + ] + end + + let(:params) do + { + project_id: accessible_project.id, + scope: 'notes', + search: 'simple' + } + end + + include_examples 'pagination' + end end context 'with accessible project_id and \'true\' snippets' do @@ -269,6 +314,25 @@ describe SearchService do expect(search_objects.first).to eq snippet end + + context 'pagination' do + before do + [ + create(:snippet, author: user, content: 'simple snippet'), + create(:snippet, author: user, content: 'some simple snippet'), + create(:snippet, author: user, content: 'non simple snippet') + ] + end + + let(:params) do + { + snippets: 'true', + search: 'simple' + } + end + + include_examples 'pagination' + end end context 'with accessible group_id' do @@ -280,6 +344,25 @@ describe SearchService do expect(search_objects.first).to eq group_project end + + context 'pagination' do + before do + [ + create(:project, group: accessible_group, name: 'group_project1'), + create(:project, group: accessible_group, name: 'group_project2'), + create(:project, group: accessible_group, name: 'group_project3') + ] + end + + let(:params) do + { + group_id: accessible_group.id, + search: 'group' + } + end + + include_examples 'pagination' + end end context 'with no project_id, group_id or snippets' do @@ -290,6 +373,24 @@ describe SearchService do expect(search_objects.first).to eq public_project end + + context 'pagination' do + before do + [ + create(:project, :public, name: 'public_project1'), + create(:project, :public, name: 'public_project2'), + create(:project, :public, name: 'public_project3') + ] + end + + let(:params) do + { + search: 'public' + } + end + + include_examples 'pagination' + end end end end |