This test depends on ActionView

This commit is contained in:
Akira Matsuda 2016-12-14 14:00:37 +09:00
parent 56e34191d3
commit d1f12423e1
1 changed files with 57 additions and 55 deletions

View File

@ -1,71 +1,73 @@
# frozen_string_literal: true # frozen_string_literal: true
require 'test_helper' require 'test_helper'
class PaginatorTagsTest < ActionView::TestCase if defined? ActionView
# A test paginator that can detect instantiated tags inside class PaginatorTagsTest < ActionView::TestCase
class TagSpy < Kaminari::Helpers::Paginator # A test paginator that can detect instantiated tags inside
def initialize(*) class TagSpy < Kaminari::Helpers::Paginator
super def initialize(*)
@tags = [] super
@tags = []
end
def page_tag(page)
@tags << page.to_i
super
end
%w[first_page prev_page next_page last_page gap].each do |tag|
eval <<-DEF, nil, __FILE__, __LINE__ + 1
def #{tag}_tag
@tags << :#{tag}
super
end
DEF
end
def partial_path
'kaminari/paginator'
end
def to_s
super
@tags
end
end end
def page_tag(page) def tags_for(collection, window: 4, outer_window: 0)
@tags << page.to_i view.paginate(collection, paginator_class: TagSpy, window: window, outer_window: outer_window, params: {controller: 'users', action: 'index'})
super
end end
%w[first_page prev_page next_page last_page gap].each do |tag| teardown do
eval <<-DEF, nil, __FILE__, __LINE__ + 1 User.delete_all
def #{tag}_tag
@tags << :#{tag}
super
end
DEF
end end
def partial_path test '1 page in total' do
'kaminari/paginator' 3.times {|i| User.create! name: "user#{i}"}
assert_empty tags_for(User.page(1).per(3))
end end
def to_s sub_test_case 'when having 1 outer_window (and 1 inner window)' do
super def tags_for(collection, window: 1, outer_window: 1)
@tags super
end end
end
def tags_for(collection, window: 4, outer_window: 0) test '10 pages in total' do
view.paginate(collection, paginator_class: TagSpy, window: window, outer_window: outer_window, params: {controller: 'users', action: 'index'}) 20.times {|i| User.create! name: "user#{i}"}
end
teardown do assert_equal [1, 2, :gap, 10, :next_page, :last_page], tags_for(User.page(1).per(2))
User.delete_all assert_equal [:first_page, :prev_page, 1, 2, 3, :gap, 10, :next_page, :last_page], tags_for(User.page(2).per(2))
end assert_equal [:first_page, :prev_page, 1, 2, 3, 4, :gap, 10, :next_page, :last_page], tags_for(User.page(3).per(2))
# the 3rd page doesn't become a gap because it's a single gap
test '1 page in total' do assert_equal [:first_page, :prev_page, 1, 2, 3, 4, 5, :gap, 10, :next_page, :last_page], tags_for(User.page(4).per(2))
3.times {|i| User.create! name: "user#{i}"} assert_equal [:first_page, :prev_page, 1, :gap, 4, 5, 6, :gap, 10, :next_page, :last_page], tags_for(User.page(5).per(2))
assert_empty tags_for(User.page(1).per(3)) assert_equal [:first_page, :prev_page, 1, :gap, 5, 6, 7, :gap, 10, :next_page, :last_page], tags_for(User.page(6).per(2))
end # the 9th page doesn't become a gap because it's a single gap
assert_equal [:first_page, :prev_page, 1, :gap, 6, 7, 8, 9, 10, :next_page, :last_page], tags_for(User.page(7).per(2))
sub_test_case 'when having 1 outer_window (and 1 inner window)' do assert_equal [:first_page, :prev_page, 1, :gap, 7, 8, 9, 10, :next_page, :last_page], tags_for(User.page(8).per(2))
def tags_for(collection, window: 1, outer_window: 1) assert_equal [:first_page, :prev_page, 1, :gap, 8, 9, 10, :next_page, :last_page], tags_for(User.page(9).per(2))
super assert_equal [:first_page, :prev_page, 1, :gap, 9, 10], tags_for(User.page(10).per(2))
end end
test '10 pages in total' do
20.times {|i| User.create! name: "user#{i}"}
assert_equal [1, 2, :gap, 10, :next_page, :last_page], tags_for(User.page(1).per(2))
assert_equal [:first_page, :prev_page, 1, 2, 3, :gap, 10, :next_page, :last_page], tags_for(User.page(2).per(2))
assert_equal [:first_page, :prev_page, 1, 2, 3, 4, :gap, 10, :next_page, :last_page], tags_for(User.page(3).per(2))
# the 3rd page doesn't become a gap because it's a single gap
assert_equal [:first_page, :prev_page, 1, 2, 3, 4, 5, :gap, 10, :next_page, :last_page], tags_for(User.page(4).per(2))
assert_equal [:first_page, :prev_page, 1, :gap, 4, 5, 6, :gap, 10, :next_page, :last_page], tags_for(User.page(5).per(2))
assert_equal [:first_page, :prev_page, 1, :gap, 5, 6, 7, :gap, 10, :next_page, :last_page], tags_for(User.page(6).per(2))
# the 9th page doesn't become a gap because it's a single gap
assert_equal [:first_page, :prev_page, 1, :gap, 6, 7, 8, 9, 10, :next_page, :last_page], tags_for(User.page(7).per(2))
assert_equal [:first_page, :prev_page, 1, :gap, 7, 8, 9, 10, :next_page, :last_page], tags_for(User.page(8).per(2))
assert_equal [:first_page, :prev_page, 1, :gap, 8, 9, 10, :next_page, :last_page], tags_for(User.page(9).per(2))
assert_equal [:first_page, :prev_page, 1, :gap, 9, 10], tags_for(User.page(10).per(2))
end end
end end
end end