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
This commit is contained in:
Toon Claes 2017-08-17 12:11:40 +02:00
parent fdf4f0fc08
commit a98d17a838
2 changed files with 52 additions and 4 deletions

View file

@ -0,0 +1,5 @@
---
title: Improve API pagination headers when no record found
merge_request: 13629
author: Jordan Patterson
type: fixed

View file

@ -52,7 +52,13 @@ describe API::Helpers::Pagination do
expect_header('X-Page', '1')
expect_header('X-Next-Page', '2')
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)
end
@ -75,15 +81,52 @@ describe API::Helpers::Pagination do
expect_header('X-Page', '2')
expect_header('X-Next-Page', '')
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
def expect_header(name, value)
expect(subject).to receive(:header).with(name, value)
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)
end
end
end
def expect_header(*args, &block)
expect(subject).to receive(:header).with(*args, &block)
end
def expect_message(method)