summaryrefslogtreecommitdiff
path: root/vendor/plugins/will_paginate/test/view_test.rb
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/plugins/will_paginate/test/view_test.rb')
-rw-r--r--vendor/plugins/will_paginate/test/view_test.rb365
1 files changed, 0 insertions, 365 deletions
diff --git a/vendor/plugins/will_paginate/test/view_test.rb b/vendor/plugins/will_paginate/test/view_test.rb
deleted file mode 100644
index 3ada457..0000000
--- a/vendor/plugins/will_paginate/test/view_test.rb
+++ /dev/null
@@ -1,365 +0,0 @@
1require 'helper'
2require 'lib/view_test_process'
3
4class AdditionalLinkAttributesRenderer < WillPaginate::LinkRenderer
5 def initialize(link_attributes = nil)
6 super()
7 @additional_link_attributes = link_attributes || { :default => 'true' }
8 end
9
10 def page_link(page, text, attributes = {})
11 @template.link_to text, url_for(page), attributes.merge(@additional_link_attributes)
12 end
13end
14
15class ViewTest < WillPaginate::ViewTestCase
16
17 ## basic pagination ##
18
19 def test_will_paginate
20 paginate do |pagination|
21 assert_select 'a[href]', 3 do |elements|
22 validate_page_numbers [2,3,2], elements
23 assert_select elements.last, ':last-child', "Next &raquo;"
24 end
25 assert_select 'span', 2
26 assert_select 'span.disabled:first-child', '&laquo; Previous'
27 assert_select 'span.current', '1'
28 assert_equal '&laquo; Previous 1 2 3 Next &raquo;', pagination.first.inner_text
29 end
30 end
31
32 def test_no_pagination_when_page_count_is_one
33 paginate :per_page => 30
34 assert_equal '', @html_result
35 end
36
37 def test_will_paginate_with_options
38 paginate({ :page => 2 },
39 :class => 'will_paginate', :previous_label => 'Prev', :next_label => 'Next') do
40 assert_select 'a[href]', 4 do |elements|
41 validate_page_numbers [1,1,3,3], elements
42 # test rel attribute values:
43 assert_select elements[1], 'a', '1' do |link|
44 assert_equal 'prev start', link.first['rel']
45 end
46 assert_select elements.first, 'a', "Prev" do |link|
47 assert_equal 'prev start', link.first['rel']
48 end
49 assert_select elements.last, 'a', "Next" do |link|
50 assert_equal 'next', link.first['rel']
51 end
52 end
53 assert_select 'span.current', '2'
54 end
55 end
56
57 def test_will_paginate_using_renderer_class
58 paginate({}, :renderer => AdditionalLinkAttributesRenderer) do
59 assert_select 'a[default=true]', 3
60 end
61 end
62
63 def test_will_paginate_using_renderer_instance
64 renderer = WillPaginate::LinkRenderer.new
65 renderer.gap_marker = '<span class="my-gap">~~</span>'
66
67 paginate({ :per_page => 2 }, :inner_window => 0, :outer_window => 0, :renderer => renderer) do
68 assert_select 'span.my-gap', '~~'
69 end
70
71 renderer = AdditionalLinkAttributesRenderer.new(:title => 'rendered')
72 paginate({}, :renderer => renderer) do
73 assert_select 'a[title=rendered]', 3
74 end
75 end
76
77 def test_prev_next_links_have_classnames
78 paginate do |pagination|
79 assert_select 'span.disabled.prev_page:first-child'
80 assert_select 'a.next_page[href]:last-child'
81 end
82 end
83
84 def test_prev_label_deprecated
85 assert_deprecated ':previous_label' do
86 paginate({ :page => 2 }, :prev_label => 'Deprecated') do
87 assert_select 'a[href]:first-child', 'Deprecated'
88 end
89 end
90 end
91
92 def test_full_output
93 paginate
94 expected = <<-HTML
95 <div class="pagination"><span class="disabled prev_page">&laquo; Previous</span>
96 <span class="current">1</span>
97 <a href="/foo/bar?page=2" rel="next">2</a>
98 <a href="/foo/bar?page=3">3</a>
99 <a href="/foo/bar?page=2" class="next_page" rel="next">Next &raquo;</a></div>
100 HTML
101 expected.strip!.gsub!(/\s{2,}/, ' ')
102
103 assert_dom_equal expected, @html_result
104 end
105
106 def test_escaping_of_urls
107 paginate({:page => 1, :per_page => 1, :total_entries => 2},
108 :page_links => false, :params => { :tag => '<br>' })
109
110 assert_select 'a[href]', 1 do |links|
111 query = links.first['href'].split('?', 2)[1]
112 assert_equal %w(page=2 tag=%3Cbr%3E), query.split('&amp;').sort
113 end
114 end
115
116 ## advanced options for pagination ##
117
118 def test_will_paginate_without_container
119 paginate({}, :container => false)
120 assert_select 'div.pagination', 0, 'main DIV present when it shouldn\'t'
121 assert_select 'a[href]', 3
122 end
123
124 def test_will_paginate_without_page_links
125 paginate({ :page => 2 }, :page_links => false) do
126 assert_select 'a[href]', 2 do |elements|
127 validate_page_numbers [1,3], elements
128 end
129 end
130 end
131
132 def test_will_paginate_windows
133 paginate({ :page => 6, :per_page => 1 }, :inner_window => 1) do |pagination|
134 assert_select 'a[href]', 8 do |elements|
135 validate_page_numbers [5,1,2,5,7,10,11,7], elements
136 assert_select elements.first, 'a', '&laquo; Previous'
137 assert_select elements.last, 'a', 'Next &raquo;'
138 end
139 assert_select 'span.current', '6'
140 assert_equal '&laquo; Previous 1 2 &hellip; 5 6 7 &hellip; 10 11 Next &raquo;', pagination.first.inner_text
141 end
142 end
143
144 def test_will_paginate_eliminates_small_gaps
145 paginate({ :page => 6, :per_page => 1 }, :inner_window => 2) do
146 assert_select 'a[href]', 12 do |elements|
147 validate_page_numbers [5,1,2,3,4,5,7,8,9,10,11,7], elements
148 end
149 end
150 end
151
152 def test_container_id
153 paginate do |div|
154 assert_nil div.first['id']
155 end
156
157 # magic ID
158 paginate({}, :id => true) do |div|
159 assert_equal 'fixnums_pagination', div.first['id']
160 end
161
162 # explicit ID
163 paginate({}, :id => 'custom_id') do |div|
164 assert_equal 'custom_id', div.first['id']
165 end
166 end
167
168 ## other helpers ##
169
170 def test_paginated_section
171 @template = <<-ERB
172 <% paginated_section collection, options do %>
173 <%= content_tag :div, '', :id => "developers" %>
174 <% end %>
175 ERB
176
177 paginate
178 assert_select 'div.pagination', 2
179 assert_select 'div.pagination + div#developers', 1
180 end
181
182 def test_page_entries_info
183 @template = '<%= page_entries_info collection %>'
184 array = ('a'..'z').to_a
185
186 paginate array.paginate(:page => 2, :per_page => 5)
187 assert_equal %{Displaying strings <b>6&nbsp;-&nbsp;10</b> of <b>26</b> in total},
188 @html_result
189
190 paginate array.paginate(:page => 7, :per_page => 4)
191 assert_equal %{Displaying strings <b>25&nbsp;-&nbsp;26</b> of <b>26</b> in total},
192 @html_result
193 end
194
195 uses_mocha 'class name' do
196 def test_page_entries_info_with_longer_class_name
197 @template = '<%= page_entries_info collection %>'
198 collection = ('a'..'z').to_a.paginate
199 collection.first.stubs(:class).returns(mock('class', :name => 'ProjectType'))
200
201 paginate collection
202 assert @html_result.index('project types'), "expected <#{@html_result.inspect}> to mention 'project types'"
203 end
204 end
205
206 def test_page_entries_info_with_single_page_collection
207 @template = '<%= page_entries_info collection %>'
208
209 paginate(('a'..'d').to_a.paginate(:page => 1, :per_page => 5))
210 assert_equal %{Displaying <b>all 4</b> strings}, @html_result
211
212 paginate(['a'].paginate(:page => 1, :per_page => 5))
213 assert_equal %{Displaying <b>1</b> string}, @html_result
214
215 paginate([].paginate(:page => 1, :per_page => 5))
216 assert_equal %{No entries found}, @html_result
217 end
218
219 def test_page_entries_info_with_custom_entry_name
220 @template = '<%= page_entries_info collection, :entry_name => "author" %>'
221
222 entries = (1..20).to_a
223
224 paginate(entries.paginate(:page => 1, :per_page => 5))
225 assert_equal %{Displaying authors <b>1&nbsp;-&nbsp;5</b> of <b>20</b> in total}, @html_result
226
227 paginate(entries.paginate(:page => 1, :per_page => 20))
228 assert_equal %{Displaying <b>all 20</b> authors}, @html_result
229
230 paginate(['a'].paginate(:page => 1, :per_page => 5))
231 assert_equal %{Displaying <b>1</b> author}, @html_result
232
233 paginate([].paginate(:page => 1, :per_page => 5))
234 assert_equal %{No authors found}, @html_result
235 end
236
237 ## parameter handling in page links ##
238
239 def test_will_paginate_preserves_parameters_on_get
240 @request.params :foo => { :bar => 'baz' }
241 paginate
242 assert_links_match /foo%5Bbar%5D=baz/
243 end
244
245 def test_will_paginate_doesnt_preserve_parameters_on_post
246 @request.post
247 @request.params :foo => 'bar'
248 paginate
249 assert_no_links_match /foo=bar/
250 end
251
252 def test_adding_additional_parameters
253 paginate({}, :params => { :foo => 'bar' })
254 assert_links_match /foo=bar/
255 end
256
257 def test_adding_anchor_parameter
258 paginate({}, :params => { :anchor => 'anchor' })
259 assert_links_match /#anchor$/
260 end
261
262 def test_removing_arbitrary_parameters
263 @request.params :foo => 'bar'
264 paginate({}, :params => { :foo => nil })
265 assert_no_links_match /foo=bar/
266 end
267
268 def test_adding_additional_route_parameters
269 paginate({}, :params => { :controller => 'baz', :action => 'list' })
270 assert_links_match %r{\Wbaz/list\W}
271 end
272
273 def test_will_paginate_with_custom_page_param
274 paginate({ :page => 2 }, :param_name => :developers_page) do
275 assert_select 'a[href]', 4 do |elements|
276 validate_page_numbers [1,1,3,3], elements, :developers_page
277 end
278 end
279 end
280
281 def test_complex_custom_page_param
282 @request.params :developers => { :page => 2 }
283
284 paginate({ :page => 2 }, :param_name => 'developers[page]') do
285 assert_select 'a[href]', 4 do |links|
286 assert_links_match /\?developers%5Bpage%5D=\d+$/, links
287 validate_page_numbers [1,1,3,3], links, 'developers[page]'
288 end
289 end
290 end
291
292 def test_custom_routing_page_param
293 @request.symbolized_path_parameters.update :controller => 'dummy', :action => nil
294 paginate :per_page => 2 do
295 assert_select 'a[href]', 6 do |links|
296 assert_links_match %r{/page/(\d+)$}, links, [2, 3, 4, 5, 6, 2]
297 end
298 end
299 end
300
301 def test_custom_routing_page_param_with_dot_separator
302 @request.symbolized_path_parameters.update :controller => 'dummy', :action => 'dots'
303 paginate :per_page => 2 do
304 assert_select 'a[href]', 6 do |links|
305 assert_links_match %r{/page\.(\d+)$}, links, [2, 3, 4, 5, 6, 2]
306 end
307 end
308 end
309
310 def test_custom_routing_with_first_page_hidden
311 @request.symbolized_path_parameters.update :controller => 'ibocorp', :action => nil
312 paginate :page => 2, :per_page => 2 do
313 assert_select 'a[href]', 7 do |links|
314 assert_links_match %r{/ibocorp(?:/(\d+))?$}, links, [nil, nil, 3, 4, 5, 6, 3]
315 end
316 end
317 end
318
319 ## internal hardcore stuff ##
320
321 class LegacyCollection < WillPaginate::Collection
322 alias :page_count :total_pages
323 undef :total_pages
324 end
325
326 def test_deprecation_notices_with_page_count
327 collection = LegacyCollection.new(1, 1, 2)
328
329 assert_deprecated collection.class.name do
330 paginate collection
331 end
332 end
333
334 uses_mocha 'view internals' do
335 def test_collection_name_can_be_guessed
336 collection = mock
337 collection.expects(:total_pages).returns(1)
338
339 @template = '<%= will_paginate options %>'
340 @controller.controller_name = 'developers'
341 @view.assigns['developers'] = collection
342
343 paginate(nil)
344 end
345 end
346
347 def test_inferred_collection_name_raises_error_when_nil
348 @template = '<%= will_paginate options %>'
349 @controller.controller_name = 'developers'
350
351 e = assert_raise ArgumentError do
352 paginate(nil)
353 end
354 assert e.message.include?('@developers')
355 end
356
357 if ActionController::Base.respond_to? :rescue_responses
358 # only on Rails 2
359 def test_rescue_response_hook_presence
360 assert_equal :not_found,
361 ActionController::Base.rescue_responses['WillPaginate::InvalidPage']
362 end
363 end
364
365end