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