Mercurial > hg > soundsoftware-site
comparison test/unit/lib/redmine/menu_manager/menu_helper_test.rb @ 0:513646585e45
* Import Redmine trunk SVN rev 3859
author | Chris Cannam |
---|---|
date | Fri, 23 Jul 2010 15:52:44 +0100 |
parents | |
children | af80e5618e9b |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:513646585e45 |
---|---|
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.dirname(__FILE__) + '/../../../../test_helper' | |
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 |