Mercurial > hg > soundsoftware-site
comparison test/functional/projects_controller_test.rb @ 523:0b6c82dead28 luisf
Merge from branch "cannam"
| author | luisf <luis.figueira@eecs.qmul.ac.uk> |
|---|---|
| date | Mon, 25 Jul 2011 14:23:37 +0100 |
| parents | cbce1fd3b1b7 |
| children | cbb26bc654de |
comparison
equal
deleted
inserted
replaced
| 318:f7c525dc7585 | 523:0b6c82dead28 |
|---|---|
| 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 |
