Mercurial > hg > soundsoftware-site
comparison test/functional/users_controller_test.rb @ 1526:404aa68d4227
Merge from live branch
author | Chris Cannam |
---|---|
date | Thu, 11 Sep 2014 12:46:20 +0100 |
parents | dffacf8a6908 |
children |
comparison
equal
deleted
inserted
replaced
1493:a5f2bdf3b486 | 1526:404aa68d4227 |
---|---|
1 # Redmine - project management software | 1 # Redmine - project management software |
2 # Copyright (C) 2006-2012 Jean-Philippe Lang | 2 # Copyright (C) 2006-2014 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. |
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.expand_path('../../test_helper', __FILE__) | 18 require File.expand_path('../../test_helper', __FILE__) |
19 require 'users_controller' | |
20 | |
21 # Re-raise errors caught by the controller. | |
22 class UsersController; def rescue_action(e) raise e end; end | |
23 | 19 |
24 class UsersControllerTest < ActionController::TestCase | 20 class UsersControllerTest < ActionController::TestCase |
25 include Redmine::I18n | 21 include Redmine::I18n |
26 | 22 |
27 fixtures :users, :projects, :members, :member_roles, :roles, | 23 fixtures :users, :projects, :members, :member_roles, :roles, |
28 :custom_fields, :custom_values, :groups_users, | 24 :custom_fields, :custom_values, :groups_users, |
29 :auth_sources | 25 :auth_sources |
30 | 26 |
31 def setup | 27 def setup |
32 @controller = UsersController.new | |
33 @request = ActionController::TestRequest.new | |
34 @response = ActionController::TestResponse.new | |
35 User.current = nil | 28 User.current = nil |
36 @request.session[:user_id] = 1 # admin | 29 @request.session[:user_id] = 1 # admin |
37 end | |
38 | |
39 def test_index | |
40 get :index | |
41 assert_response :success | |
42 assert_template 'index' | |
43 end | 30 end |
44 | 31 |
45 def test_index | 32 def test_index |
46 get :index | 33 get :index |
47 assert_response :success | 34 assert_response :success |
180 }, | 167 }, |
181 :send_information => '1' | 168 :send_information => '1' |
182 end | 169 end |
183 end | 170 end |
184 | 171 |
185 user = User.first(:order => 'id DESC') | 172 user = User.order('id DESC').first |
186 assert_redirected_to :controller => 'users', :action => 'edit', :id => user.id | 173 assert_redirected_to :controller => 'users', :action => 'edit', :id => user.id |
187 | 174 |
188 assert_equal 'John', user.firstname | 175 assert_equal 'John', user.firstname |
189 assert_equal 'Doe', user.lastname | 176 assert_equal 'Doe', user.lastname |
190 assert_equal 'jdoe', user.login | 177 assert_equal 'jdoe', user.login |
215 'time_zone' => 'Paris', | 202 'time_zone' => 'Paris', |
216 'comments_sorting' => 'desc', | 203 'comments_sorting' => 'desc', |
217 'warn_on_leaving_unsaved' => '0' | 204 'warn_on_leaving_unsaved' => '0' |
218 } | 205 } |
219 end | 206 end |
220 user = User.first(:order => 'id DESC') | 207 user = User.order('id DESC').first |
221 assert_equal 'jdoe', user.login | 208 assert_equal 'jdoe', user.login |
222 assert_equal true, user.pref.hide_mail | 209 assert_equal true, user.pref.hide_mail |
223 assert_equal 'Paris', user.pref.time_zone | 210 assert_equal 'Paris', user.pref.time_zone |
224 assert_equal 'desc', user.pref[:comments_sorting] | 211 assert_equal 'desc', user.pref[:comments_sorting] |
225 assert_equal '0', user.pref[:warn_on_leaving_unsaved] | 212 assert_equal '0', user.pref[:warn_on_leaving_unsaved] |
226 end | 213 end |
227 | 214 |
215 def test_create_with_generate_password_should_email_the_password | |
216 assert_difference 'User.count' do | |
217 post :create, :user => { | |
218 :login => 'randompass', | |
219 :firstname => 'Random', | |
220 :lastname => 'Pass', | |
221 :mail => 'randompass@example.net', | |
222 :language => 'en', | |
223 :generate_password => '1', | |
224 :password => '', | |
225 :password_confirmation => '' | |
226 }, :send_information => 1 | |
227 end | |
228 user = User.order('id DESC').first | |
229 assert_equal 'randompass', user.login | |
230 | |
231 mail = ActionMailer::Base.deliveries.last | |
232 assert_not_nil mail | |
233 m = mail_body(mail).match(/Password: ([a-zA-Z0-9]+)/) | |
234 assert m | |
235 password = m[1] | |
236 assert user.check_password?(password) | |
237 end | |
238 | |
228 def test_create_with_failure | 239 def test_create_with_failure |
229 assert_no_difference 'User.count' do | 240 assert_no_difference 'User.count' do |
230 post :create, :user => {} | 241 post :create, :user => {} |
231 end | 242 end |
232 assert_response :success | 243 assert_response :success |
233 assert_template 'new' | 244 assert_template 'new' |
245 end | |
246 | |
247 def test_create_with_failure_sould_preserve_preference | |
248 assert_no_difference 'User.count' do | |
249 post :create, | |
250 :user => {}, | |
251 :pref => { | |
252 'no_self_notified' => '1', | |
253 'hide_mail' => '1', | |
254 'time_zone' => 'Paris', | |
255 'comments_sorting' => 'desc', | |
256 'warn_on_leaving_unsaved' => '0' | |
257 } | |
258 end | |
259 assert_response :success | |
260 assert_template 'new' | |
261 | |
262 assert_select 'select#pref_time_zone option[selected=selected]', :text => /Paris/ | |
263 assert_select 'input#pref_no_self_notified[value=1][checked=checked]' | |
234 end | 264 end |
235 | 265 |
236 def test_edit | 266 def test_edit |
237 get :edit, :id => 2 | 267 get :edit, :id => 2 |
238 assert_response :success | 268 assert_response :success |
295 assert_not_nil mail | 325 assert_not_nil mail |
296 assert_equal [u.mail], mail.bcc | 326 assert_equal [u.mail], mail.bcc |
297 assert_mail_body_match 'newpass123', mail | 327 assert_mail_body_match 'newpass123', mail |
298 end | 328 end |
299 | 329 |
330 def test_update_with_generate_password_should_email_the_password | |
331 ActionMailer::Base.deliveries.clear | |
332 Setting.bcc_recipients = '1' | |
333 | |
334 put :update, :id => 2, :user => { | |
335 :generate_password => '1', | |
336 :password => '', | |
337 :password_confirmation => '' | |
338 }, :send_information => '1' | |
339 | |
340 mail = ActionMailer::Base.deliveries.last | |
341 assert_not_nil mail | |
342 m = mail_body(mail).match(/Password: ([a-zA-Z0-9]+)/) | |
343 assert m | |
344 password = m[1] | |
345 assert User.find(2).check_password?(password) | |
346 end | |
347 | |
348 def test_update_without_generate_password_should_not_change_password | |
349 put :update, :id => 2, :user => { | |
350 :firstname => 'changed', | |
351 :generate_password => '0', | |
352 :password => '', | |
353 :password_confirmation => '' | |
354 }, :send_information => '1' | |
355 | |
356 user = User.find(2) | |
357 assert_equal 'changed', user.firstname | |
358 assert user.check_password?('jsmith') | |
359 end | |
360 | |
300 def test_update_user_switchin_from_auth_source_to_password_authentication | 361 def test_update_user_switchin_from_auth_source_to_password_authentication |
301 # Configure as auth source | 362 # Configure as auth source |
302 u = User.find(2) | 363 u = User.find(2) |
303 u.auth_source = AuthSource.find(1) | 364 u.auth_source = AuthSource.find(1) |
304 u.save! | 365 u.save! |
314 assert_response :success | 375 assert_response :success |
315 assert_template 'edit' | 376 assert_template 'edit' |
316 u = User.find(2) | 377 u = User.find(2) |
317 assert_equal [1, 2, 5], u.projects.collect{|p| p.id}.sort | 378 assert_equal [1, 2, 5], u.projects.collect{|p| p.id}.sort |
318 assert_equal [1, 2, 5], u.notified_projects_ids.sort | 379 assert_equal [1, 2, 5], u.notified_projects_ids.sort |
319 assert_tag :tag => 'input', | 380 assert_select 'input[name=?][value=?]', 'user[notified_project_ids][]', '1' |
320 :attributes => { | |
321 :id => 'notified_project_ids_', | |
322 :value => 1, | |
323 } | |
324 assert_equal 'all', u.mail_notification | 381 assert_equal 'all', u.mail_notification |
325 put :update, :id => 2, | 382 put :update, :id => 2, |
326 :user => { | 383 :user => { |
327 :mail_notification => 'selected', | 384 :mail_notification => 'selected', |
328 }, | 385 :notified_project_ids => [1, 2] |
329 :notified_project_ids => [1, 2] | 386 } |
330 u = User.find(2) | 387 u = User.find(2) |
331 assert_equal 'selected', u.mail_notification | 388 assert_equal 'selected', u.mail_notification |
332 assert_equal [1, 2], u.notified_projects_ids.sort | 389 assert_equal [1, 2], u.notified_projects_ids.sort |
333 end | 390 end |
334 | 391 |
392 def test_update_status_should_not_update_attributes | |
393 user = User.find(2) | |
394 user.pref[:no_self_notified] = '1' | |
395 user.pref.save | |
396 | |
397 put :update, :id => 2, :user => {:status => 3} | |
398 assert_response 302 | |
399 user = User.find(2) | |
400 assert_equal 3, user.status | |
401 assert_equal '1', user.pref[:no_self_notified] | |
402 end | |
403 | |
335 def test_destroy | 404 def test_destroy |
336 assert_difference 'User.count', -1 do | 405 assert_difference 'User.count', -1 do |
337 delete :destroy, :id => 2 | 406 delete :destroy, :id => 2 |
338 end | 407 end |
339 assert_redirected_to '/users' | 408 assert_redirected_to '/users' |
359 def test_create_membership | 428 def test_create_membership |
360 assert_difference 'Member.count' do | 429 assert_difference 'Member.count' do |
361 post :edit_membership, :id => 7, :membership => { :project_id => 3, :role_ids => [2]} | 430 post :edit_membership, :id => 7, :membership => { :project_id => 3, :role_ids => [2]} |
362 end | 431 end |
363 assert_redirected_to :action => 'edit', :id => '7', :tab => 'memberships' | 432 assert_redirected_to :action => 'edit', :id => '7', :tab => 'memberships' |
364 member = Member.first(:order => 'id DESC') | 433 member = Member.order('id DESC').first |
365 assert_equal User.find(7), member.principal | 434 assert_equal User.find(7), member.principal |
366 assert_equal [2], member.role_ids | 435 assert_equal [2], member.role_ids |
367 assert_equal 3, member.project_id | 436 assert_equal 3, member.project_id |
368 end | 437 end |
369 | 438 |
372 post :edit_membership, :id => 7, :membership => {:project_id => 3, :role_ids => [2]}, :format => 'js' | 441 post :edit_membership, :id => 7, :membership => {:project_id => 3, :role_ids => [2]}, :format => 'js' |
373 assert_response :success | 442 assert_response :success |
374 assert_template 'edit_membership' | 443 assert_template 'edit_membership' |
375 assert_equal 'text/javascript', response.content_type | 444 assert_equal 'text/javascript', response.content_type |
376 end | 445 end |
377 member = Member.first(:order => 'id DESC') | 446 member = Member.order('id DESC').first |
378 assert_equal User.find(7), member.principal | 447 assert_equal User.find(7), member.principal |
379 assert_equal [2], member.role_ids | 448 assert_equal [2], member.role_ids |
380 assert_equal 3, member.project_id | 449 assert_equal 3, member.project_id |
381 assert_include 'tab-content-memberships', response.body | 450 assert_include 'tab-content-memberships', response.body |
382 end | 451 end |