To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.

Statistics Download as Zip
| Branch: | Tag: | Revision:

root / test / unit / lib / redmine / menu_manager / menu_helper_test.rb @ 441:cbce1fd3b1b7

History | View | Annotate | Download (10.4 KB)

1
# Redmine - project management software
2
# Copyright (C) 2006-2009  Jean-Philippe Lang
3
#
4
# This program is free software; you can redistribute it and/or
5
# modify it under the terms of the GNU General Public License
6
# as published by the Free Software Foundation; either version 2
7
# of the License, or (at your option) any later version.
8
# 
9
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
# GNU General Public License for more details.
13
# 
14
# You should have received a copy of the GNU General Public License
15
# along with this program; if not, write to the Free Software
16
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
17

    
18
require File.expand_path('../../../../../test_helper', __FILE__)
19

    
20

    
21

    
22
class Redmine::MenuManager::MenuHelperTest < HelperTestCase
23
  include Redmine::MenuManager::MenuHelper
24
  include ActionController::Assertions::SelectorAssertions
25
  fixtures :users, :members, :projects, :enabled_modules
26

    
27
  # Used by assert_select
28
  def html_document
29
    HTML::Document.new(@response.body)
30
  end
31
  
32
  def setup
33
    super
34
    @response = ActionController::TestResponse.new
35
    # Stub the current menu item in the controller
36
    def @controller.current_menu_item
37
      :index
38
    end
39
  end
40
  
41

    
42
  context "MenuManager#current_menu_item" do
43
    should "be tested"
44
  end
45

    
46
  context "MenuManager#render_main_menu" do
47
    should "be tested"
48
  end
49

    
50
  context "MenuManager#render_menu" do
51
    should "be tested"
52
  end
53

    
54
  context "MenuManager#menu_item_and_children" do
55
    should "be tested"
56
  end
57

    
58
  context "MenuManager#extract_node_details" do
59
    should "be tested"
60
  end
61

    
62
  def test_render_single_menu_node
63
    node = Redmine::MenuManager::MenuItem.new(:testing, '/test', { })
64
    @response.body = render_single_menu_node(node, 'This is a test', node.url, false)
65

    
66
    assert_select("a.testing", "This is a test")
67
  end
68

    
69
  def test_render_menu_node
70
    single_node = Redmine::MenuManager::MenuItem.new(:single_node, '/test', { })
71
    @response.body = render_menu_node(single_node, nil)
72

    
73
    assert_select("li") do
74
      assert_select("a.single-node", "Single node")
75
    end
76
  end
77
  
78
  def test_render_menu_node_with_nested_items
79
    parent_node = Redmine::MenuManager::MenuItem.new(:parent_node, '/test', { })
80
    parent_node << Redmine::MenuManager::MenuItem.new(:child_one_node, '/test', { })
81
    parent_node << Redmine::MenuManager::MenuItem.new(:child_two_node, '/test', { })
82
    parent_node <<
83
      Redmine::MenuManager::MenuItem.new(:child_three_node, '/test', { }) <<
84
      Redmine::MenuManager::MenuItem.new(:child_three_inner_node, '/test', { })
85

    
86
    @response.body = render_menu_node(parent_node, nil)
87

    
88
    assert_select("li") do
89
      assert_select("a.parent-node", "Parent node")
90
      assert_select("ul") do
91
        assert_select("li a.child-one-node", "Child one node")
92
        assert_select("li a.child-two-node", "Child two node")
93
        assert_select("li") do
94
          assert_select("a.child-three-node", "Child three node")
95
          assert_select("ul") do
96
            assert_select("li a.child-three-inner-node", "Child three inner node")
97
          end
98
        end
99
      end
100
    end
101
    
102
  end
103

    
104
  def test_render_menu_node_with_children
105
    User.current = User.find(2)
106
    
107
    parent_node = Redmine::MenuManager::MenuItem.new(:parent_node,
108
                                                     '/test',
109
                                                     {
110
                                                       :children => Proc.new {|p|
111
                                                         children = []
112
                                                         3.times do |time|
113
                                                           children << Redmine::MenuManager::MenuItem.new("test_child_#{time}",
114
                                                                                                             {:controller => 'issues', :action => 'index'},
115
                                                                                                             {})
116
                                                         end
117
                                                         children
118
                                                       }
119
                                                     })
120
    @response.body = render_menu_node(parent_node, Project.find(1))
121

    
122
    assert_select("li") do
123
      assert_select("a.parent-node", "Parent node")
124
      assert_select("ul") do
125
        assert_select("li a.test-child-0", "Test child 0")
126
        assert_select("li a.test-child-1", "Test child 1")
127
        assert_select("li a.test-child-2", "Test child 2")
128
      end
129
    end
130
  end
131

    
132
  def test_render_menu_node_with_nested_items_and_children
133
    User.current = User.find(2)
134

    
135
    parent_node = Redmine::MenuManager::MenuItem.new(:parent_node,
136
                                                     '/test',
137
                                                     {
138
                                                       :children => Proc.new {|p|
139
                                                         children = []
140
                                                         3.times do |time|
141
                                                           children << Redmine::MenuManager::MenuItem.new("test_child_#{time}", {:controller => 'issues', :action => 'index'}, {})
142
                                                         end
143
                                                         children
144
                                                       }
145
                                                     })
146

    
147
    parent_node << Redmine::MenuManager::MenuItem.new(:child_node,
148
                                                     '/test',
149
                                                     {
150
                                                       :children => Proc.new {|p|
151
                                                         children = []
152
                                                         6.times do |time|
153
                                                            children << Redmine::MenuManager::MenuItem.new("test_dynamic_child_#{time}", {:controller => 'issues', :action => 'index'}, {})
154
                                                         end
155
                                                         children
156
                                                       }
157
                                                     })
158

    
159
    @response.body = render_menu_node(parent_node, Project.find(1))
160

    
161
    assert_select("li") do
162
      assert_select("a.parent-node", "Parent node")
163
      assert_select("ul") do
164
        assert_select("li a.child-node", "Child node")
165
        assert_select("ul") do
166
          assert_select("li a.test-dynamic-child-0", "Test dynamic child 0")
167
          assert_select("li a.test-dynamic-child-1", "Test dynamic child 1")
168
          assert_select("li a.test-dynamic-child-2", "Test dynamic child 2")
169
          assert_select("li a.test-dynamic-child-3", "Test dynamic child 3")
170
          assert_select("li a.test-dynamic-child-4", "Test dynamic child 4")
171
          assert_select("li a.test-dynamic-child-5", "Test dynamic child 5")
172
        end
173
        assert_select("li a.test-child-0", "Test child 0")
174
        assert_select("li a.test-child-1", "Test child 1")
175
        assert_select("li a.test-child-2", "Test child 2")
176
      end
177
    end
178
  end
179

    
180
  def test_render_menu_node_with_children_without_an_array
181
    parent_node = Redmine::MenuManager::MenuItem.new(:parent_node,
182
                                                     '/test',
183
                                                     {
184
                                                       :children => Proc.new {|p| Redmine::MenuManager::MenuItem.new("test_child", "/testing", {})}
185
                                                     })
186

    
187
    assert_raises Redmine::MenuManager::MenuError, ":children must be an array of MenuItems" do
188
      @response.body = render_menu_node(parent_node, Project.find(1))
189
    end
190
  end
191
    
192
  def test_render_menu_node_with_incorrect_children
193
    parent_node = Redmine::MenuManager::MenuItem.new(:parent_node,
194
                                                     '/test',
195
                                                     {
196
                                                       :children => Proc.new {|p| ["a string"] }
197
                                                     })
198

    
199
    assert_raises Redmine::MenuManager::MenuError, ":children must be an array of MenuItems" do
200
      @response.body = render_menu_node(parent_node, Project.find(1))
201
    end
202

    
203
  end
204

    
205
  def test_menu_items_for_should_yield_all_items_if_passed_a_block
206
    menu_name = :test_menu_items_for_should_yield_all_items_if_passed_a_block
207
    Redmine::MenuManager.map menu_name do |menu|
208
      menu.push(:a_menu, '/', { })
209
      menu.push(:a_menu_2, '/', { })
210
      menu.push(:a_menu_3, '/', { })
211
    end
212

    
213
    items_yielded = []
214
    menu_items_for(menu_name) do |item|
215
      items_yielded << item
216
    end
217
    
218
    assert_equal 3, items_yielded.size
219
  end
220

    
221
  def test_menu_items_for_should_return_all_items
222
    menu_name = :test_menu_items_for_should_return_all_items
223
    Redmine::MenuManager.map menu_name do |menu|
224
      menu.push(:a_menu, '/', { })
225
      menu.push(:a_menu_2, '/', { })
226
      menu.push(:a_menu_3, '/', { })
227
    end
228

    
229
    items = menu_items_for(menu_name)
230
    assert_equal 3, items.size
231
  end
232

    
233
  def test_menu_items_for_should_skip_unallowed_items_on_a_project
234
    menu_name = :test_menu_items_for_should_skip_unallowed_items_on_a_project
235
    Redmine::MenuManager.map menu_name do |menu|
236
      menu.push(:a_menu, {:controller => 'issues', :action => 'index' }, { })
237
      menu.push(:a_menu_2, {:controller => 'issues', :action => 'index' }, { })
238
      menu.push(:unallowed, {:controller => 'issues', :action => 'unallowed' }, { })
239
    end
240

    
241
    User.current = User.find(2)
242
    
243
    items = menu_items_for(menu_name, Project.find(1))
244
    assert_equal 2, items.size
245
  end
246
  
247
  def test_menu_items_for_should_skip_items_that_fail_the_conditions
248
    menu_name = :test_menu_items_for_should_skip_items_that_fail_the_conditions
249
    Redmine::MenuManager.map menu_name do |menu|
250
      menu.push(:a_menu, {:controller => 'issues', :action => 'index' }, { })
251
      menu.push(:unallowed,
252
                {:controller => 'issues', :action => 'index' },
253
                { :if => Proc.new { false }})
254
    end
255

    
256
    User.current = User.find(2)
257
    
258
    items = menu_items_for(menu_name, Project.find(1))
259
    assert_equal 1, items.size
260
  end
261

    
262
end