diff --git a/lib/redmine/pagination.rb b/lib/redmine/pagination.rb index 889e0f5cb..97d04dcf9 100644 --- a/lib/redmine/pagination.rb +++ b/lib/redmine/pagination.rb @@ -208,22 +208,30 @@ module Redmine # Renders the "Per page" links. def per_page_links(selected=nil, item_count=nil, &block) - values = Setting.per_page_options_array - if item_count && values.any? - if item_count > values.first - max = values.detect {|value| value >= item_count} || item_count + values = per_page_options(selected, item_count) + if values.any? + links = values.collect do |n| + n == selected ? n : yield(n, :per_page => n) + end + l(:label_display_per_page, links.join(', ')) + end + end + + def per_page_options(selected=nil, item_count=nil) + options = Setting.per_page_options_array + if item_count && options.any? + if item_count > options.first + max = options.detect {|value| value >= item_count} || item_count else max = item_count end - values = values.select {|value| value <= max || value == selected} + options = options.select {|value| value <= max || value == selected} end - if values.empty? || (values.size == 1 && values.first == selected) - return nil + if options.empty? || (options.size == 1 && options.first == selected) + [] + else + options end - links = values.collect do |n| - n == selected ? n : yield(n, :per_page => n) - end - l(:label_display_per_page, links.join(', ')) end end end diff --git a/test/unit/helpers/application_helper_test.rb b/test/unit/helpers/application_helper_test.rb index e9ecc4328..b1f7ce552 100644 --- a/test/unit/helpers/application_helper_test.rb +++ b/test/unit/helpers/application_helper_test.rb @@ -1146,19 +1146,4 @@ RAW def test_javascript_include_tag_for_plugin_should_pick_the_plugin_javascript assert_match 'src="/plugin_assets/foo/javascripts/scripts.js"', javascript_include_tag("scripts", :plugin => :foo) end - - def test_per_page_links_should_show_usefull_values - set_language_if_valid 'en' - stubs(:link_to).returns("[link]") - - with_settings :per_page_options => '10, 25, 50, 100' do - assert_nil per_page_links(10, 3) - assert_nil per_page_links(25, 3) - assert_equal "Per page: 10, [link]", per_page_links(10, 22) - assert_equal "Per page: [link], 25", per_page_links(25, 22) - assert_equal "Per page: [link], [link], 50", per_page_links(50, 22) - assert_equal "Per page: [link], 25, [link]", per_page_links(25, 26) - assert_equal "Per page: [link], 25, [link], [link]", per_page_links(25, 120) - end - end end diff --git a/test/unit/lib/redmine/pagination_helper_test.rb b/test/unit/lib/redmine/pagination_helper_test.rb new file mode 100644 index 000000000..ed7e30d51 --- /dev/null +++ b/test/unit/lib/redmine/pagination_helper_test.rb @@ -0,0 +1,34 @@ +# Redmine - project management software +# Copyright (C) 2006-2012 Jean-Philippe Lang +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +require File.expand_path('../../../../test_helper', __FILE__) + +class ApplicationHelperTest < ActionView::TestCase + include Redmine::Pagination::Helper + + def test_per_page_options_should_return_usefull_values + with_settings :per_page_options => '10, 25, 50, 100' do + assert_equal [], per_page_options(10, 3) + assert_equal [], per_page_options(25, 3) + assert_equal [10, 25], per_page_options(10, 22) + assert_equal [10, 25], per_page_options(25, 22) + assert_equal [10, 25, 50], per_page_options(50, 22) + assert_equal [10, 25, 50], per_page_options(25, 26) + assert_equal [10, 25, 50, 100], per_page_options(25, 120) + end + end +end