]> git.openstreetmap.org Git - rails.git/blob - test/helpers/numbered_pagination_helper_test.rb
Merge remote-tracking branch 'upstream/pull/6134'
[rails.git] / test / helpers / numbered_pagination_helper_test.rb
1 require "test_helper"
2
3 class NumberedPaginationHelperTest < ActionView::TestCase
4   def test_element_versions_pagination1
5     pagination = element_versions_pagination(1) { |v| sample_item_data v }
6     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
7     assert_dom pagination_dom, "ul", :count => 1 do
8       assert_dom "> li", 1 do
9         check_version_link sample_item_data(1)
10       end
11     end
12   end
13
14   def test_element_versions_pagination1_active1
15     pagination = element_versions_pagination(1, :active_version => 1) { |v| sample_item_data v }
16     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
17     assert_dom pagination_dom, "ul", :count => 1 do
18       assert_dom "> li", 1 do
19         check_version_link sample_item_data(1), :active => true
20       end
21     end
22   end
23
24   def test_element_versions_pagination5
25     pagination = element_versions_pagination(5) { |v| sample_item_data v }
26     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
27     assert_dom pagination_dom, "ul", :count => 1 do
28       assert_dom "> li", 5 do |items|
29         items.each_with_index do |item, i|
30           check_version_link item, sample_item_data(i + 1)
31         end
32       end
33     end
34   end
35
36   def test_element_versions_pagination6
37     pagination = element_versions_pagination(6) { |v| sample_item_data v }
38     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
39     assert_dom pagination_dom, "ul", :count => 3 do |lists|
40       assert_dom lists[0], "> li", 1 do
41         check_version_link sample_item_data(1)
42       end
43       assert_dom lists[1], "> li", 4 do |items|
44         items.each_with_index do |item, i|
45           check_version_link item, sample_item_data(i + 2)
46         end
47       end
48       assert_dom lists[2], "> li", 1 do
49         check_version_link sample_item_data(6)
50       end
51     end
52   end
53
54   def test_element_versions_pagination6_active1
55     pagination = element_versions_pagination(6, :active_version => 1) { |v| sample_item_data v }
56     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
57     assert_dom pagination_dom, "ul", :count => 3 do |lists|
58       assert_dom lists[0], "> li", 2 do |items|
59         check_version_link items.shift, sample_item_data(1), :active => true
60         check_version_link items.shift, sample_item_data(2)
61       end
62       assert_dom lists[1], "> li", 3 do |items|
63         check_version_link items.shift, sample_item_data(3)
64         check_version_link items.shift, sample_item_data(4)
65         check_version_link items.shift, sample_item_data(5)
66       end
67       assert_dom lists[2], "> li", 1 do |items|
68         check_version_link items.shift, sample_item_data(6)
69       end
70     end
71   end
72
73   def test_element_versions_pagination6_active2
74     pagination = element_versions_pagination(6, :active_version => 2) { |v| sample_item_data v }
75     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
76     assert_dom pagination_dom, "ul", :count => 3 do |lists|
77       assert_dom lists[0], "> li", 3 do |items|
78         check_version_link items.shift, sample_item_data(1)
79         check_version_link items.shift, sample_item_data(2), :active => true
80         check_version_link items.shift, sample_item_data(3)
81       end
82       assert_dom lists[1], "> li", 2 do |items|
83         check_version_link items.shift, sample_item_data(4)
84         check_version_link items.shift, sample_item_data(5)
85       end
86       assert_dom lists[2], "> li", 1 do |items|
87         check_version_link items.shift, sample_item_data(6)
88       end
89     end
90   end
91
92   def test_element_versions_pagination6_active3
93     pagination = element_versions_pagination(6, :active_version => 3) { |v| sample_item_data v }
94     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
95     assert_dom pagination_dom, "ul", :count => 3 do |lists|
96       assert_dom lists[0], "> li", 1 do |items|
97         check_version_link items.shift, sample_item_data(1)
98       end
99       assert_dom lists[1], "> li", 4 do |items|
100         check_version_link items.shift, sample_item_data(2)
101         check_version_link items.shift, sample_item_data(3), :active => true
102         check_version_link items.shift, sample_item_data(4)
103         check_version_link items.shift, sample_item_data(5)
104       end
105       assert_dom lists[2], "> li", 1 do |items|
106         check_version_link items.shift, sample_item_data(6)
107       end
108     end
109   end
110
111   def test_element_versions_pagination6_active4
112     pagination = element_versions_pagination(6, :active_version => 4) { |v| sample_item_data v }
113     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
114     assert_dom pagination_dom, "ul", :count => 3 do |lists|
115       assert_dom lists[0], "> li", 1 do |items|
116         check_version_link items.shift, sample_item_data(1)
117       end
118       assert_dom lists[1], "> li", 4 do |items|
119         check_version_link items.shift, sample_item_data(2)
120         check_version_link items.shift, sample_item_data(3)
121         check_version_link items.shift, sample_item_data(4), :active => true
122         check_version_link items.shift, sample_item_data(5)
123       end
124       assert_dom lists[2], "> li", 1 do |items|
125         check_version_link items.shift, sample_item_data(6)
126       end
127     end
128   end
129
130   def test_element_versions_pagination6_active5
131     pagination = element_versions_pagination(6, :active_version => 5) { |v| sample_item_data v }
132     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
133     assert_dom pagination_dom, "ul", :count => 3 do |lists|
134       assert_dom lists[0], "> li", 1 do |items|
135         check_version_link items.shift, sample_item_data(1)
136       end
137       assert_dom lists[1], "> li", 2 do |items|
138         check_version_link items.shift, sample_item_data(2)
139         check_version_link items.shift, sample_item_data(3)
140       end
141       assert_dom lists[2], "> li", 3 do |items|
142         check_version_link items.shift, sample_item_data(4)
143         check_version_link items.shift, sample_item_data(5), :active => true
144         check_version_link items.shift, sample_item_data(6)
145       end
146     end
147   end
148
149   def test_element_versions_pagination6_active6
150     pagination = element_versions_pagination(6, :active_version => 6) { |v| sample_item_data v }
151     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
152     assert_dom pagination_dom, "ul", :count => 3 do |lists|
153       assert_dom lists[0], "> li", 1 do |items|
154         check_version_link items.shift, sample_item_data(1)
155       end
156       assert_dom lists[1], "> li", 3 do |items|
157         check_version_link items.shift, sample_item_data(2)
158         check_version_link items.shift, sample_item_data(3)
159         check_version_link items.shift, sample_item_data(4)
160       end
161       assert_dom lists[2], "> li", 2 do |items|
162         check_version_link items.shift, sample_item_data(5)
163         check_version_link items.shift, sample_item_data(6), :active => true
164       end
165     end
166   end
167
168   def test_element_versions_pagination_window_start_include
169     pagination = element_versions_pagination(50, :window_half_size => 3, :active_version => 3) { |v| sample_item_data v }
170     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
171     assert_dom pagination_dom, "ul", :count => 3 do |lists|
172       assert_dom lists[0], "> li", 1 do |items|
173         check_version_link items.shift, sample_item_data(1)
174       end
175       assert_dom lists[1], "> li", 6 do |items|
176         check_version_link items.shift, sample_item_data(2)
177         check_version_link items.shift, sample_item_data(3), :active => true
178         check_version_link items.shift, sample_item_data(4)
179         check_version_link items.shift, sample_item_data(5)
180         check_version_link items.shift, sample_item_data(6)
181         check_version_ellipsis items.shift
182       end
183       assert_dom lists[2], "> li", 1 do |items|
184         check_version_link items.shift, sample_item_data(50)
185       end
186     end
187   end
188
189   def test_element_versions_pagination_window_start_touch
190     pagination = element_versions_pagination(50, :window_half_size => 3, :active_version => 5) { |v| sample_item_data v }
191     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
192     assert_dom pagination_dom, "ul", :count => 3 do |lists|
193       assert_dom lists[0], "> li", 1 do |items|
194         check_version_link items.shift, sample_item_data(1)
195       end
196       assert_dom lists[1], "> li", 8 do |items|
197         check_version_link items.shift, sample_item_data(2)
198         check_version_link items.shift, sample_item_data(3)
199         check_version_link items.shift, sample_item_data(4)
200         check_version_link items.shift, sample_item_data(5), :active => true
201         check_version_link items.shift, sample_item_data(6)
202         check_version_link items.shift, sample_item_data(7)
203         check_version_link items.shift, sample_item_data(8)
204         check_version_ellipsis items.shift
205       end
206       assert_dom lists[2], "> li", 1 do |items|
207         check_version_link items.shift, sample_item_data(50)
208       end
209     end
210   end
211
212   def test_element_versions_pagination_window_start_touch_almost
213     pagination = element_versions_pagination(50, :window_half_size => 3, :active_version => 6) { |v| sample_item_data v }
214     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
215     assert_dom pagination_dom, "ul", :count => 3 do |lists|
216       assert_dom lists[0], "> li", 1 do |items|
217         check_version_link items.shift, sample_item_data(1)
218       end
219       assert_dom lists[1], "> li", 9 do |items|
220         check_version_link items.shift, sample_item_data(2)
221         check_version_link items.shift, sample_item_data(3)
222         check_version_link items.shift, sample_item_data(4)
223         check_version_link items.shift, sample_item_data(5)
224         check_version_link items.shift, sample_item_data(6), :active => true
225         check_version_link items.shift, sample_item_data(7)
226         check_version_link items.shift, sample_item_data(8)
227         check_version_link items.shift, sample_item_data(9)
228         check_version_ellipsis items.shift
229       end
230       assert_dom lists[2], "> li", 1 do |items|
231         check_version_link items.shift, sample_item_data(50)
232       end
233     end
234   end
235
236   def test_element_versions_pagination_window_middle
237     pagination = element_versions_pagination(50, :window_half_size => 3, :active_version => 43) { |v| sample_item_data v }
238     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
239     assert_dom pagination_dom, "ul", :count => 3 do |lists|
240       assert_dom lists[0], "> li", 1 do |items|
241         check_version_link items.shift, sample_item_data(1)
242       end
243       assert_dom lists[1], "> li", 9 do |items|
244         check_version_ellipsis items.shift
245         check_version_link items.shift, sample_item_data(40)
246         check_version_link items.shift, sample_item_data(41)
247         check_version_link items.shift, sample_item_data(42)
248         check_version_link items.shift, sample_item_data(43), :active => true
249         check_version_link items.shift, sample_item_data(44)
250         check_version_link items.shift, sample_item_data(45)
251         check_version_link items.shift, sample_item_data(46)
252         check_version_ellipsis items.shift
253       end
254       assert_dom lists[2], "> li", 1 do |items|
255         check_version_link items.shift, sample_item_data(50)
256       end
257     end
258   end
259
260   def test_element_versions_pagination_window_end_touch
261     pagination = element_versions_pagination(50, :window_half_size => 3, :active_version => 46) { |v| sample_item_data v }
262     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
263     assert_dom pagination_dom, "ul", :count => 3 do |lists|
264       assert_dom lists[0], "> li", 1 do |items|
265         check_version_link items.shift, sample_item_data(1)
266       end
267       assert_dom lists[1], "> li", 8 do |items|
268         check_version_ellipsis items.shift
269         check_version_link items.shift, sample_item_data(43)
270         check_version_link items.shift, sample_item_data(44)
271         check_version_link items.shift, sample_item_data(45)
272         check_version_link items.shift, sample_item_data(46), :active => true
273         check_version_link items.shift, sample_item_data(47)
274         check_version_link items.shift, sample_item_data(48)
275         check_version_link items.shift, sample_item_data(49)
276       end
277       assert_dom lists[2], "> li", 1 do |items|
278         check_version_link items.shift, sample_item_data(50)
279       end
280     end
281   end
282
283   def test_element_versions_pagination_window_end_beyond
284     pagination = element_versions_pagination(50, :window_half_size => 3) { |v| sample_item_data v }
285     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
286     assert_dom pagination_dom, "ul", :count => 3 do |lists|
287       assert_dom lists[0], "> li", 1 do |items|
288         check_version_link items.shift, sample_item_data(1)
289       end
290       assert_dom lists[1], "> li", 3 do |items|
291         check_version_ellipsis items.shift
292         check_version_link items.shift, sample_item_data(48)
293         check_version_link items.shift, sample_item_data(49)
294       end
295       assert_dom lists[2], "> li", 1 do |items|
296         check_version_link items.shift, sample_item_data(50)
297       end
298     end
299   end
300
301   def test_element_versions_pagination_step
302     pagination = element_versions_pagination(35, :step_size => 10, :window_half_size => 0) { |v| sample_item_data v }
303     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
304     assert_dom pagination_dom, "ul", :count => 3 do |lists|
305       assert_dom lists[0], "> li", 1 do |items|
306         check_version_link items.shift, sample_item_data(1)
307       end
308       assert_dom lists[1], "> li", 7 do |items|
309         check_version_ellipsis items.shift
310         check_version_link items.shift, sample_item_data(10)
311         check_version_ellipsis items.shift
312         check_version_link items.shift, sample_item_data(20)
313         check_version_ellipsis items.shift
314         check_version_link items.shift, sample_item_data(30)
315         check_version_ellipsis items.shift
316       end
317       assert_dom lists[2], "> li", 1 do |items|
318         check_version_link items.shift, sample_item_data(35)
319       end
320     end
321   end
322
323   def test_element_versions_pagination_step_end_touch
324     pagination = element_versions_pagination(31, :step_size => 10, :window_half_size => 0) { |v| sample_item_data v }
325     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
326     assert_dom pagination_dom, "ul", :count => 3 do |lists|
327       assert_dom lists[0], "> li", 1 do |items|
328         check_version_link items.shift, sample_item_data(1)
329       end
330       assert_dom lists[1], "> li", 6 do |items|
331         check_version_ellipsis items.shift
332         check_version_link items.shift, sample_item_data(10)
333         check_version_ellipsis items.shift
334         check_version_link items.shift, sample_item_data(20)
335         check_version_ellipsis items.shift
336         check_version_link items.shift, sample_item_data(30)
337       end
338       assert_dom lists[2], "> li", 1 do |items|
339         check_version_link items.shift, sample_item_data(31)
340       end
341     end
342   end
343
344   def test_element_versions_pagination_step_window
345     pagination = element_versions_pagination(35, :active_version => 15, :step_size => 10, :window_half_size => 1) { |v| sample_item_data v }
346     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
347     assert_dom pagination_dom, "ul", :count => 3 do |lists|
348       assert_dom lists[0], "> li", 1 do |items|
349         check_version_link items.shift, sample_item_data(1)
350       end
351       assert_dom lists[1], "> li", 11 do |items|
352         check_version_ellipsis items.shift
353         check_version_link items.shift, sample_item_data(10)
354         check_version_ellipsis items.shift
355         check_version_link items.shift, sample_item_data(14)
356         check_version_link items.shift, sample_item_data(15), :active => true
357         check_version_link items.shift, sample_item_data(16)
358         check_version_ellipsis items.shift
359         check_version_link items.shift, sample_item_data(20)
360         check_version_ellipsis items.shift
361         check_version_link items.shift, sample_item_data(30)
362         check_version_ellipsis items.shift
363       end
364       assert_dom lists[2], "> li", 1 do |items|
365         check_version_link items.shift, sample_item_data(35)
366       end
367     end
368   end
369
370   def test_element_versions_pagination_step_window_touch
371     pagination = element_versions_pagination(35, :active_version => 12, :step_size => 10, :window_half_size => 1) { |v| sample_item_data v }
372     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
373     assert_dom pagination_dom, "ul", :count => 3 do |lists|
374       assert_dom lists[0], "> li", 1 do |items|
375         check_version_link items.shift, sample_item_data(1)
376       end
377       assert_dom lists[1], "> li", 10 do |items|
378         check_version_ellipsis items.shift
379         check_version_link items.shift, sample_item_data(10)
380         check_version_link items.shift, sample_item_data(11)
381         check_version_link items.shift, sample_item_data(12), :active => true
382         check_version_link items.shift, sample_item_data(13)
383         check_version_ellipsis items.shift
384         check_version_link items.shift, sample_item_data(20)
385         check_version_ellipsis items.shift
386         check_version_link items.shift, sample_item_data(30)
387         check_version_ellipsis items.shift
388       end
389       assert_dom lists[2], "> li", 1 do |items|
390         check_version_link items.shift, sample_item_data(35)
391       end
392     end
393   end
394
395   private
396
397   def sample_item_data(version)
398     { :href => "test/version/#{version}", :title => "Version ##{version}" }
399   end
400
401   def check_version_link(*elements, data, active: false)
402     assert_dom(*elements, "> @class", active ? "page-item active" : "page-item")
403     assert_dom(*elements, "> a", 1) do
404       assert_dom "> @href", data[:href]
405       assert_dom "> @title", data[:title]
406     end
407   end
408
409   def check_version_ellipsis(*elements)
410     assert_dom(*elements, "> @class", "page-item disabled")
411     assert_dom(*elements, "> a", 0)
412     assert_dom(*elements, "> span", 1, "...")
413   end
414 end