Commit a98d17a8 authored by Toon Claes's avatar Toon Claes

Add specs for pagination Link header

Add specs that check the 'Link' header for the inclusion of:

 - rel="first"
 - rel="last"
 - rel="prev"
 - rel="next"

Fixes gitlab-org/gitlab-ce#36618

Related to gitlab-com/infrastructure#2532
parent fdf4f0fc
---
title: Improve API pagination headers when no record found
merge_request: 13629
author: Jordan Patterson
type: fixed
...@@ -52,7 +52,13 @@ describe API::Helpers::Pagination do ...@@ -52,7 +52,13 @@ describe API::Helpers::Pagination do
expect_header('X-Page', '1') expect_header('X-Page', '1')
expect_header('X-Next-Page', '2') expect_header('X-Next-Page', '2')
expect_header('X-Prev-Page', '') expect_header('X-Prev-Page', '')
expect_header('Link', any_args)
expect_header('Link', anything) do |_key, val|
expect(val).to include('rel="first"')
expect(val).to include('rel="last"')
expect(val).to include('rel="next"')
expect(val).not_to include('rel="prev"')
end
subject.paginate(resource) subject.paginate(resource)
end end
...@@ -75,15 +81,52 @@ describe API::Helpers::Pagination do ...@@ -75,15 +81,52 @@ describe API::Helpers::Pagination do
expect_header('X-Page', '2') expect_header('X-Page', '2')
expect_header('X-Next-Page', '') expect_header('X-Next-Page', '')
expect_header('X-Prev-Page', '1') expect_header('X-Prev-Page', '1')
expect_header('Link', any_args)
expect_header('Link', anything) do |_key, val|
expect(val).to include('rel="first"')
expect(val).to include('rel="last"')
expect(val).to include('rel="prev"')
expect(val).not_to include('rel="next"')
end
subject.paginate(resource)
end
end
end
context 'when resource empty' do
describe 'first page' do
before do
allow(subject).to receive(:params)
.and_return({ page: 1, per_page: 2 })
end
it 'returns appropriate amount of resources' do
expect(subject.paginate(resource).count).to eq 0
end
it 'adds appropriate headers' do
expect_header('X-Total', '0')
expect_header('X-Total-Pages', '0')
expect_header('X-Per-Page', '2')
expect_header('X-Page', '1')
expect_header('X-Next-Page', '')
expect_header('X-Prev-Page', '')
expect_header('Link', anything) do |_key, val|
expect(val).to include('rel="first"')
expect(val).to include('rel="last"')
expect(val).not_to include('rel="prev"')
expect(val).not_to include('rel="next"')
end
subject.paginate(resource) subject.paginate(resource)
end end
end end
end end
def expect_header(name, value) def expect_header(*args, &block)
expect(subject).to receive(:header).with(name, value) expect(subject).to receive(:header).with(*args, &block)
end end
def expect_message(method) def expect_message(method)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment