sort_helper_test.rb 3.15 KB
Newer Older
jplang's avatar
jplang committed
1
# Redmine - project management software
jplang's avatar
jplang committed
2
# Copyright (C) 2006-2017  Jean-Philippe Lang
jplang's avatar
jplang committed
3 4 5 6 7
#
# 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.
8
#
jplang's avatar
jplang committed
9 10 11 12
# 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.
13
#
jplang's avatar
jplang committed
14 15 16 17
# 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.

18
require File.expand_path('../../test_helper', __FILE__)
jplang's avatar
jplang committed
19

jplang's avatar
jplang committed
20
class SortHelperTest < Redmine::HelperTest
jplang's avatar
jplang committed
21
  include SortHelper
jplang's avatar
jplang committed
22
  include ERB::Util
23

jplang's avatar
jplang committed
24
  def setup
25
    super
jplang's avatar
jplang committed
26 27 28
    @session = nil
    @sort_param = nil
  end
29

jplang's avatar
jplang committed
30 31 32 33
  def test_default_sort_clause_with_array
    sort_init 'attr1', 'desc'
    sort_update(['attr1', 'attr2'])

34
    assert_equal ['attr1 DESC'], sort_clause
jplang's avatar
jplang committed
35
  end
36

jplang's avatar
jplang committed
37 38 39 40
  def test_default_sort_clause_with_hash
    sort_init 'attr1', 'desc'
    sort_update({'attr1' => 'table1.attr1', 'attr2' => 'table2.attr2'})

41
    assert_equal ['table1.attr1 DESC'], sort_clause
jplang's avatar
jplang committed
42
  end
43

jplang's avatar
jplang committed
44 45 46 47
  def test_default_sort_clause_with_multiple_columns
    sort_init 'attr1', 'desc'
    sort_update({'attr1' => ['table1.attr1', 'table1.attr2'], 'attr2' => 'table2.attr2'})

48
    assert_equal ['table1.attr1 DESC', 'table1.attr2 DESC'], sort_clause
jplang's avatar
jplang committed
49
  end
50

jplang's avatar
jplang committed
51 52
  def test_params_sort
    @sort_param = 'attr1,attr2:desc'
53

jplang's avatar
jplang committed
54 55 56
    sort_init 'attr1', 'desc'
    sort_update({'attr1' => 'table1.attr1', 'attr2' => 'table2.attr2'})

jplang's avatar
jplang committed
57
    assert_equal ['table1.attr1 ASC', 'table2.attr2 DESC'], sort_clause
jplang's avatar
jplang committed
58 59
    assert_equal 'attr1,attr2:desc', @session['foo_bar_sort']
  end
60

jplang's avatar
jplang committed
61 62
  def test_invalid_params_sort
    @sort_param = 'invalid_key'
63

jplang's avatar
jplang committed
64 65 66
    sort_init 'attr1', 'desc'
    sort_update({'attr1' => 'table1.attr1', 'attr2' => 'table2.attr2'})

67 68
    assert_nil sort_clause
    assert_equal 'invalid_key', @session['foo_bar_sort']
jplang's avatar
jplang committed
69
  end
70

jplang's avatar
jplang committed
71 72
  def test_invalid_order_params_sort
    @sort_param = 'attr1:foo:bar,attr2'
73

jplang's avatar
jplang committed
74 75 76
    sort_init 'attr1', 'desc'
    sort_update({'attr1' => 'table1.attr1', 'attr2' => 'table2.attr2'})

jplang's avatar
jplang committed
77
    assert_equal ['table1.attr1 ASC', 'table2.attr2 ASC'], sort_clause
jplang's avatar
jplang committed
78 79
    assert_equal 'attr1,attr2', @session['foo_bar_sort']
  end
80

81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
  def test_sort_css_without_params_should_use_default_sort
    sort_init 'attr1', 'desc'
    sort_update(['attr1', 'attr2'])

    assert_equal 'sort-by-attr1 sort-desc', sort_css_classes
  end

  def test_sort_css_should_use_params
    @sort_param = 'attr2,attr1'
    sort_init 'attr1', 'desc'
    sort_update(['attr1', 'attr2'])

    assert_equal 'sort-by-attr2 sort-asc', sort_css_classes
  end

  def test_sort_css_should_dasherize_sort_name
    sort_init 'foo_bar'
    sort_update(['foo_bar'])

    assert_equal 'sort-by-foo-bar sort-asc', sort_css_classes
  end

jplang's avatar
jplang committed
103
  private
104

jplang's avatar
jplang committed
105 106 107 108 109
  def controller_name; 'foo'; end
  def action_name; 'bar'; end
  def params; {:sort => @sort_param}; end
  def session; @session ||= {}; end
end