]> git.openstreetmap.org Git - rails.git/blob - test/helpers/numbered_pagination_helper_test.rb
Merge pull request #5932 from tomhughes/frozen-strings
[rails.git] / test / helpers / numbered_pagination_helper_test.rb
1 # frozen_string_literal: true
2
3 require "test_helper"
4
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)
12       end
13     end
14   end
15
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
22       end
23     end
24   end
25
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)
33         end
34       end
35     end
36   end
37
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)
44       end
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)
48         end
49       end
50       assert_dom lists[2], "> li", 1 do
51         check_page_link sample_item_data(6)
52       end
53     end
54   end
55
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)
63       end
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)
68       end
69       assert_dom lists[2], "> li", 1 do |items|
70         check_page_link items.shift, sample_item_data(6)
71       end
72     end
73   end
74
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)
83       end
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)
87       end
88       assert_dom lists[2], "> li", 1 do |items|
89         check_page_link items.shift, sample_item_data(6)
90       end
91     end
92   end
93
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)
100       end
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)
106       end
107       assert_dom lists[2], "> li", 1 do |items|
108         check_page_link items.shift, sample_item_data(6)
109       end
110     end
111   end
112
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)
119       end
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)
125       end
126       assert_dom lists[2], "> li", 1 do |items|
127         check_page_link items.shift, sample_item_data(6)
128       end
129     end
130   end
131
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)
138       end
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)
142       end
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)
147       end
148     end
149   end
150
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)
157       end
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)
162       end
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
166       end
167     end
168   end
169
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)
176       end
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
184       end
185       assert_dom lists[2], "> li", 1 do |items|
186         check_page_link items.shift, sample_item_data(50)
187       end
188     end
189   end
190
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)
197       end
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
207       end
208       assert_dom lists[2], "> li", 1 do |items|
209         check_page_link items.shift, sample_item_data(50)
210       end
211     end
212   end
213
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)
220       end
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
231       end
232       assert_dom lists[2], "> li", 1 do |items|
233         check_page_link items.shift, sample_item_data(50)
234       end
235     end
236   end
237
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)
244       end
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
255       end
256       assert_dom lists[2], "> li", 1 do |items|
257         check_page_link items.shift, sample_item_data(50)
258       end
259     end
260   end
261
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)
268       end
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)
278       end
279       assert_dom lists[2], "> li", 1 do |items|
280         check_page_link items.shift, sample_item_data(50)
281       end
282     end
283   end
284
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)
291       end
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)
296       end
297       assert_dom lists[2], "> li", 1 do |items|
298         check_page_link items.shift, sample_item_data(50)
299       end
300     end
301   end
302
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)
309       end
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
318       end
319       assert_dom lists[2], "> li", 1 do |items|
320         check_page_link items.shift, sample_item_data(35)
321       end
322     end
323   end
324
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)
331       end
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)
339       end
340       assert_dom lists[2], "> li", 1 do |items|
341         check_page_link items.shift, sample_item_data(31)
342       end
343     end
344   end
345
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)
352       end
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
365       end
366       assert_dom lists[2], "> li", 1 do |items|
367         check_page_link items.shift, sample_item_data(35)
368       end
369     end
370   end
371
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)
378       end
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
390       end
391       assert_dom lists[2], "> li", 1 do |items|
392         check_page_link items.shift, sample_item_data(35)
393       end
394     end
395   end
396
397   private
398
399   def sample_item_data(n)
400     { :href => "test/version/#{n}", :title => "Version ##{n}" }
401   end
402
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]
408     end
409   end
410
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, "...")
415   end
416 end