mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-22 22:06:50 +00:00
Amend tests to always include all pagination keys
This commit is contained in:
parent
16e5204eab
commit
92e9a66e97
@ -3,6 +3,7 @@ module ActiveModelSerializers
|
|||||||
class JsonApi < Base
|
class JsonApi < Base
|
||||||
class PaginationLinks
|
class PaginationLinks
|
||||||
MissingSerializationContextError = Class.new(KeyError)
|
MissingSerializationContextError = Class.new(KeyError)
|
||||||
|
FIRST_PAGE = 1
|
||||||
|
|
||||||
attr_reader :collection, :context
|
attr_reader :collection, :context
|
||||||
|
|
||||||
@ -42,20 +43,36 @@ module ActiveModelSerializers
|
|||||||
url_for_page(1)
|
url_for_page(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def last_page_url
|
||||||
|
if collection.total_pages == 0
|
||||||
|
url_for_page(FIRST_PAGE)
|
||||||
|
else
|
||||||
|
url_for_page(collection.total_pages)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def prev_page_url
|
def prev_page_url
|
||||||
return nil if collection.first_page?
|
return nil if collection.current_page == FIRST_PAGE
|
||||||
url_for_page(collection.prev_page)
|
url_for_page(collection.current_page - FIRST_PAGE)
|
||||||
end
|
end
|
||||||
|
|
||||||
def next_page_url
|
def next_page_url
|
||||||
return nil if collection.last_page? || collection.out_of_range?
|
return nil if (collection.total_pages == 0 || collection.current_page == collection.total_pages)
|
||||||
url_for_page(collection.next_page)
|
url_for_page(collection.next_page)
|
||||||
end
|
end
|
||||||
|
|
||||||
def url_for_page(number)
|
def url_for_page(number)
|
||||||
params = query_parameters.dup
|
params = query_parameters.dup
|
||||||
params[:page] = { page: per_page, number: number }
|
params[:page] = { size: per_page, number: number }
|
||||||
context.url_for(action: :index, params: params)
|
"#{url(adapter_options)}?#{params.to_query}"
|
||||||
|
end
|
||||||
|
|
||||||
|
def url(options = {})
|
||||||
|
@url ||= options.fetch(:links, {}).fetch(:self, nil) || request_url
|
||||||
|
end
|
||||||
|
|
||||||
|
def request_url
|
||||||
|
@request_url ||= context.request_url
|
||||||
end
|
end
|
||||||
|
|
||||||
def query_parameters
|
def query_parameters
|
||||||
|
|||||||
@ -61,6 +61,7 @@ module ActionController
|
|||||||
def test_render_only_first_last_and_next_pagination_links
|
def test_render_only_first_last_and_next_pagination_links
|
||||||
expected_links = { 'self' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=2",
|
expected_links = { 'self' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=2",
|
||||||
'first' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=2",
|
'first' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=2",
|
||||||
|
'prev' => nil,
|
||||||
'next' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2",
|
'next' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2",
|
||||||
'last' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2" }
|
'last' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2" }
|
||||||
get :render_pagination_using_will_paginate, params: { page: { number: 1, size: 2 } }
|
get :render_pagination_using_will_paginate, params: { page: { number: 1, size: 2 } }
|
||||||
@ -83,6 +84,7 @@ module ActionController
|
|||||||
expected_links = { 'self' => "#{KAMINARI_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1",
|
expected_links = { 'self' => "#{KAMINARI_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1",
|
||||||
'first' => "#{KAMINARI_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1",
|
'first' => "#{KAMINARI_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1",
|
||||||
'prev' => "#{KAMINARI_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=1",
|
'prev' => "#{KAMINARI_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=1",
|
||||||
|
'next' => nil,
|
||||||
'last' => "#{KAMINARI_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1" }
|
'last' => "#{KAMINARI_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1" }
|
||||||
get :render_pagination_using_kaminari, params: { page: { number: 3, size: 1 } }
|
get :render_pagination_using_kaminari, params: { page: { number: 3, size: 1 } }
|
||||||
response = JSON.parse(@response.body)
|
response = JSON.parse(@response.body)
|
||||||
@ -92,6 +94,7 @@ module ActionController
|
|||||||
def test_render_only_first_last_and_next_pagination_links_with_additional_params
|
def test_render_only_first_last_and_next_pagination_links_with_additional_params
|
||||||
expected_links = { 'self' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=2&teste=additional",
|
expected_links = { 'self' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=2&teste=additional",
|
||||||
'first' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=2&teste=additional",
|
'first' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=2&teste=additional",
|
||||||
|
'prev' => nil,
|
||||||
'next' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2&teste=additional",
|
'next' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2&teste=additional",
|
||||||
'last' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2&teste=additional" }
|
'last' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2&teste=additional" }
|
||||||
get :render_pagination_using_will_paginate, params: { page: { number: 1, size: 2 }, teste: 'additional' }
|
get :render_pagination_using_will_paginate, params: { page: { number: 1, size: 2 }, teste: 'additional' }
|
||||||
@ -103,6 +106,7 @@ module ActionController
|
|||||||
expected_links = { 'self' => "#{KAMINARI_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1&teste=additional",
|
expected_links = { 'self' => "#{KAMINARI_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1&teste=additional",
|
||||||
'first' => "#{KAMINARI_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1&teste=additional",
|
'first' => "#{KAMINARI_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1&teste=additional",
|
||||||
'prev' => "#{KAMINARI_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=1&teste=additional",
|
'prev' => "#{KAMINARI_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=1&teste=additional",
|
||||||
|
'next' => nil,
|
||||||
'last' => "#{KAMINARI_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1&teste=additional" }
|
'last' => "#{KAMINARI_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1&teste=additional" }
|
||||||
get :render_pagination_using_kaminari, params: { page: { number: 3, size: 1 }, teste: 'additional' }
|
get :render_pagination_using_kaminari, params: { page: { number: 3, size: 1 }, teste: 'additional' }
|
||||||
response = JSON.parse(@response.body)
|
response = JSON.parse(@response.body)
|
||||||
|
|||||||
@ -58,7 +58,9 @@ module ActiveModelSerializers
|
|||||||
{
|
{
|
||||||
self: "#{URI}?page%5Bnumber%5D=1&page%5Bsize%5D=2",
|
self: "#{URI}?page%5Bnumber%5D=1&page%5Bsize%5D=2",
|
||||||
first: "#{URI}?page%5Bnumber%5D=1&page%5Bsize%5D=2",
|
first: "#{URI}?page%5Bnumber%5D=1&page%5Bsize%5D=2",
|
||||||
last: "#{URI}?page%5Bnumber%5D=1&page%5Bsize%5D=2"
|
prev: nil,
|
||||||
|
next: nil,
|
||||||
|
last: "#{URI}?page%5Bnumber%5D=1&page%5Bsize%5D=2",
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -79,8 +81,9 @@ module ActiveModelSerializers
|
|||||||
links: {
|
links: {
|
||||||
self: "#{URI}?page%5Bnumber%5D=3&page%5Bsize%5D=2",
|
self: "#{URI}?page%5Bnumber%5D=3&page%5Bsize%5D=2",
|
||||||
first: "#{URI}?page%5Bnumber%5D=1&page%5Bsize%5D=2",
|
first: "#{URI}?page%5Bnumber%5D=1&page%5Bsize%5D=2",
|
||||||
last: "#{URI}?page%5Bnumber%5D=3&page%5Bsize%5D=2",
|
prev: "#{URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2",
|
||||||
prev: "#{URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2"
|
next: nil,
|
||||||
|
last: "#{URI}?page%5Bnumber%5D=3&page%5Bsize%5D=2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user