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:
parent
fdf4f0fc08
commit
a98d17a838
2 changed files with 52 additions and 4 deletions
5
changelogs/unreleased/tc-git-tower-pagination-links.yml
Normal file
5
changelogs/unreleased/tc-git-tower-pagination-links.yml
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
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
|
|||
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)
|
||||
|
|
Loading…
Reference in a new issue