]> git.openstreetmap.org Git - rails.git/blob - test/helpers/numbered_pagination_helper_test.rb
Add links to versions with a fixed step
[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_middle
213     pagination = element_versions_pagination(50, :window_half_size => 3, :active_version => 43) { |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_ellipsis items.shift
221         check_version_link items.shift, sample_item_data(40)
222         check_version_link items.shift, sample_item_data(41)
223         check_version_link items.shift, sample_item_data(42)
224         check_version_link items.shift, sample_item_data(43), :active => true
225         check_version_link items.shift, sample_item_data(44)
226         check_version_link items.shift, sample_item_data(45)
227         check_version_link items.shift, sample_item_data(46)
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_end_touch
237     pagination = element_versions_pagination(50, :window_half_size => 3, :active_version => 46) { |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", 8 do |items|
244         check_version_ellipsis items.shift
245         check_version_link items.shift, sample_item_data(43)
246         check_version_link items.shift, sample_item_data(44)
247         check_version_link items.shift, sample_item_data(45)
248         check_version_link items.shift, sample_item_data(46), :active => true
249         check_version_link items.shift, sample_item_data(47)
250         check_version_link items.shift, sample_item_data(48)
251         check_version_link items.shift, sample_item_data(49)
252       end
253       assert_dom lists[2], "> li", 1 do |items|
254         check_version_link items.shift, sample_item_data(50)
255       end
256     end
257   end
258
259   def test_element_versions_pagination_window_end_beyond
260     pagination = element_versions_pagination(50, :window_half_size => 3) { |v| sample_item_data v }
261     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
262     assert_dom pagination_dom, "ul", :count => 3 do |lists|
263       assert_dom lists[0], "> li", 1 do |items|
264         check_version_link items.shift, sample_item_data(1)
265       end
266       assert_dom lists[1], "> li", 3 do |items|
267         check_version_ellipsis items.shift
268         check_version_link items.shift, sample_item_data(48)
269         check_version_link items.shift, sample_item_data(49)
270       end
271       assert_dom lists[2], "> li", 1 do |items|
272         check_version_link items.shift, sample_item_data(50)
273       end
274     end
275   end
276
277   def test_element_versions_pagination_step
278     pagination = element_versions_pagination(35, :step_size => 10, :window_half_size => 0) { |v| sample_item_data v }
279     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
280     assert_dom pagination_dom, "ul", :count => 3 do |lists|
281       assert_dom lists[0], "> li", 1 do |items|
282         check_version_link items.shift, sample_item_data(1)
283       end
284       assert_dom lists[1], "> li", 7 do |items|
285         check_version_ellipsis items.shift
286         check_version_link items.shift, sample_item_data(10)
287         check_version_ellipsis items.shift
288         check_version_link items.shift, sample_item_data(20)
289         check_version_ellipsis items.shift
290         check_version_link items.shift, sample_item_data(30)
291         check_version_ellipsis items.shift
292       end
293       assert_dom lists[2], "> li", 1 do |items|
294         check_version_link items.shift, sample_item_data(35)
295       end
296     end
297   end
298
299   def test_element_versions_pagination_step_end_touch
300     pagination = element_versions_pagination(31, :step_size => 10, :window_half_size => 0) { |v| sample_item_data v }
301     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
302     assert_dom pagination_dom, "ul", :count => 3 do |lists|
303       assert_dom lists[0], "> li", 1 do |items|
304         check_version_link items.shift, sample_item_data(1)
305       end
306       assert_dom lists[1], "> li", 6 do |items|
307         check_version_ellipsis items.shift
308         check_version_link items.shift, sample_item_data(10)
309         check_version_ellipsis items.shift
310         check_version_link items.shift, sample_item_data(20)
311         check_version_ellipsis items.shift
312         check_version_link items.shift, sample_item_data(30)
313       end
314       assert_dom lists[2], "> li", 1 do |items|
315         check_version_link items.shift, sample_item_data(31)
316       end
317     end
318   end
319
320   def test_element_versions_pagination_step_window
321     pagination = element_versions_pagination(35, :active_version => 15, :step_size => 10, :window_half_size => 1) { |v| sample_item_data v }
322     pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination)
323     assert_dom pagination_dom, "ul", :count => 3 do |lists|
324       assert_dom lists[0], "> li", 1 do |items|
325         check_version_link items.shift, sample_item_data(1)
326       end
327       assert_dom lists[1], "> li", 11 do |items|
328         check_version_ellipsis items.shift
329         check_version_link items.shift, sample_item_data(10)
330         check_version_ellipsis items.shift
331         check_version_link items.shift, sample_item_data(14)
332         check_version_link items.shift, sample_item_data(15), :active => true
333         check_version_link items.shift, sample_item_data(16)
334         check_version_ellipsis items.shift
335         check_version_link items.shift, sample_item_data(20)
336         check_version_ellipsis items.shift
337         check_version_link items.shift, sample_item_data(30)
338         check_version_ellipsis items.shift
339       end
340       assert_dom lists[2], "> li", 1 do |items|
341         check_version_link items.shift, sample_item_data(35)
342       end
343     end
344   end
345
346   def test_element_versions_pagination_step_window_touch
347     pagination = element_versions_pagination(35, :active_version => 12, :step_size => 10, :window_half_size => 1) { |v| sample_item_data v }
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_version_link items.shift, sample_item_data(1)
352       end
353       assert_dom lists[1], "> li", 10 do |items|
354         check_version_ellipsis items.shift
355         check_version_link items.shift, sample_item_data(10)
356         check_version_link items.shift, sample_item_data(11)
357         check_version_link items.shift, sample_item_data(12), :active => true
358         check_version_link items.shift, sample_item_data(13)
359         check_version_ellipsis items.shift
360         check_version_link items.shift, sample_item_data(20)
361         check_version_ellipsis items.shift
362         check_version_link items.shift, sample_item_data(30)
363         check_version_ellipsis items.shift
364       end
365       assert_dom lists[2], "> li", 1 do |items|
366         check_version_link items.shift, sample_item_data(35)
367       end
368     end
369   end
370
371   private
372
373   def sample_item_data(version)
374     { :href => "test/version/#{version}", :title => "Version ##{version}" }
375   end
376
377   def check_version_link(*elements, data, active: false)
378     assert_dom(*elements, "> @class", active ? "page-item active" : "page-item")
379     assert_dom(*elements, "> a", 1) do
380       assert_dom "> @href", data[:href]
381       assert_dom "> @title", data[:title]
382     end
383   end
384
385   def check_version_ellipsis(*elements)
386     assert_dom(*elements, "> @class", "page-item disabled")
387     assert_dom(*elements, "> a", 0)
388     assert_dom(*elements, "> span", 1, "...")
389   end
390 end