Skip to content
Snippets Groups Projects
Commit 1b2400b5 authored by Jarka Kadlecova's avatar Jarka Kadlecova
Browse files

Return only limited pagination headers for search API endpoints

parent 73819445
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -43,7 +43,7 @@ class SearchService
end
 
def search_objects
@search_objects ||= search_results.objects(scope, params[:page], params[:without_counts])
@search_objects ||= search_results.objects(scope, params[:page])
end
 
private
Loading
Loading
Loading
Loading
@@ -12,13 +12,16 @@ module API
private
 
def add_pagination_headers(paginated_data)
header 'X-Total', paginated_data.total_count.to_s
header 'X-Total-Pages', total_pages(paginated_data).to_s
header 'X-Per-Page', paginated_data.limit_value.to_s
header 'X-Page', paginated_data.current_page.to_s
header 'X-Next-Page', paginated_data.next_page.to_s
header 'X-Prev-Page', paginated_data.prev_page.to_s
header 'Link', pagination_links(paginated_data)
return if data_without_counts?(paginated_data)
header 'X-Total', paginated_data.total_count.to_s
header 'X-Total-Pages', total_pages(paginated_data).to_s
end
 
def pagination_links(paginated_data)
Loading
Loading
@@ -37,8 +40,10 @@ module API
request_params[:page] = 1
links << %(<#{request_url}?#{request_params.to_query}>; rel="first")
 
request_params[:page] = total_pages(paginated_data)
links << %(<#{request_url}?#{request_params.to_query}>; rel="last")
unless data_without_counts?(paginated_data)
request_params[:page] = total_pages(paginated_data)
links << %(<#{request_url}?#{request_params.to_query}>; rel="last")
end
 
links.join(', ')
end
Loading
Loading
@@ -55,6 +60,10 @@ module API
 
relation
end
def data_without_counts?(paginated_data)
paginated_data.is_a?(Kaminari::PaginatableWithoutCount)
end
end
end
end
Loading
Loading
@@ -24,8 +24,7 @@ module API
search: params[:search],
snippets: snippets?,
page: params[:page],
per_page: params[:per_page],
without_counts: false
per_page: params[:per_page]
}.merge(additional_params)
 
results = SearchService.new(current_user, search_params).search_objects
Loading
Loading
Loading
Loading
@@ -10,7 +10,7 @@ module Gitlab
@per_page = per_page
end
 
def objects(scope, page = nil, without_counts = true)
def objects(scope, page = nil)
case scope
when 'notes'
notes.page(page).per(per_page)
Loading
Loading
@@ -21,7 +21,7 @@ module Gitlab
when 'commits'
Kaminari.paginate_array(commits).page(page).per(per_page)
else
super(scope, page, without_counts)
super(scope, page, false)
end
end
 
Loading
Loading
Loading
Loading
@@ -9,14 +9,14 @@ module Gitlab
@query = query
end
 
def objects(scope, page = nil, without_counts = true)
def objects(scope, page = nil)
case scope
when 'snippet_titles'
snippet_titles.page(page).per(per_page)
when 'snippet_blobs'
snippet_blobs.page(page).per(per_page)
else
super(scope, nil, without_counts)
super(scope, nil, false)
end
end
 
Loading
Loading
Loading
Loading
@@ -9,7 +9,7 @@ describe API::Search do
shared_examples 'response is correct' do |schema:, size: 1|
it { expect(response).to have_gitlab_http_status(200) }
it { expect(response).to match_response_schema(schema) }
it { expect(response).to include_pagination_headers }
it { expect(response).to include_limited_pagination_headers }
it { expect(json_response.size).to eq(size) }
end
 
Loading
Loading
Loading
Loading
@@ -3,3 +3,9 @@ RSpec::Matchers.define :include_pagination_headers do |expected|
expect(actual.headers).to include('X-Total', 'X-Total-Pages', 'X-Per-Page', 'X-Page', 'X-Next-Page', 'X-Prev-Page', 'Link')
end
end
RSpec::Matchers.define :include_limited_pagination_headers do |expected|
match do |actual|
expect(actual.headers).to include('X-Per-Page', 'X-Page', 'X-Next-Page', 'X-Prev-Page', 'Link')
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment