1 require File.dirname(__FILE__) + '/helper'
2 require 'will_paginate'
3 require 'will_paginate/core_ext'
5 class ArrayPaginationTest < Test::Unit::TestCase
7 collection = ('a'..'e').to_a
9 [{ :page => 1, :per_page => 3, :expected => %w( a b c ) },
10 { :page => 2, :per_page => 3, :expected => %w( d e ) },
11 { :page => 1, :per_page => 5, :expected => %w( a b c d e ) },
12 { :page => 3, :per_page => 5, :expected => [] },
13 { :page => -1, :per_page => 5, :expected => [] },
14 { :page => 1, :per_page => -5, :expected => [] },
17 assert_equal conditions[:expected], collection.paginate(conditions.slice(:page, :per_page))
22 result = (1..50).to_a.paginate
23 assert_equal 1, result.current_page
24 assert_equal 30, result.size
27 def test_deprecated_api
28 assert_deprecated 'paginate API' do
29 result = (1..50).to_a.paginate(2, 10)
30 assert_equal 2, result.current_page
31 assert_equal (11..20).to_a, result
32 assert_equal 50, result.total_entries
35 assert_deprecated { [].paginate nil }
38 def test_total_entries_has_precedence
39 result = %w(a b c).paginate :total_entries => 5
40 assert_equal 5, result.total_entries
43 def test_argument_error_with_params_and_another_argument
44 assert_raise ArgumentError do
49 def test_paginated_collection
51 collection = create(2, 3, 10) do |pager|
52 assert_equal entries, pager.replace(entries)
55 assert_equal entries, collection
56 assert_respond_to_all collection, %w(page_count each offset size current_page per_page total_entries)
57 assert_kind_of Array, collection
58 assert_instance_of Array, collection.entries
59 assert_equal 3, collection.offset
60 assert_equal 4, collection.page_count
61 assert !collection.out_of_bounds?
64 def test_out_of_bounds
65 entries = create(2, 3, 2){}
66 assert entries.out_of_bounds?
68 entries = create(0, 3, 2){}
69 assert entries.out_of_bounds?
71 entries = create(1, 3, 2){}
72 assert !entries.out_of_bounds?
75 def test_guessing_total_count
76 entries = create do |pager|
77 # collection is shorter than limit
80 assert_equal 8, entries.total_entries
82 entries = create(2, 5, 10) do |pager|
83 # collection is shorter than limit, but we have an explicit count
86 assert_equal 10, entries.total_entries
88 entries = create do |pager|
89 # collection is the same as limit; we can't guess
90 pager.replace array(5)
92 assert_equal nil, entries.total_entries
94 entries = create do |pager|
95 # collection is empty; we can't guess
96 pager.replace array(0)
98 assert_equal nil, entries.total_entries
102 def create(page = 2, limit = 5, total = nil, &block)
103 WillPaginate::Collection.create(page, limit, total, &block)
110 def collect_deprecations
111 old_behavior = WillPaginate::Deprecation.behavior
113 WillPaginate::Deprecation.behavior = Proc.new do |message, callstack|
114 deprecations << message
117 [result, deprecations]
119 WillPaginate::Deprecation.behavior = old_behavior