Mercurial > hg > soundsoftware-site
comparison test/functional/projects_controller_test.rb @ 511:107d36338b70 live
Merge from branch "cannam"
author | Chris Cannam |
---|---|
date | Thu, 14 Jul 2011 10:43:07 +0100 |
parents | cbce1fd3b1b7 |
children | cbb26bc654de |
comparison
equal
deleted
inserted
replaced
451:a9f6345cb43d | 511:107d36338b70 |
---|---|
1 # Redmine - project management software | 1 # Redmine - project management software |
2 # Copyright (C) 2006-2008 Jean-Philippe Lang | 2 # Copyright (C) 2006-2011 Jean-Philippe Lang |
3 # | 3 # |
4 # This program is free software; you can redistribute it and/or | 4 # This program is free software; you can redistribute it and/or |
5 # modify it under the terms of the GNU General Public License | 5 # modify it under the terms of the GNU General Public License |
6 # as published by the Free Software Foundation; either version 2 | 6 # as published by the Free Software Foundation; either version 2 |
7 # of the License, or (at your option) any later version. | 7 # of the License, or (at your option) any later version. |
8 # | 8 # |
9 # This program is distributed in the hope that it will be useful, | 9 # This program is distributed in the hope that it will be useful, |
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
12 # GNU General Public License for more details. | 12 # GNU General Public License for more details. |
13 # | 13 # |
14 # You should have received a copy of the GNU General Public License | 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 | 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. | 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
17 | 17 |
18 require File.dirname(__FILE__) + '/../test_helper' | 18 require File.expand_path('../../test_helper', __FILE__) |
19 require 'projects_controller' | 19 require 'projects_controller' |
20 | 20 |
21 # Re-raise errors caught by the controller. | 21 # Re-raise errors caught by the controller. |
22 class ProjectsController; def rescue_action(e) raise e end; end | 22 class ProjectsController; def rescue_action(e) raise e end; end |
23 | 23 |
31 @request = ActionController::TestRequest.new | 31 @request = ActionController::TestRequest.new |
32 @response = ActionController::TestResponse.new | 32 @response = ActionController::TestResponse.new |
33 @request.session[:user_id] = nil | 33 @request.session[:user_id] = nil |
34 Setting.default_language = 'en' | 34 Setting.default_language = 'en' |
35 end | 35 end |
36 | 36 |
37 def test_index | 37 def test_index |
38 get :index | 38 get :index |
39 assert_response :success | 39 assert_response :success |
40 assert_template 'index' | 40 assert_template 'index' |
41 assert_not_nil assigns(:projects) | 41 assert_not_nil assigns(:projects) |
42 | 42 |
43 assert_tag :ul, :child => {:tag => 'li', | 43 assert_tag :ul, :child => {:tag => 'li', |
44 :descendant => {:tag => 'a', :content => 'eCookbook'}, | 44 :descendant => {:tag => 'a', :content => 'eCookbook'}, |
45 :child => { :tag => 'ul', | 45 :child => { :tag => 'ul', |
46 :descendant => { :tag => 'a', | 46 :descendant => { :tag => 'a', |
47 :content => 'Child of private child' | 47 :content => 'Child of private child' |
48 } | 48 } |
49 } | 49 } |
50 } | 50 } |
51 | 51 |
52 assert_no_tag :a, :content => /Private child of eCookbook/ | 52 assert_no_tag :a, :content => /Private child of eCookbook/ |
53 end | 53 end |
54 | 54 |
55 def test_index_atom | 55 def test_index_atom |
56 get :index, :format => 'atom' | 56 get :index, :format => 'atom' |
57 assert_response :success | 57 assert_response :success |
58 assert_template 'common/feed.atom.rxml' | 58 assert_template 'common/feed.atom.rxml' |
59 assert_select 'feed>title', :text => 'Redmine: Latest projects' | 59 assert_select 'feed>title', :text => 'Redmine: Latest projects' |
60 assert_select 'feed>entry', :count => Project.count(:conditions => Project.visible_by(User.current)) | 60 assert_select 'feed>entry', :count => Project.count(:conditions => Project.visible_condition(User.current)) |
61 end | 61 end |
62 | 62 |
63 context "#index" do | 63 context "#index" do |
64 context "by non-admin user with view_time_entries permission" do | 64 context "by non-admin user with view_time_entries permission" do |
65 setup do | 65 setup do |
66 @request.session[:user_id] = 3 | 66 @request.session[:user_id] = 3 |
67 end | 67 end |
69 get :index | 69 get :index |
70 assert_template 'index' | 70 assert_template 'index' |
71 assert_tag :a, :attributes => {:href => '/time_entries'} | 71 assert_tag :a, :attributes => {:href => '/time_entries'} |
72 end | 72 end |
73 end | 73 end |
74 | 74 |
75 context "by non-admin user without view_time_entries permission" do | 75 context "by non-admin user without view_time_entries permission" do |
76 setup do | 76 setup do |
77 Role.find(2).remove_permission! :view_time_entries | 77 Role.find(2).remove_permission! :view_time_entries |
78 Role.non_member.remove_permission! :view_time_entries | 78 Role.non_member.remove_permission! :view_time_entries |
79 Role.anonymous.remove_permission! :view_time_entries | 79 Role.anonymous.remove_permission! :view_time_entries |
82 should "not show overall spent time link" do | 82 should "not show overall spent time link" do |
83 get :index | 83 get :index |
84 assert_template 'index' | 84 assert_template 'index' |
85 assert_no_tag :a, :attributes => {:href => '/time_entries'} | 85 assert_no_tag :a, :attributes => {:href => '/time_entries'} |
86 end | 86 end |
87 end | 87 end |
88 end | 88 end |
89 | 89 |
90 context "#new" do | 90 context "#new" do |
91 context "by admin user" do | 91 context "by admin user" do |
92 setup do | 92 setup do |
93 @request.session[:user_id] = 1 | 93 @request.session[:user_id] = 1 |
94 end | 94 end |
95 | 95 |
96 should "accept get" do | 96 should "accept get" do |
97 get :new | 97 get :new |
98 assert_response :success | 98 assert_response :success |
99 assert_template 'new' | 99 assert_template 'new' |
100 end | 100 end |
119 setup do | 119 setup do |
120 Role.find(1).remove_permission! :add_project | 120 Role.find(1).remove_permission! :add_project |
121 Role.find(1).add_permission! :add_subprojects | 121 Role.find(1).add_permission! :add_subprojects |
122 @request.session[:user_id] = 2 | 122 @request.session[:user_id] = 2 |
123 end | 123 end |
124 | 124 |
125 should "accept get" do | 125 should "accept get" do |
126 get :new, :parent_id => 'ecookbook' | 126 get :new, :parent_id => 'ecookbook' |
127 assert_response :success | 127 assert_response :success |
128 assert_template 'new' | 128 assert_template 'new' |
129 # parent project selected | 129 # parent project selected |
132 # no empty value | 132 # no empty value |
133 assert_no_tag :select, :attributes => {:name => 'project[parent_id]'}, | 133 assert_no_tag :select, :attributes => {:name => 'project[parent_id]'}, |
134 :child => {:tag => 'option', :attributes => {:value => ''}} | 134 :child => {:tag => 'option', :attributes => {:value => ''}} |
135 end | 135 end |
136 end | 136 end |
137 | 137 |
138 end | 138 end |
139 | 139 |
140 context "POST :create" do | 140 context "POST :create" do |
141 context "by admin user" do | 141 context "by admin user" do |
142 setup do | 142 setup do |
143 @request.session[:user_id] = 1 | 143 @request.session[:user_id] = 1 |
144 end | 144 end |
145 | 145 |
146 should "create a new project" do | 146 should "create a new project" do |
147 post :create, :project => { :name => "blog", | 147 post :create, |
148 :description => "weblog", | 148 :project => { |
149 :identifier => "blog", | 149 :name => "blog", |
150 :is_public => 1, | 150 :description => "weblog", |
151 :custom_field_values => { '3' => 'Beta' } | 151 :homepage => 'http://weblog', |
152 } | 152 :identifier => "blog", |
153 :is_public => 1, | |
154 :custom_field_values => { '3' => 'Beta' }, | |
155 :tracker_ids => ['1', '3'], | |
156 # an issue custom field that is not for all project | |
157 :issue_custom_field_ids => ['9'], | |
158 :enabled_module_names => ['issue_tracking', 'news', 'repository'] | |
159 } | |
153 assert_redirected_to '/projects/blog/settings' | 160 assert_redirected_to '/projects/blog/settings' |
154 | 161 |
155 project = Project.find_by_name('blog') | 162 project = Project.find_by_name('blog') |
156 assert_kind_of Project, project | 163 assert_kind_of Project, project |
157 assert_equal 'weblog', project.description | 164 assert project.active? |
165 assert_equal 'weblog', project.description | |
166 assert_equal 'http://weblog', project.homepage | |
158 assert_equal true, project.is_public? | 167 assert_equal true, project.is_public? |
159 assert_nil project.parent | 168 assert_nil project.parent |
160 end | 169 assert_equal 'Beta', project.custom_value_for(3).value |
161 | 170 assert_equal [1, 3], project.trackers.map(&:id).sort |
171 assert_equal ['issue_tracking', 'news', 'repository'], project.enabled_module_names.sort | |
172 assert project.issue_custom_fields.include?(IssueCustomField.find(9)) | |
173 end | |
174 | |
162 should "create a new subproject" do | 175 should "create a new subproject" do |
163 post :create, :project => { :name => "blog", | 176 post :create, :project => { :name => "blog", |
164 :description => "weblog", | 177 :description => "weblog", |
165 :identifier => "blog", | 178 :identifier => "blog", |
166 :is_public => 1, | 179 :is_public => 1, |
167 :custom_field_values => { '3' => 'Beta' }, | 180 :custom_field_values => { '3' => 'Beta' }, |
168 :parent_id => 1 | 181 :parent_id => 1 |
169 } | 182 } |
170 assert_redirected_to '/projects/blog/settings' | 183 assert_redirected_to '/projects/blog/settings' |
171 | 184 |
172 project = Project.find_by_name('blog') | 185 project = Project.find_by_name('blog') |
173 assert_kind_of Project, project | 186 assert_kind_of Project, project |
174 assert_equal Project.find(1), project.parent | 187 assert_equal Project.find(1), project.parent |
175 end | 188 end |
176 end | 189 end |
177 | 190 |
178 context "by non-admin user with add_project permission" do | 191 context "by non-admin user with add_project permission" do |
179 setup do | 192 setup do |
180 Role.non_member.add_permission! :add_project | 193 Role.non_member.add_permission! :add_project |
181 @request.session[:user_id] = 9 | 194 @request.session[:user_id] = 9 |
182 end | 195 end |
183 | 196 |
184 should "accept create a Project" do | 197 should "accept create a Project" do |
185 post :create, :project => { :name => "blog", | 198 post :create, :project => { :name => "blog", |
186 :description => "weblog", | 199 :description => "weblog", |
187 :identifier => "blog", | 200 :identifier => "blog", |
188 :is_public => 1, | 201 :is_public => 1, |
189 :custom_field_values => { '3' => 'Beta' } | 202 :custom_field_values => { '3' => 'Beta' }, |
203 :tracker_ids => ['1', '3'], | |
204 :enabled_module_names => ['issue_tracking', 'news', 'repository'] | |
190 } | 205 } |
191 | 206 |
192 assert_redirected_to '/projects/blog/settings' | 207 assert_redirected_to '/projects/blog/settings' |
193 | 208 |
194 project = Project.find_by_name('blog') | 209 project = Project.find_by_name('blog') |
195 assert_kind_of Project, project | 210 assert_kind_of Project, project |
196 assert_equal 'weblog', project.description | 211 assert_equal 'weblog', project.description |
197 assert_equal true, project.is_public? | 212 assert_equal true, project.is_public? |
198 | 213 assert_equal [1, 3], project.trackers.map(&:id).sort |
214 assert_equal ['issue_tracking', 'news', 'repository'], project.enabled_module_names.sort | |
215 | |
199 # User should be added as a project member | 216 # User should be added as a project member |
200 assert User.find(9).member_of?(project) | 217 assert User.find(9).member_of?(project) |
201 assert_equal 1, project.members.size | 218 assert_equal 1, project.members.size |
202 end | 219 end |
203 | 220 |
204 should "fail with parent_id" do | 221 should "fail with parent_id" do |
205 assert_no_difference 'Project.count' do | 222 assert_no_difference 'Project.count' do |
206 post :create, :project => { :name => "blog", | 223 post :create, :project => { :name => "blog", |
207 :description => "weblog", | 224 :description => "weblog", |
208 :identifier => "blog", | 225 :identifier => "blog", |
209 :is_public => 1, | 226 :is_public => 1, |
210 :custom_field_values => { '3' => 'Beta' }, | 227 :custom_field_values => { '3' => 'Beta' }, |
211 :parent_id => 1 | 228 :parent_id => 1 |
215 project = assigns(:project) | 232 project = assigns(:project) |
216 assert_kind_of Project, project | 233 assert_kind_of Project, project |
217 assert_not_nil project.errors.on(:parent_id) | 234 assert_not_nil project.errors.on(:parent_id) |
218 end | 235 end |
219 end | 236 end |
220 | 237 |
221 context "by non-admin user with add_subprojects permission" do | 238 context "by non-admin user with add_subprojects permission" do |
222 setup do | 239 setup do |
223 Role.find(1).remove_permission! :add_project | 240 Role.find(1).remove_permission! :add_project |
224 Role.find(1).add_permission! :add_subprojects | 241 Role.find(1).add_permission! :add_subprojects |
225 @request.session[:user_id] = 2 | 242 @request.session[:user_id] = 2 |
226 end | 243 end |
227 | 244 |
228 should "create a project with a parent_id" do | 245 should "create a project with a parent_id" do |
229 post :create, :project => { :name => "blog", | 246 post :create, :project => { :name => "blog", |
230 :description => "weblog", | 247 :description => "weblog", |
231 :identifier => "blog", | 248 :identifier => "blog", |
232 :is_public => 1, | 249 :is_public => 1, |
233 :custom_field_values => { '3' => 'Beta' }, | 250 :custom_field_values => { '3' => 'Beta' }, |
234 :parent_id => 1 | 251 :parent_id => 1 |
235 } | 252 } |
236 assert_redirected_to '/projects/blog/settings' | 253 assert_redirected_to '/projects/blog/settings' |
237 project = Project.find_by_name('blog') | 254 project = Project.find_by_name('blog') |
238 end | 255 end |
239 | 256 |
240 should "fail without parent_id" do | 257 should "fail without parent_id" do |
241 assert_no_difference 'Project.count' do | 258 assert_no_difference 'Project.count' do |
242 post :create, :project => { :name => "blog", | 259 post :create, :project => { :name => "blog", |
243 :description => "weblog", | 260 :description => "weblog", |
244 :identifier => "blog", | 261 :identifier => "blog", |
245 :is_public => 1, | 262 :is_public => 1, |
246 :custom_field_values => { '3' => 'Beta' } | 263 :custom_field_values => { '3' => 'Beta' } |
247 } | 264 } |
249 assert_response :success | 266 assert_response :success |
250 project = assigns(:project) | 267 project = assigns(:project) |
251 assert_kind_of Project, project | 268 assert_kind_of Project, project |
252 assert_not_nil project.errors.on(:parent_id) | 269 assert_not_nil project.errors.on(:parent_id) |
253 end | 270 end |
254 | 271 |
255 should "fail with unauthorized parent_id" do | 272 should "fail with unauthorized parent_id" do |
256 assert !User.find(2).member_of?(Project.find(6)) | 273 assert !User.find(2).member_of?(Project.find(6)) |
257 assert_no_difference 'Project.count' do | 274 assert_no_difference 'Project.count' do |
258 post :create, :project => { :name => "blog", | 275 post :create, :project => { :name => "blog", |
259 :description => "weblog", | 276 :description => "weblog", |
260 :identifier => "blog", | 277 :identifier => "blog", |
261 :is_public => 1, | 278 :is_public => 1, |
262 :custom_field_values => { '3' => 'Beta' }, | 279 :custom_field_values => { '3' => 'Beta' }, |
263 :parent_id => 6 | 280 :parent_id => 6 |
268 assert_kind_of Project, project | 285 assert_kind_of Project, project |
269 assert_not_nil project.errors.on(:parent_id) | 286 assert_not_nil project.errors.on(:parent_id) |
270 end | 287 end |
271 end | 288 end |
272 end | 289 end |
273 | 290 |
291 def test_create_should_preserve_modules_on_validation_failure | |
292 with_settings :default_projects_modules => ['issue_tracking', 'repository'] do | |
293 @request.session[:user_id] = 1 | |
294 assert_no_difference 'Project.count' do | |
295 post :create, :project => { | |
296 :name => "blog", | |
297 :identifier => "", | |
298 :enabled_module_names => %w(issue_tracking news) | |
299 } | |
300 end | |
301 assert_response :success | |
302 project = assigns(:project) | |
303 assert_equal %w(issue_tracking news), project.enabled_module_names.sort | |
304 end | |
305 end | |
306 | |
307 def test_create_should_not_accept_get | |
308 @request.session[:user_id] = 1 | |
309 get :create | |
310 assert_response :method_not_allowed | |
311 end | |
312 | |
274 def test_show_by_id | 313 def test_show_by_id |
275 get :show, :id => 1 | 314 get :show, :id => 1 |
276 assert_response :success | 315 assert_response :success |
277 assert_template 'show' | 316 assert_template 'show' |
278 assert_not_nil assigns(:project) | 317 assert_not_nil assigns(:project) |
282 get :show, :id => 'ecookbook' | 321 get :show, :id => 'ecookbook' |
283 assert_response :success | 322 assert_response :success |
284 assert_template 'show' | 323 assert_template 'show' |
285 assert_not_nil assigns(:project) | 324 assert_not_nil assigns(:project) |
286 assert_equal Project.find_by_identifier('ecookbook'), assigns(:project) | 325 assert_equal Project.find_by_identifier('ecookbook'), assigns(:project) |
287 | 326 |
288 assert_tag 'li', :content => /Development status/ | 327 assert_tag 'li', :content => /Development status/ |
289 end | 328 end |
290 | 329 |
291 def test_show_should_not_display_hidden_custom_fields | 330 def test_show_should_not_display_hidden_custom_fields |
292 ProjectCustomField.find_by_name('Development status').update_attribute :visible, false | 331 ProjectCustomField.find_by_name('Development status').update_attribute :visible, false |
293 get :show, :id => 'ecookbook' | 332 get :show, :id => 'ecookbook' |
294 assert_response :success | 333 assert_response :success |
295 assert_template 'show' | 334 assert_template 'show' |
296 assert_not_nil assigns(:project) | 335 assert_not_nil assigns(:project) |
297 | 336 |
298 assert_no_tag 'li', :content => /Development status/ | 337 assert_no_tag 'li', :content => /Development status/ |
299 end | 338 end |
300 | 339 |
301 def test_show_should_not_fail_when_custom_values_are_nil | 340 def test_show_should_not_fail_when_custom_values_are_nil |
302 project = Project.find_by_identifier('ecookbook') | 341 project = Project.find_by_identifier('ecookbook') |
303 project.custom_values.first.update_attribute(:value, nil) | 342 project.custom_values.first.update_attribute(:value, nil) |
304 get :show, :id => 'ecookbook' | 343 get :show, :id => 'ecookbook' |
305 assert_response :success | 344 assert_response :success |
306 assert_template 'show' | 345 assert_template 'show' |
307 assert_not_nil assigns(:project) | 346 assert_not_nil assigns(:project) |
308 assert_equal Project.find_by_identifier('ecookbook'), assigns(:project) | 347 assert_equal Project.find_by_identifier('ecookbook'), assigns(:project) |
309 end | 348 end |
310 | 349 |
311 def show_archived_project_should_be_denied | 350 def show_archived_project_should_be_denied |
312 project = Project.find_by_identifier('ecookbook') | 351 project = Project.find_by_identifier('ecookbook') |
313 project.archive! | 352 project.archive! |
314 | 353 |
315 get :show, :id => 'ecookbook' | 354 get :show, :id => 'ecookbook' |
316 assert_response 403 | 355 assert_response 403 |
317 assert_nil assigns(:project) | 356 assert_nil assigns(:project) |
318 assert_tag :tag => 'p', :content => /archived/ | 357 assert_tag :tag => 'p', :content => /archived/ |
319 end | 358 end |
320 | 359 |
321 def test_private_subprojects_hidden | 360 def test_private_subprojects_hidden |
322 get :show, :id => 'ecookbook' | 361 get :show, :id => 'ecookbook' |
323 assert_response :success | 362 assert_response :success |
324 assert_template 'show' | 363 assert_template 'show' |
325 assert_no_tag :tag => 'a', :content => /Private child/ | 364 assert_no_tag :tag => 'a', :content => /Private child/ |
330 get :show, :id => 'ecookbook' | 369 get :show, :id => 'ecookbook' |
331 assert_response :success | 370 assert_response :success |
332 assert_template 'show' | 371 assert_template 'show' |
333 assert_tag :tag => 'a', :content => /Private child/ | 372 assert_tag :tag => 'a', :content => /Private child/ |
334 end | 373 end |
335 | 374 |
336 def test_settings | 375 def test_settings |
337 @request.session[:user_id] = 2 # manager | 376 @request.session[:user_id] = 2 # manager |
338 get :settings, :id => 1 | 377 get :settings, :id => 1 |
339 assert_response :success | 378 assert_response :success |
340 assert_template 'settings' | 379 assert_template 'settings' |
341 end | 380 end |
342 | 381 |
343 def test_update | 382 def test_update |
344 @request.session[:user_id] = 2 # manager | 383 @request.session[:user_id] = 2 # manager |
345 post :update, :id => 1, :project => {:name => 'Test changed name', | 384 post :update, :id => 1, :project => {:name => 'Test changed name', |
346 :issue_custom_field_ids => ['']} | 385 :issue_custom_field_ids => ['']} |
347 assert_redirected_to '/projects/ecookbook/settings' | 386 assert_redirected_to '/projects/ecookbook/settings' |
348 project = Project.find(1) | 387 project = Project.find(1) |
349 assert_equal 'Test changed name', project.name | 388 assert_equal 'Test changed name', project.name |
350 end | 389 end |
351 | 390 |
391 def test_modules | |
392 @request.session[:user_id] = 2 | |
393 Project.find(1).enabled_module_names = ['issue_tracking', 'news'] | |
394 | |
395 post :modules, :id => 1, :enabled_module_names => ['issue_tracking', 'repository', 'documents'] | |
396 assert_redirected_to '/projects/ecookbook/settings/modules' | |
397 assert_equal ['documents', 'issue_tracking', 'repository'], Project.find(1).enabled_module_names.sort | |
398 end | |
399 | |
400 def test_modules_should_not_allow_get | |
401 @request.session[:user_id] = 1 | |
402 get :modules, :id => 1 | |
403 assert_response :method_not_allowed | |
404 end | |
405 | |
352 def test_get_destroy | 406 def test_get_destroy |
353 @request.session[:user_id] = 1 # admin | 407 @request.session[:user_id] = 1 # admin |
354 get :destroy, :id => 1 | 408 get :destroy, :id => 1 |
355 assert_response :success | 409 assert_response :success |
356 assert_template 'destroy' | 410 assert_template 'destroy' |
361 @request.session[:user_id] = 1 # admin | 415 @request.session[:user_id] = 1 # admin |
362 post :destroy, :id => 1, :confirm => 1 | 416 post :destroy, :id => 1, :confirm => 1 |
363 assert_redirected_to '/admin/projects' | 417 assert_redirected_to '/admin/projects' |
364 assert_nil Project.find_by_id(1) | 418 assert_nil Project.find_by_id(1) |
365 end | 419 end |
366 | 420 |
367 def test_archive | 421 def test_archive |
368 @request.session[:user_id] = 1 # admin | 422 @request.session[:user_id] = 1 # admin |
369 post :archive, :id => 1 | 423 post :archive, :id => 1 |
370 assert_redirected_to '/admin/projects' | 424 assert_redirected_to '/admin/projects' |
371 assert !Project.find(1).active? | 425 assert !Project.find(1).active? |
372 end | 426 end |
373 | 427 |
374 def test_unarchive | 428 def test_unarchive |
375 @request.session[:user_id] = 1 # admin | 429 @request.session[:user_id] = 1 # admin |
376 Project.find(1).archive | 430 Project.find(1).archive |
377 post :unarchive, :id => 1 | 431 post :unarchive, :id => 1 |
378 assert_redirected_to '/admin/projects' | 432 assert_redirected_to '/admin/projects' |
379 assert Project.find(1).active? | 433 assert Project.find(1).active? |
380 end | 434 end |
381 | 435 |
382 def test_project_breadcrumbs_should_be_limited_to_3_ancestors | 436 def test_project_breadcrumbs_should_be_limited_to_3_ancestors |
383 CustomField.delete_all | 437 CustomField.delete_all |
384 parent = nil | 438 parent = nil |
385 6.times do |i| | 439 6.times do |i| |
386 p = Project.create!(:name => "Breadcrumbs #{i}", :identifier => "breadcrumbs-#{i}") | 440 p = Project.create!(:name => "Breadcrumbs #{i}", :identifier => "breadcrumbs-#{i}") |
387 p.set_parent!(parent) | 441 p.set_parent!(parent) |
388 get :show, :id => p | 442 get :show, :id => p |
389 assert_tag :h1, :parent => { :attributes => {:id => 'header'}}, | 443 assert_tag :h1, :parent => { :attributes => {:id => 'header'}}, |
390 :children => { :count => [i, 3].min, | 444 :children => { :count => [i, 3].min, |
391 :only => { :tag => 'a' } } | 445 :only => { :tag => 'a' } } |
392 | 446 |
393 parent = p | 447 parent = p |
394 end | 448 end |
395 end | 449 end |
396 | 450 |
397 def test_copy_with_project | 451 def test_get_copy |
398 @request.session[:user_id] = 1 # admin | 452 @request.session[:user_id] = 1 # admin |
399 get :copy, :id => 1 | 453 get :copy, :id => 1 |
400 assert_response :success | 454 assert_response :success |
401 assert_template 'copy' | 455 assert_template 'copy' |
402 assert assigns(:project) | 456 assert assigns(:project) |
403 assert_equal Project.find(1).description, assigns(:project).description | 457 assert_equal Project.find(1).description, assigns(:project).description |
404 assert_nil assigns(:project).id | 458 assert_nil assigns(:project).id |
405 end | 459 |
406 | 460 assert_tag :tag => 'input', |
407 def test_copy_without_project | 461 :attributes => {:name => 'project[enabled_module_names][]', :value => 'issue_tracking'} |
462 end | |
463 | |
464 def test_get_copy_without_project | |
408 @request.session[:user_id] = 1 # admin | 465 @request.session[:user_id] = 1 # admin |
409 get :copy | 466 get :copy |
410 assert_response :redirect | 467 assert_response :redirect |
411 assert_redirected_to :controller => 'admin', :action => 'projects' | 468 assert_redirected_to :controller => 'admin', :action => 'projects' |
412 end | 469 end |
413 | 470 |
414 context "POST :copy" do | 471 def test_post_copy_should_copy_requested_items |
415 should "TODO: test the rest of the method" | 472 @request.session[:user_id] = 1 # admin |
416 | 473 CustomField.delete_all |
417 should "redirect to the project settings when successful" do | 474 |
418 @request.session[:user_id] = 1 # admin | 475 assert_difference 'Project.count' do |
419 post :copy, :id => 1, :project => {:name => 'Copy', :identifier => 'unique-copy'} | 476 post :copy, :id => 1, |
420 assert_response :redirect | 477 :project => { |
421 assert_redirected_to :controller => 'projects', :action => 'settings' | 478 :name => 'Copy', |
422 end | 479 :identifier => 'unique-copy', |
480 :tracker_ids => ['1', '2', '3', ''], | |
481 :enabled_module_names => %w(issue_tracking time_tracking) | |
482 }, | |
483 :only => %w(issues versions) | |
484 end | |
485 project = Project.find('unique-copy') | |
486 source = Project.find(1) | |
487 assert_equal %w(issue_tracking time_tracking), project.enabled_module_names.sort | |
488 | |
489 assert_equal source.versions.count, project.versions.count, "All versions were not copied" | |
490 # issues assigned to a closed version won't be copied | |
491 assert_equal source.issues.select {|i| i.fixed_version.nil? || i.fixed_version.open?}.size, | |
492 project.issues.count, "All issues were not copied" | |
493 assert_equal 0, project.members.count | |
494 end | |
495 | |
496 def test_post_copy_should_redirect_to_settings_when_successful | |
497 @request.session[:user_id] = 1 # admin | |
498 post :copy, :id => 1, :project => {:name => 'Copy', :identifier => 'unique-copy'} | |
499 assert_response :redirect | |
500 assert_redirected_to :controller => 'projects', :action => 'settings', :id => 'unique-copy' | |
423 end | 501 end |
424 | 502 |
425 def test_jump_should_redirect_to_active_tab | 503 def test_jump_should_redirect_to_active_tab |
426 get :show, :id => 1, :jump => 'issues' | 504 get :show, :id => 1, :jump => 'issues' |
427 assert_redirected_to '/projects/ecookbook/issues' | 505 assert_redirected_to '/projects/ecookbook/issues' |
428 end | 506 end |
429 | 507 |
430 def test_jump_should_not_redirect_to_inactive_tab | 508 def test_jump_should_not_redirect_to_inactive_tab |
431 get :show, :id => 3, :jump => 'documents' | 509 get :show, :id => 3, :jump => 'documents' |
432 assert_response :success | 510 assert_response :success |
433 assert_template 'show' | 511 assert_template 'show' |
434 end | 512 end |
435 | 513 |
436 def test_jump_should_not_redirect_to_unknown_tab | 514 def test_jump_should_not_redirect_to_unknown_tab |
437 get :show, :id => 3, :jump => 'foobar' | 515 get :show, :id => 3, :jump => 'foobar' |
438 assert_response :success | 516 assert_response :success |
439 assert_template 'show' | 517 assert_template 'show' |
440 end | 518 end |
446 stylesheet_link_tag(context[:project].identifier) if context[:project] | 524 stylesheet_link_tag(context[:project].identifier) if context[:project] |
447 end | 525 end |
448 end | 526 end |
449 # Don't use this hook now | 527 # Don't use this hook now |
450 Redmine::Hook.clear_listeners | 528 Redmine::Hook.clear_listeners |
451 | 529 |
452 def test_hook_response | 530 def test_hook_response |
453 Redmine::Hook.add_listener(ProjectBasedTemplate) | 531 Redmine::Hook.add_listener(ProjectBasedTemplate) |
454 get :show, :id => 1 | 532 get :show, :id => 1 |
455 assert_tag :tag => 'link', :attributes => {:href => '/stylesheets/ecookbook.css'}, | 533 assert_tag :tag => 'link', :attributes => {:href => '/stylesheets/ecookbook.css'}, |
456 :parent => {:tag => 'head'} | 534 :parent => {:tag => 'head'} |
457 | 535 |
458 Redmine::Hook.clear_listeners | 536 Redmine::Hook.clear_listeners |
459 end | 537 end |
460 end | 538 end |