1 # frozen_string_literal: true
 
   5 class NumberedPaginationHelperTest < ActionView::TestCase
 
   6   def test_numbered_pagination1
 
   7     pagination = numbered_pagination(1, "active_page") { |n| sample_item_data n }
 
   8     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
 
   9     assert_dom pagination_dom, "ul", :count => 1 do
 
  10       assert_dom "> li", 1 do
 
  11         check_page_link sample_item_data(1)
 
  16   def test_numbered_pagination1_active1
 
  17     pagination = numbered_pagination(1, "active_page", :active_page => 1) { |n| sample_item_data n }
 
  18     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
 
  19     assert_dom pagination_dom, "ul", :count => 1 do
 
  20       assert_dom "> li", 1 do
 
  21         check_page_link sample_item_data(1), :active => true
 
  26   def test_numbered_pagination5
 
  27     pagination = numbered_pagination(5, "active_page") { |n| sample_item_data n }
 
  28     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
 
  29     assert_dom pagination_dom, "ul", :count => 1 do
 
  30       assert_dom "> li", 5 do |items|
 
  31         items.each_with_index do |item, i|
 
  32           check_page_link item, sample_item_data(i + 1)
 
  38   def test_numbered_pagination6
 
  39     pagination = numbered_pagination(6, "active_page") { |n| sample_item_data n }
 
  40     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
 
  41     assert_dom pagination_dom, "ul", :count => 3 do |lists|
 
  42       assert_dom lists[0], "> li", 1 do
 
  43         check_page_link sample_item_data(1)
 
  45       assert_dom lists[1], "> li", 4 do |items|
 
  46         items.each_with_index do |item, i|
 
  47           check_page_link item, sample_item_data(i + 2)
 
  50       assert_dom lists[2], "> li", 1 do
 
  51         check_page_link sample_item_data(6)
 
  56   def test_numbered_pagination6_active1
 
  57     pagination = numbered_pagination(6, "active_page", :active_page => 1) { |n| sample_item_data n }
 
  58     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
 
  59     assert_dom pagination_dom, "ul", :count => 3 do |lists|
 
  60       assert_dom lists[0], "> li", 2 do |items|
 
  61         check_page_link items.shift, sample_item_data(1), :active => true
 
  62         check_page_link items.shift, sample_item_data(2)
 
  64       assert_dom lists[1], "> li", 3 do |items|
 
  65         check_page_link items.shift, sample_item_data(3)
 
  66         check_page_link items.shift, sample_item_data(4)
 
  67         check_page_link items.shift, sample_item_data(5)
 
  69       assert_dom lists[2], "> li", 1 do |items|
 
  70         check_page_link items.shift, sample_item_data(6)
 
  75   def test_numbered_pagination6_active2
 
  76     pagination = numbered_pagination(6, "active_page", :active_page => 2) { |n| sample_item_data n }
 
  77     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
 
  78     assert_dom pagination_dom, "ul", :count => 3 do |lists|
 
  79       assert_dom lists[0], "> li", 3 do |items|
 
  80         check_page_link items.shift, sample_item_data(1)
 
  81         check_page_link items.shift, sample_item_data(2), :active => true
 
  82         check_page_link items.shift, sample_item_data(3)
 
  84       assert_dom lists[1], "> li", 2 do |items|
 
  85         check_page_link items.shift, sample_item_data(4)
 
  86         check_page_link items.shift, sample_item_data(5)
 
  88       assert_dom lists[2], "> li", 1 do |items|
 
  89         check_page_link items.shift, sample_item_data(6)
 
  94   def test_numbered_pagination6_active3
 
  95     pagination = numbered_pagination(6, "active_page", :active_page => 3) { |n| sample_item_data n }
 
  96     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
 
  97     assert_dom pagination_dom, "ul", :count => 3 do |lists|
 
  98       assert_dom lists[0], "> li", 1 do |items|
 
  99         check_page_link items.shift, sample_item_data(1)
 
 101       assert_dom lists[1], "> li", 4 do |items|
 
 102         check_page_link items.shift, sample_item_data(2)
 
 103         check_page_link items.shift, sample_item_data(3), :active => true
 
 104         check_page_link items.shift, sample_item_data(4)
 
 105         check_page_link items.shift, sample_item_data(5)
 
 107       assert_dom lists[2], "> li", 1 do |items|
 
 108         check_page_link items.shift, sample_item_data(6)
 
 113   def test_numbered_pagination6_active4
 
 114     pagination = numbered_pagination(6, "active_page", :active_page => 4) { |n| sample_item_data n }
 
 115     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
 
 116     assert_dom pagination_dom, "ul", :count => 3 do |lists|
 
 117       assert_dom lists[0], "> li", 1 do |items|
 
 118         check_page_link items.shift, sample_item_data(1)
 
 120       assert_dom lists[1], "> li", 4 do |items|
 
 121         check_page_link items.shift, sample_item_data(2)
 
 122         check_page_link items.shift, sample_item_data(3)
 
 123         check_page_link items.shift, sample_item_data(4), :active => true
 
 124         check_page_link items.shift, sample_item_data(5)
 
 126       assert_dom lists[2], "> li", 1 do |items|
 
 127         check_page_link items.shift, sample_item_data(6)
 
 132   def test_numbered_pagination6_active5
 
 133     pagination = numbered_pagination(6, "active_page", :active_page => 5) { |n| sample_item_data n }
 
 134     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
 
 135     assert_dom pagination_dom, "ul", :count => 3 do |lists|
 
 136       assert_dom lists[0], "> li", 1 do |items|
 
 137         check_page_link items.shift, sample_item_data(1)
 
 139       assert_dom lists[1], "> li", 2 do |items|
 
 140         check_page_link items.shift, sample_item_data(2)
 
 141         check_page_link items.shift, sample_item_data(3)
 
 143       assert_dom lists[2], "> li", 3 do |items|
 
 144         check_page_link items.shift, sample_item_data(4)
 
 145         check_page_link items.shift, sample_item_data(5), :active => true
 
 146         check_page_link items.shift, sample_item_data(6)
 
 151   def test_numbered_pagination6_active6
 
 152     pagination = numbered_pagination(6, "active_page", :active_page => 6) { |n| sample_item_data n }
 
 153     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
 
 154     assert_dom pagination_dom, "ul", :count => 3 do |lists|
 
 155       assert_dom lists[0], "> li", 1 do |items|
 
 156         check_page_link items.shift, sample_item_data(1)
 
 158       assert_dom lists[1], "> li", 3 do |items|
 
 159         check_page_link items.shift, sample_item_data(2)
 
 160         check_page_link items.shift, sample_item_data(3)
 
 161         check_page_link items.shift, sample_item_data(4)
 
 163       assert_dom lists[2], "> li", 2 do |items|
 
 164         check_page_link items.shift, sample_item_data(5)
 
 165         check_page_link items.shift, sample_item_data(6), :active => true
 
 170   def test_numbered_pagination_window_start_include
 
 171     pagination = numbered_pagination(50, "active_page", :window_half_size => 3, :active_page => 3) { |n| sample_item_data n }
 
 172     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
 
 173     assert_dom pagination_dom, "ul", :count => 3 do |lists|
 
 174       assert_dom lists[0], "> li", 1 do |items|
 
 175         check_page_link items.shift, sample_item_data(1)
 
 177       assert_dom lists[1], "> li", 6 do |items|
 
 178         check_page_link items.shift, sample_item_data(2)
 
 179         check_page_link items.shift, sample_item_data(3), :active => true
 
 180         check_page_link items.shift, sample_item_data(4)
 
 181         check_page_link items.shift, sample_item_data(5)
 
 182         check_page_link items.shift, sample_item_data(6)
 
 183         check_page_ellipsis items.shift
 
 185       assert_dom lists[2], "> li", 1 do |items|
 
 186         check_page_link items.shift, sample_item_data(50)
 
 191   def test_numbered_pagination_window_start_touch
 
 192     pagination = numbered_pagination(50, "active_page", :window_half_size => 3, :active_page => 5) { |n| sample_item_data n }
 
 193     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
 
 194     assert_dom pagination_dom, "ul", :count => 3 do |lists|
 
 195       assert_dom lists[0], "> li", 1 do |items|
 
 196         check_page_link items.shift, sample_item_data(1)
 
 198       assert_dom lists[1], "> li", 8 do |items|
 
 199         check_page_link items.shift, sample_item_data(2)
 
 200         check_page_link items.shift, sample_item_data(3)
 
 201         check_page_link items.shift, sample_item_data(4)
 
 202         check_page_link items.shift, sample_item_data(5), :active => true
 
 203         check_page_link items.shift, sample_item_data(6)
 
 204         check_page_link items.shift, sample_item_data(7)
 
 205         check_page_link items.shift, sample_item_data(8)
 
 206         check_page_ellipsis items.shift
 
 208       assert_dom lists[2], "> li", 1 do |items|
 
 209         check_page_link items.shift, sample_item_data(50)
 
 214   def test_numbered_pagination_window_start_touch_almost
 
 215     pagination = numbered_pagination(50, "active_page", :window_half_size => 3, :active_page => 6) { |n| sample_item_data n }
 
 216     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
 
 217     assert_dom pagination_dom, "ul", :count => 3 do |lists|
 
 218       assert_dom lists[0], "> li", 1 do |items|
 
 219         check_page_link items.shift, sample_item_data(1)
 
 221       assert_dom lists[1], "> li", 9 do |items|
 
 222         check_page_link items.shift, sample_item_data(2)
 
 223         check_page_link items.shift, sample_item_data(3)
 
 224         check_page_link items.shift, sample_item_data(4)
 
 225         check_page_link items.shift, sample_item_data(5)
 
 226         check_page_link items.shift, sample_item_data(6), :active => true
 
 227         check_page_link items.shift, sample_item_data(7)
 
 228         check_page_link items.shift, sample_item_data(8)
 
 229         check_page_link items.shift, sample_item_data(9)
 
 230         check_page_ellipsis items.shift
 
 232       assert_dom lists[2], "> li", 1 do |items|
 
 233         check_page_link items.shift, sample_item_data(50)
 
 238   def test_numbered_pagination_window_middle
 
 239     pagination = numbered_pagination(50, "active_page", :window_half_size => 3, :active_page => 43) { |n| sample_item_data n }
 
 240     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
 
 241     assert_dom pagination_dom, "ul", :count => 3 do |lists|
 
 242       assert_dom lists[0], "> li", 1 do |items|
 
 243         check_page_link items.shift, sample_item_data(1)
 
 245       assert_dom lists[1], "> li", 9 do |items|
 
 246         check_page_ellipsis items.shift
 
 247         check_page_link items.shift, sample_item_data(40)
 
 248         check_page_link items.shift, sample_item_data(41)
 
 249         check_page_link items.shift, sample_item_data(42)
 
 250         check_page_link items.shift, sample_item_data(43), :active => true
 
 251         check_page_link items.shift, sample_item_data(44)
 
 252         check_page_link items.shift, sample_item_data(45)
 
 253         check_page_link items.shift, sample_item_data(46)
 
 254         check_page_ellipsis items.shift
 
 256       assert_dom lists[2], "> li", 1 do |items|
 
 257         check_page_link items.shift, sample_item_data(50)
 
 262   def test_numbered_pagination_window_end_touch
 
 263     pagination = numbered_pagination(50, "active_page", :window_half_size => 3, :active_page => 46) { |n| sample_item_data n }
 
 264     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
 
 265     assert_dom pagination_dom, "ul", :count => 3 do |lists|
 
 266       assert_dom lists[0], "> li", 1 do |items|
 
 267         check_page_link items.shift, sample_item_data(1)
 
 269       assert_dom lists[1], "> li", 8 do |items|
 
 270         check_page_ellipsis items.shift
 
 271         check_page_link items.shift, sample_item_data(43)
 
 272         check_page_link items.shift, sample_item_data(44)
 
 273         check_page_link items.shift, sample_item_data(45)
 
 274         check_page_link items.shift, sample_item_data(46), :active => true
 
 275         check_page_link items.shift, sample_item_data(47)
 
 276         check_page_link items.shift, sample_item_data(48)
 
 277         check_page_link items.shift, sample_item_data(49)
 
 279       assert_dom lists[2], "> li", 1 do |items|
 
 280         check_page_link items.shift, sample_item_data(50)
 
 285   def test_numbered_pagination_window_end_beyond
 
 286     pagination = numbered_pagination(50, "active_page", :window_half_size => 3) { |n| sample_item_data n }
 
 287     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
 
 288     assert_dom pagination_dom, "ul", :count => 3 do |lists|
 
 289       assert_dom lists[0], "> li", 1 do |items|
 
 290         check_page_link items.shift, sample_item_data(1)
 
 292       assert_dom lists[1], "> li", 3 do |items|
 
 293         check_page_ellipsis items.shift
 
 294         check_page_link items.shift, sample_item_data(48)
 
 295         check_page_link items.shift, sample_item_data(49)
 
 297       assert_dom lists[2], "> li", 1 do |items|
 
 298         check_page_link items.shift, sample_item_data(50)
 
 303   def test_numbered_pagination_step
 
 304     pagination = numbered_pagination(35, "active_page", :step_size => 10, :window_half_size => 0) { |n| sample_item_data n }
 
 305     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
 
 306     assert_dom pagination_dom, "ul", :count => 3 do |lists|
 
 307       assert_dom lists[0], "> li", 1 do |items|
 
 308         check_page_link items.shift, sample_item_data(1)
 
 310       assert_dom lists[1], "> li", 7 do |items|
 
 311         check_page_ellipsis items.shift
 
 312         check_page_link items.shift, sample_item_data(10)
 
 313         check_page_ellipsis items.shift
 
 314         check_page_link items.shift, sample_item_data(20)
 
 315         check_page_ellipsis items.shift
 
 316         check_page_link items.shift, sample_item_data(30)
 
 317         check_page_ellipsis items.shift
 
 319       assert_dom lists[2], "> li", 1 do |items|
 
 320         check_page_link items.shift, sample_item_data(35)
 
 325   def test_numbered_pagination_step_end_touch
 
 326     pagination = numbered_pagination(31, "active_page", :step_size => 10, :window_half_size => 0) { |n| sample_item_data n }
 
 327     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
 
 328     assert_dom pagination_dom, "ul", :count => 3 do |lists|
 
 329       assert_dom lists[0], "> li", 1 do |items|
 
 330         check_page_link items.shift, sample_item_data(1)
 
 332       assert_dom lists[1], "> li", 6 do |items|
 
 333         check_page_ellipsis items.shift
 
 334         check_page_link items.shift, sample_item_data(10)
 
 335         check_page_ellipsis items.shift
 
 336         check_page_link items.shift, sample_item_data(20)
 
 337         check_page_ellipsis items.shift
 
 338         check_page_link items.shift, sample_item_data(30)
 
 340       assert_dom lists[2], "> li", 1 do |items|
 
 341         check_page_link items.shift, sample_item_data(31)
 
 346   def test_numbered_pagination_step_window
 
 347     pagination = numbered_pagination(35, "active_page", :active_page => 15, :step_size => 10, :window_half_size => 1) { |n| sample_item_data n }
 
 348     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
 
 349     assert_dom pagination_dom, "ul", :count => 3 do |lists|
 
 350       assert_dom lists[0], "> li", 1 do |items|
 
 351         check_page_link items.shift, sample_item_data(1)
 
 353       assert_dom lists[1], "> li", 11 do |items|
 
 354         check_page_ellipsis items.shift
 
 355         check_page_link items.shift, sample_item_data(10)
 
 356         check_page_ellipsis items.shift
 
 357         check_page_link items.shift, sample_item_data(14)
 
 358         check_page_link items.shift, sample_item_data(15), :active => true
 
 359         check_page_link items.shift, sample_item_data(16)
 
 360         check_page_ellipsis items.shift
 
 361         check_page_link items.shift, sample_item_data(20)
 
 362         check_page_ellipsis items.shift
 
 363         check_page_link items.shift, sample_item_data(30)
 
 364         check_page_ellipsis items.shift
 
 366       assert_dom lists[2], "> li", 1 do |items|
 
 367         check_page_link items.shift, sample_item_data(35)
 
 372   def test_numbered_pagination_step_window_touch
 
 373     pagination = numbered_pagination(35, "active_page", :active_page => 12, :step_size => 10, :window_half_size => 1) { |n| sample_item_data n }
 
 374     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
 
 375     assert_dom pagination_dom, "ul", :count => 3 do |lists|
 
 376       assert_dom lists[0], "> li", 1 do |items|
 
 377         check_page_link items.shift, sample_item_data(1)
 
 379       assert_dom lists[1], "> li", 10 do |items|
 
 380         check_page_ellipsis items.shift
 
 381         check_page_link items.shift, sample_item_data(10)
 
 382         check_page_link items.shift, sample_item_data(11)
 
 383         check_page_link items.shift, sample_item_data(12), :active => true
 
 384         check_page_link items.shift, sample_item_data(13)
 
 385         check_page_ellipsis items.shift
 
 386         check_page_link items.shift, sample_item_data(20)
 
 387         check_page_ellipsis items.shift
 
 388         check_page_link items.shift, sample_item_data(30)
 
 389         check_page_ellipsis items.shift
 
 391       assert_dom lists[2], "> li", 1 do |items|
 
 392         check_page_link items.shift, sample_item_data(35)
 
 399   def sample_item_data(n)
 
 400     { :href => "test/version/#{n}", :title => "Version ##{n}" }
 
 403   def check_page_link(*elements, data, active: false)
 
 404     assert_dom(*elements, "> @class", active ? "page-item active" : "page-item")
 
 405     assert_dom(*elements, "> a", 1) do
 
 406       assert_dom "> @href", data[:href]
 
 407       assert_dom "> @title", data[:title]
 
 411   def check_page_ellipsis(*elements)
 
 412     assert_dom(*elements, "> @class", "page-item disabled")
 
 413     assert_dom(*elements, "> a", 0)
 
 414     assert_dom(*elements, "> span", 1, "...")