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, "...")