annotate test/functional/projects_controller_test.rb @ 1295:622f24f53b42 redmine-2.3

Update to Redmine SVN revision 11972 on 2.3-stable branch
author Chris Cannam
date Fri, 14 Jun 2013 09:02:21 +0100
parents 433d4f72a19b
children
rev   line source
Chris@0 1 # Redmine - project management software
Chris@1295 2 # Copyright (C) 2006-2013 Jean-Philippe Lang
Chris@0 3 #
Chris@0 4 # This program is free software; you can redistribute it and/or
Chris@0 5 # modify it under the terms of the GNU General Public License
Chris@0 6 # as published by the Free Software Foundation; either version 2
Chris@0 7 # of the License, or (at your option) any later version.
Chris@441 8 #
Chris@0 9 # This program is distributed in the hope that it will be useful,
Chris@0 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
Chris@0 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Chris@0 12 # GNU General Public License for more details.
Chris@441 13 #
Chris@0 14 # You should have received a copy of the GNU General Public License
Chris@0 15 # along with this program; if not, write to the Free Software
Chris@0 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Chris@0 17
Chris@119 18 require File.expand_path('../../test_helper', __FILE__)
Chris@0 19
Chris@0 20 class ProjectsControllerTest < ActionController::TestCase
Chris@0 21 fixtures :projects, :versions, :users, :roles, :members, :member_roles, :issues, :journals, :journal_details,
Chris@0 22 :trackers, :projects_trackers, :issue_statuses, :enabled_modules, :enumerations, :boards, :messages,
Chris@0 23 :attachments, :custom_fields, :custom_values, :time_entries
Chris@0 24
Chris@0 25 def setup
Chris@0 26 @request.session[:user_id] = nil
Chris@0 27 Setting.default_language = 'en'
Chris@0 28 end
Chris@441 29
Chris@1295 30 def test_index_by_anonymous_should_not_show_private_projects
Chris@0 31 get :index
Chris@0 32 assert_response :success
Chris@0 33 assert_template 'index'
Chris@1295 34 projects = assigns(:projects)
Chris@1295 35 assert_not_nil projects
Chris@1295 36 assert projects.all?(&:is_public?)
Chris@441 37
Chris@1295 38 assert_select 'ul' do
Chris@1295 39 assert_select 'li' do
Chris@1295 40 assert_select 'a', :text => 'eCookbook'
Chris@1295 41 assert_select 'ul' do
Chris@1295 42 assert_select 'a', :text => 'Child of private child'
Chris@1295 43 end
Chris@1295 44 end
Chris@1295 45 end
Chris@1295 46 assert_select 'a', :text => /Private child of eCookbook/, :count => 0
Chris@0 47 end
Chris@441 48
Chris@0 49 def test_index_atom
Chris@0 50 get :index, :format => 'atom'
Chris@0 51 assert_response :success
Chris@1115 52 assert_template 'common/feed'
Chris@0 53 assert_select 'feed>title', :text => 'Redmine: Latest projects'
Chris@441 54 assert_select 'feed>entry', :count => Project.count(:conditions => Project.visible_condition(User.current))
Chris@0 55 end
Chris@441 56
Chris@1295 57 test "#index by non-admin user with view_time_entries permission should show overall spent time link" do
Chris@1295 58 @request.session[:user_id] = 3
Chris@1295 59 get :index
Chris@1295 60 assert_template 'index'
Chris@1295 61 assert_select 'a[href=?]', '/time_entries'
Chris@1295 62 end
Chris@441 63
Chris@1295 64 test "#index by non-admin user without view_time_entries permission should not show overall spent time link" do
Chris@1295 65 Role.find(2).remove_permission! :view_time_entries
Chris@1295 66 Role.non_member.remove_permission! :view_time_entries
Chris@1295 67 Role.anonymous.remove_permission! :view_time_entries
Chris@1295 68 @request.session[:user_id] = 3
Chris@1295 69
Chris@1295 70 get :index
Chris@1295 71 assert_template 'index'
Chris@1295 72 assert_select 'a[href=?]', '/time_entries', 0
Chris@1295 73 end
Chris@1295 74
Chris@1295 75 test "#new by admin user should accept get" do
Chris@1295 76 @request.session[:user_id] = 1
Chris@1295 77
Chris@1295 78 get :new
Chris@1295 79 assert_response :success
Chris@1295 80 assert_template 'new'
Chris@1295 81 end
Chris@1295 82
Chris@1295 83 test "#new by non-admin user with add_project permission should accept get" do
Chris@1295 84 Role.non_member.add_permission! :add_project
Chris@1295 85 @request.session[:user_id] = 9
Chris@1295 86
Chris@1295 87 get :new
Chris@1295 88 assert_response :success
Chris@1295 89 assert_template 'new'
Chris@1295 90 assert_select 'select[name=?]', 'project[parent_id]', 0
Chris@1295 91 end
Chris@1295 92
Chris@1295 93 test "#new by non-admin user with add_subprojects permission should accept get" do
Chris@1295 94 Role.find(1).remove_permission! :add_project
Chris@1295 95 Role.find(1).add_permission! :add_subprojects
Chris@1295 96 @request.session[:user_id] = 2
Chris@1295 97
Chris@1295 98 get :new, :parent_id => 'ecookbook'
Chris@1295 99 assert_response :success
Chris@1295 100 assert_template 'new'
Chris@1295 101
Chris@1295 102 assert_select 'select[name=?]', 'project[parent_id]' do
Chris@1295 103 # parent project selected
Chris@1295 104 assert_select 'option[value=1][selected=selected]'
Chris@1295 105 # no empty value
Chris@1295 106 assert_select 'option[value=]', 0
Chris@441 107 end
Chris@0 108 end
Chris@441 109
Chris@1295 110 test "#create by admin user should create a new project" do
Chris@1295 111 @request.session[:user_id] = 1
Chris@441 112
Chris@1295 113 post :create,
Chris@1295 114 :project => {
Chris@1295 115 :name => "blog",
Chris@1295 116 :description => "weblog",
Chris@1295 117 :homepage => 'http://weblog',
Chris@1295 118 :identifier => "blog",
Chris@1295 119 :is_public => 1,
Chris@1295 120 :custom_field_values => { '3' => 'Beta' },
Chris@1295 121 :tracker_ids => ['1', '3'],
Chris@1295 122 # an issue custom field that is not for all project
Chris@1295 123 :issue_custom_field_ids => ['9'],
Chris@1295 124 :enabled_module_names => ['issue_tracking', 'news', 'repository']
Chris@1295 125 }
Chris@1295 126 assert_redirected_to '/projects/blog/settings'
chris@22 127
Chris@1295 128 project = Project.find_by_name('blog')
Chris@1295 129 assert_kind_of Project, project
Chris@1295 130 assert project.active?
Chris@1295 131 assert_equal 'weblog', project.description
Chris@1295 132 assert_equal 'http://weblog', project.homepage
Chris@1295 133 assert_equal true, project.is_public?
Chris@1295 134 assert_nil project.parent
Chris@1295 135 assert_equal 'Beta', project.custom_value_for(3).value
Chris@1295 136 assert_equal [1, 3], project.trackers.map(&:id).sort
Chris@1295 137 assert_equal ['issue_tracking', 'news', 'repository'], project.enabled_module_names.sort
Chris@1295 138 assert project.issue_custom_fields.include?(IssueCustomField.find(9))
Chris@1295 139 end
Chris@1295 140
Chris@1295 141 test "#create by admin user should create a new subproject" do
Chris@1295 142 @request.session[:user_id] = 1
Chris@1295 143
Chris@1295 144 assert_difference 'Project.count' do
Chris@1295 145 post :create, :project => { :name => "blog",
Chris@1295 146 :description => "weblog",
Chris@1295 147 :identifier => "blog",
Chris@1295 148 :is_public => 1,
Chris@1295 149 :custom_field_values => { '3' => 'Beta' },
Chris@1295 150 :parent_id => 1
Chris@1295 151 }
Chris@1295 152 assert_redirected_to '/projects/blog/settings'
chris@22 153 end
chris@22 154
Chris@1295 155 project = Project.find_by_name('blog')
Chris@1295 156 assert_kind_of Project, project
Chris@1295 157 assert_equal Project.find(1), project.parent
Chris@1295 158 end
chris@22 159
Chris@1295 160 test "#create by admin user should continue" do
Chris@1295 161 @request.session[:user_id] = 1
Chris@1295 162
Chris@1295 163 assert_difference 'Project.count' do
Chris@1295 164 post :create, :project => {:name => "blog", :identifier => "blog"}, :continue => 'Create and continue'
Chris@1295 165 end
Chris@1295 166 assert_redirected_to '/projects/new'
Chris@1295 167 end
Chris@1295 168
Chris@1295 169 test "#create by non-admin user with add_project permission should create a new project" do
Chris@1295 170 Role.non_member.add_permission! :add_project
Chris@1295 171 @request.session[:user_id] = 9
Chris@1295 172
Chris@1295 173 post :create, :project => { :name => "blog",
Chris@1295 174 :description => "weblog",
Chris@1295 175 :identifier => "blog",
Chris@1295 176 :is_public => 1,
Chris@1295 177 :custom_field_values => { '3' => 'Beta' },
Chris@1295 178 :tracker_ids => ['1', '3'],
Chris@1295 179 :enabled_module_names => ['issue_tracking', 'news', 'repository']
Chris@1295 180 }
Chris@1295 181
Chris@1295 182 assert_redirected_to '/projects/blog/settings'
Chris@1295 183
Chris@1295 184 project = Project.find_by_name('blog')
Chris@1295 185 assert_kind_of Project, project
Chris@1295 186 assert_equal 'weblog', project.description
Chris@1295 187 assert_equal true, project.is_public?
Chris@1295 188 assert_equal [1, 3], project.trackers.map(&:id).sort
Chris@1295 189 assert_equal ['issue_tracking', 'news', 'repository'], project.enabled_module_names.sort
Chris@1295 190
Chris@1295 191 # User should be added as a project member
Chris@1295 192 assert User.find(9).member_of?(project)
Chris@1295 193 assert_equal 1, project.members.size
Chris@1295 194 end
Chris@1295 195
Chris@1295 196 test "#create by non-admin user with add_project permission should fail with parent_id" do
Chris@1295 197 Role.non_member.add_permission! :add_project
Chris@1295 198 @request.session[:user_id] = 9
Chris@1295 199
Chris@1295 200 assert_no_difference 'Project.count' do
Chris@1295 201 post :create, :project => { :name => "blog",
Chris@1295 202 :description => "weblog",
Chris@1295 203 :identifier => "blog",
Chris@1295 204 :is_public => 1,
Chris@1295 205 :custom_field_values => { '3' => 'Beta' },
Chris@1295 206 :parent_id => 1
Chris@1295 207 }
Chris@1295 208 end
Chris@1295 209 assert_response :success
Chris@1295 210 project = assigns(:project)
Chris@1295 211 assert_kind_of Project, project
Chris@1295 212 assert_not_nil project.errors[:parent_id]
Chris@1295 213 end
Chris@1295 214
Chris@1295 215 test "#create by non-admin user with add_subprojects permission should create a project with a parent_id" do
Chris@1295 216 Role.find(1).remove_permission! :add_project
Chris@1295 217 Role.find(1).add_permission! :add_subprojects
Chris@1295 218 @request.session[:user_id] = 2
Chris@1295 219
Chris@1295 220 post :create, :project => { :name => "blog",
Chris@1295 221 :description => "weblog",
Chris@1295 222 :identifier => "blog",
Chris@1295 223 :is_public => 1,
Chris@1295 224 :custom_field_values => { '3' => 'Beta' },
Chris@1295 225 :parent_id => 1
Chris@1295 226 }
Chris@1295 227 assert_redirected_to '/projects/blog/settings'
Chris@1295 228 project = Project.find_by_name('blog')
Chris@1295 229 end
Chris@1295 230
Chris@1295 231 test "#create by non-admin user with add_subprojects permission should fail without parent_id" do
Chris@1295 232 Role.find(1).remove_permission! :add_project
Chris@1295 233 Role.find(1).add_permission! :add_subprojects
Chris@1295 234 @request.session[:user_id] = 2
Chris@1295 235
Chris@1295 236 assert_no_difference 'Project.count' do
Chris@1295 237 post :create, :project => { :name => "blog",
Chris@1295 238 :description => "weblog",
Chris@1295 239 :identifier => "blog",
Chris@1295 240 :is_public => 1,
Chris@1295 241 :custom_field_values => { '3' => 'Beta' }
Chris@1295 242 }
Chris@1295 243 end
Chris@1295 244 assert_response :success
Chris@1295 245 project = assigns(:project)
Chris@1295 246 assert_kind_of Project, project
Chris@1295 247 assert_not_nil project.errors[:parent_id]
Chris@1295 248 end
Chris@1295 249
Chris@1295 250 test "#create by non-admin user with add_subprojects permission should fail with unauthorized parent_id" do
Chris@1295 251 Role.find(1).remove_permission! :add_project
Chris@1295 252 Role.find(1).add_permission! :add_subprojects
Chris@1295 253 @request.session[:user_id] = 2
Chris@1295 254
Chris@1295 255 assert !User.find(2).member_of?(Project.find(6))
Chris@1295 256 assert_no_difference 'Project.count' do
Chris@1295 257 post :create, :project => { :name => "blog",
Chris@1295 258 :description => "weblog",
Chris@1295 259 :identifier => "blog",
Chris@1295 260 :is_public => 1,
Chris@1295 261 :custom_field_values => { '3' => 'Beta' },
Chris@1295 262 :parent_id => 6
Chris@1295 263 }
Chris@1295 264 end
Chris@1295 265 assert_response :success
Chris@1295 266 project = assigns(:project)
Chris@1295 267 assert_kind_of Project, project
Chris@1295 268 assert_not_nil project.errors[:parent_id]
Chris@1295 269 end
Chris@1295 270
Chris@1295 271 def test_create_subproject_with_inherit_members_should_inherit_members
Chris@1295 272 Role.find_by_name('Manager').add_permission! :add_subprojects
Chris@1295 273 parent = Project.find(1)
Chris@1295 274 @request.session[:user_id] = 2
Chris@1295 275
Chris@1295 276 assert_difference 'Project.count' do
Chris@1295 277 post :create, :project => {
Chris@1295 278 :name => 'inherited', :identifier => 'inherited', :parent_id => parent.id, :inherit_members => '1'
Chris@1295 279 }
Chris@1295 280 assert_response 302
chris@22 281 end
chris@22 282
Chris@1295 283 project = Project.order('id desc').first
Chris@1295 284 assert_equal 'inherited', project.name
Chris@1295 285 assert_equal parent, project.parent
Chris@1295 286 assert project.memberships.count > 0
Chris@1295 287 assert_equal parent.memberships.count, project.memberships.count
Chris@0 288 end
Chris@441 289
Chris@441 290 def test_create_should_preserve_modules_on_validation_failure
Chris@441 291 with_settings :default_projects_modules => ['issue_tracking', 'repository'] do
Chris@441 292 @request.session[:user_id] = 1
Chris@441 293 assert_no_difference 'Project.count' do
Chris@441 294 post :create, :project => {
Chris@441 295 :name => "blog",
Chris@441 296 :identifier => "",
Chris@441 297 :enabled_module_names => %w(issue_tracking news)
Chris@441 298 }
Chris@441 299 end
Chris@441 300 assert_response :success
Chris@441 301 project = assigns(:project)
Chris@441 302 assert_equal %w(issue_tracking news), project.enabled_module_names.sort
Chris@441 303 end
Chris@441 304 end
Chris@441 305
Chris@0 306 def test_show_by_id
Chris@0 307 get :show, :id => 1
Chris@0 308 assert_response :success
Chris@0 309 assert_template 'show'
Chris@0 310 assert_not_nil assigns(:project)
Chris@0 311 end
Chris@0 312
Chris@0 313 def test_show_by_identifier
Chris@0 314 get :show, :id => 'ecookbook'
Chris@0 315 assert_response :success
Chris@0 316 assert_template 'show'
Chris@0 317 assert_not_nil assigns(:project)
Chris@0 318 assert_equal Project.find_by_identifier('ecookbook'), assigns(:project)
Chris@441 319
Chris@1295 320 assert_select 'li', :text => /Development status/
chris@37 321 end
chris@37 322
chris@37 323 def test_show_should_not_display_hidden_custom_fields
chris@37 324 ProjectCustomField.find_by_name('Development status').update_attribute :visible, false
chris@37 325 get :show, :id => 'ecookbook'
chris@37 326 assert_response :success
chris@37 327 assert_template 'show'
chris@37 328 assert_not_nil assigns(:project)
Chris@441 329
Chris@1295 330 assert_select 'li', :text => /Development status/, :count => 0
Chris@0 331 end
Chris@441 332
Chris@0 333 def test_show_should_not_fail_when_custom_values_are_nil
Chris@0 334 project = Project.find_by_identifier('ecookbook')
Chris@0 335 project.custom_values.first.update_attribute(:value, nil)
Chris@0 336 get :show, :id => 'ecookbook'
Chris@0 337 assert_response :success
Chris@0 338 assert_template 'show'
Chris@0 339 assert_not_nil assigns(:project)
Chris@0 340 assert_equal Project.find_by_identifier('ecookbook'), assigns(:project)
Chris@0 341 end
Chris@441 342
chris@37 343 def show_archived_project_should_be_denied
chris@37 344 project = Project.find_by_identifier('ecookbook')
chris@37 345 project.archive!
Chris@441 346
chris@37 347 get :show, :id => 'ecookbook'
chris@37 348 assert_response 403
chris@37 349 assert_nil assigns(:project)
Chris@1295 350 assert_select 'p', :text => /archived/
chris@37 351 end
Chris@441 352
Chris@1295 353 def test_show_should_not_show_private_subprojects_that_are_not_visible
Chris@0 354 get :show, :id => 'ecookbook'
Chris@0 355 assert_response :success
Chris@0 356 assert_template 'show'
Chris@1295 357 assert_select 'a', :text => /Private child/, :count => 0
Chris@0 358 end
Chris@0 359
Chris@1295 360 def test_show_should_show_private_subprojects_that_are_visible
Chris@0 361 @request.session[:user_id] = 2 # manager who is a member of the private subproject
Chris@0 362 get :show, :id => 'ecookbook'
Chris@0 363 assert_response :success
Chris@0 364 assert_template 'show'
Chris@1295 365 assert_select 'a', :text => /Private child/
Chris@0 366 end
Chris@441 367
Chris@0 368 def test_settings
Chris@0 369 @request.session[:user_id] = 2 # manager
Chris@0 370 get :settings, :id => 1
Chris@0 371 assert_response :success
Chris@0 372 assert_template 'settings'
Chris@0 373 end
Chris@441 374
Chris@1295 375 def test_settings_of_subproject
Chris@1295 376 @request.session[:user_id] = 2
Chris@1295 377 get :settings, :id => 'private-child'
Chris@1295 378 assert_response :success
Chris@1295 379 assert_template 'settings'
Chris@1295 380
Chris@1295 381 assert_select 'input[type=checkbox][name=?]', 'project[inherit_members]'
Chris@1295 382 end
Chris@1295 383
Chris@1115 384 def test_settings_should_be_denied_for_member_on_closed_project
Chris@1115 385 Project.find(1).close
Chris@1115 386 @request.session[:user_id] = 2 # manager
Chris@1115 387
Chris@1115 388 get :settings, :id => 1
Chris@1115 389 assert_response 403
Chris@1115 390 end
Chris@1115 391
Chris@1115 392 def test_settings_should_be_denied_for_anonymous_on_closed_project
Chris@1115 393 Project.find(1).close
Chris@1115 394
Chris@1115 395 get :settings, :id => 1
Chris@1115 396 assert_response 302
Chris@1115 397 end
Chris@1115 398
chris@22 399 def test_update
Chris@0 400 @request.session[:user_id] = 2 # manager
chris@22 401 post :update, :id => 1, :project => {:name => 'Test changed name',
Chris@0 402 :issue_custom_field_ids => ['']}
chris@37 403 assert_redirected_to '/projects/ecookbook/settings'
Chris@0 404 project = Project.find(1)
Chris@0 405 assert_equal 'Test changed name', project.name
Chris@0 406 end
Chris@119 407
Chris@1115 408 def test_update_with_failure
Chris@1115 409 @request.session[:user_id] = 2 # manager
Chris@1115 410 post :update, :id => 1, :project => {:name => ''}
Chris@1115 411 assert_response :success
Chris@1115 412 assert_template 'settings'
Chris@1115 413 assert_error_tag :content => /name can&#x27;t be blank/i
Chris@1115 414 end
Chris@1115 415
Chris@1115 416 def test_update_should_be_denied_for_member_on_closed_project
Chris@1115 417 Project.find(1).close
Chris@1115 418 @request.session[:user_id] = 2 # manager
Chris@1115 419
Chris@1115 420 post :update, :id => 1, :project => {:name => 'Closed'}
Chris@1115 421 assert_response 403
Chris@1115 422 assert_equal 'eCookbook', Project.find(1).name
Chris@1115 423 end
Chris@1115 424
Chris@1115 425 def test_update_should_be_denied_for_anonymous_on_closed_project
Chris@1115 426 Project.find(1).close
Chris@1115 427
Chris@1115 428 post :update, :id => 1, :project => {:name => 'Closed'}
Chris@1115 429 assert_response 302
Chris@1115 430 assert_equal 'eCookbook', Project.find(1).name
Chris@1115 431 end
Chris@1115 432
Chris@119 433 def test_modules
Chris@119 434 @request.session[:user_id] = 2
Chris@119 435 Project.find(1).enabled_module_names = ['issue_tracking', 'news']
Chris@441 436
Chris@119 437 post :modules, :id => 1, :enabled_module_names => ['issue_tracking', 'repository', 'documents']
Chris@119 438 assert_redirected_to '/projects/ecookbook/settings/modules'
Chris@119 439 assert_equal ['documents', 'issue_tracking', 'repository'], Project.find(1).enabled_module_names.sort
Chris@119 440 end
Chris@119 441
Chris@1295 442 def test_destroy_leaf_project_without_confirmation_should_show_confirmation
Chris@0 443 @request.session[:user_id] = 1 # admin
Chris@1295 444
Chris@1295 445 assert_no_difference 'Project.count' do
Chris@1295 446 delete :destroy, :id => 2
Chris@1295 447 assert_response :success
Chris@1295 448 assert_template 'destroy'
Chris@1295 449 end
Chris@1295 450 end
Chris@1295 451
Chris@1295 452 def test_destroy_without_confirmation_should_show_confirmation_with_subprojects
Chris@1295 453 @request.session[:user_id] = 1 # admin
Chris@1295 454
Chris@1295 455 assert_no_difference 'Project.count' do
Chris@1295 456 delete :destroy, :id => 1
Chris@1295 457 assert_response :success
Chris@1295 458 assert_template 'destroy'
Chris@1295 459 end
Chris@1295 460 assert_select 'strong',
Chris@1295 461 :text => ['Private child of eCookbook',
Chris@1115 462 'Child of private child, eCookbook Subproject 1',
Chris@1115 463 'eCookbook Subproject 2'].join(', ')
Chris@0 464 end
Chris@0 465
Chris@1295 466 def test_destroy_with_confirmation_should_destroy_the_project_and_subprojects
Chris@0 467 @request.session[:user_id] = 1 # admin
Chris@1295 468
Chris@1295 469 assert_difference 'Project.count', -5 do
Chris@1295 470 delete :destroy, :id => 1, :confirm => 1
Chris@1295 471 assert_redirected_to '/admin/projects'
Chris@1295 472 end
Chris@0 473 assert_nil Project.find_by_id(1)
Chris@0 474 end
Chris@441 475
Chris@0 476 def test_archive
Chris@0 477 @request.session[:user_id] = 1 # admin
Chris@0 478 post :archive, :id => 1
chris@37 479 assert_redirected_to '/admin/projects'
Chris@0 480 assert !Project.find(1).active?
Chris@0 481 end
Chris@441 482
Chris@1115 483 def test_archive_with_failure
Chris@1115 484 @request.session[:user_id] = 1
Chris@1115 485 Project.any_instance.stubs(:archive).returns(false)
Chris@1115 486 post :archive, :id => 1
Chris@1115 487 assert_redirected_to '/admin/projects'
Chris@1115 488 assert_match /project cannot be archived/i, flash[:error]
Chris@1115 489 end
Chris@1115 490
Chris@0 491 def test_unarchive
Chris@0 492 @request.session[:user_id] = 1 # admin
Chris@0 493 Project.find(1).archive
Chris@0 494 post :unarchive, :id => 1
chris@37 495 assert_redirected_to '/admin/projects'
Chris@0 496 assert Project.find(1).active?
Chris@0 497 end
Chris@441 498
Chris@1115 499 def test_close
Chris@1115 500 @request.session[:user_id] = 2
Chris@1115 501 post :close, :id => 1
Chris@1115 502 assert_redirected_to '/projects/ecookbook'
Chris@1115 503 assert_equal Project::STATUS_CLOSED, Project.find(1).status
Chris@1115 504 end
Chris@1115 505
Chris@1115 506 def test_reopen
Chris@1115 507 Project.find(1).close
Chris@1115 508 @request.session[:user_id] = 2
Chris@1115 509 post :reopen, :id => 1
Chris@1115 510 assert_redirected_to '/projects/ecookbook'
Chris@1115 511 assert Project.find(1).active?
Chris@1115 512 end
Chris@1115 513
Chris@0 514 def test_project_breadcrumbs_should_be_limited_to_3_ancestors
Chris@0 515 CustomField.delete_all
Chris@0 516 parent = nil
Chris@0 517 6.times do |i|
Chris@1295 518 p = Project.generate_with_parent!(parent)
Chris@0 519 get :show, :id => p
Chris@1295 520 assert_select '#header h1' do
Chris@1295 521 assert_select 'a', :count => [i, 3].min
Chris@1295 522 end
Chris@441 523
Chris@0 524 parent = p
Chris@0 525 end
Chris@0 526 end
Chris@0 527
Chris@441 528 def test_get_copy
Chris@0 529 @request.session[:user_id] = 1 # admin
Chris@0 530 get :copy, :id => 1
Chris@0 531 assert_response :success
Chris@0 532 assert_template 'copy'
Chris@0 533 assert assigns(:project)
Chris@0 534 assert_equal Project.find(1).description, assigns(:project).description
Chris@0 535 assert_nil assigns(:project).id
Chris@441 536
Chris@1295 537 assert_select 'input[name=?][value=?]', 'project[enabled_module_names][]', 'issue_tracking', 1
Chris@0 538 end
Chris@0 539
Chris@1115 540 def test_get_copy_with_invalid_source_should_respond_with_404
Chris@1115 541 @request.session[:user_id] = 1
Chris@1115 542 get :copy, :id => 99
Chris@1115 543 assert_response 404
Chris@0 544 end
Chris@0 545
Chris@441 546 def test_post_copy_should_copy_requested_items
Chris@441 547 @request.session[:user_id] = 1 # admin
Chris@441 548 CustomField.delete_all
chris@37 549
Chris@441 550 assert_difference 'Project.count' do
Chris@441 551 post :copy, :id => 1,
Chris@441 552 :project => {
Chris@441 553 :name => 'Copy',
Chris@441 554 :identifier => 'unique-copy',
Chris@441 555 :tracker_ids => ['1', '2', '3', ''],
Chris@441 556 :enabled_module_names => %w(issue_tracking time_tracking)
Chris@441 557 },
Chris@441 558 :only => %w(issues versions)
chris@37 559 end
Chris@441 560 project = Project.find('unique-copy')
Chris@441 561 source = Project.find(1)
Chris@441 562 assert_equal %w(issue_tracking time_tracking), project.enabled_module_names.sort
Chris@441 563
Chris@441 564 assert_equal source.versions.count, project.versions.count, "All versions were not copied"
Chris@1115 565 assert_equal source.issues.count, project.issues.count, "All issues were not copied"
Chris@441 566 assert_equal 0, project.members.count
Chris@441 567 end
Chris@441 568
Chris@441 569 def test_post_copy_should_redirect_to_settings_when_successful
Chris@441 570 @request.session[:user_id] = 1 # admin
Chris@441 571 post :copy, :id => 1, :project => {:name => 'Copy', :identifier => 'unique-copy'}
Chris@441 572 assert_response :redirect
Chris@441 573 assert_redirected_to :controller => 'projects', :action => 'settings', :id => 'unique-copy'
chris@37 574 end
chris@37 575
Chris@0 576 def test_jump_should_redirect_to_active_tab
Chris@0 577 get :show, :id => 1, :jump => 'issues'
chris@37 578 assert_redirected_to '/projects/ecookbook/issues'
Chris@0 579 end
Chris@441 580
Chris@0 581 def test_jump_should_not_redirect_to_inactive_tab
Chris@0 582 get :show, :id => 3, :jump => 'documents'
Chris@0 583 assert_response :success
Chris@0 584 assert_template 'show'
Chris@0 585 end
Chris@441 586
Chris@0 587 def test_jump_should_not_redirect_to_unknown_tab
Chris@0 588 get :show, :id => 3, :jump => 'foobar'
Chris@0 589 assert_response :success
Chris@0 590 assert_template 'show'
Chris@0 591 end
Chris@0 592 end