##// END OF EJS Templates
code layout cleanup test/functional/users_controller_test.rb...
Toshi MARUYAMA -
r9547:87783362cf8b
parent child
Show More
@@ -1,394 +1,392
1 1 # Redmine - project management software
2 2 # Copyright (C) 2006-2012 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 require File.expand_path('../../test_helper', __FILE__)
19 19 require 'users_controller'
20 20
21 21 # Re-raise errors caught by the controller.
22 22 class UsersController; def rescue_action(e) raise e end; end
23 23
24 24 class UsersControllerTest < ActionController::TestCase
25 25 include Redmine::I18n
26 26
27 fixtures :users, :projects, :members, :member_roles, :roles, :custom_fields, :custom_values, :groups_users, :auth_sources
27 fixtures :users, :projects, :members, :member_roles, :roles,
28 :custom_fields, :custom_values, :groups_users,
29 :auth_sources
28 30
29 31 def setup
30 32 @controller = UsersController.new
31 33 @request = ActionController::TestRequest.new
32 34 @response = ActionController::TestResponse.new
33 35 User.current = nil
34 36 @request.session[:user_id] = 1 # admin
35 37 end
36 38
37 39 def test_index
38 40 get :index
39 41 assert_response :success
40 42 assert_template 'index'
41 43 end
42 44
43 45 def test_index
44 46 get :index
45 47 assert_response :success
46 48 assert_template 'index'
47 49 assert_not_nil assigns(:users)
48 50 # active users only
49 51 assert_nil assigns(:users).detect {|u| !u.active?}
50 52 end
51 53
52 54 def test_index_with_status_filter
53 55 get :index, :status => 3
54 56 assert_response :success
55 57 assert_template 'index'
56 58 assert_not_nil assigns(:users)
57 59 assert_equal [3], assigns(:users).map(&:status).uniq
58 60 end
59 61
60 62 def test_index_with_name_filter
61 63 get :index, :name => 'john'
62 64 assert_response :success
63 65 assert_template 'index'
64 66 users = assigns(:users)
65 67 assert_not_nil users
66 68 assert_equal 1, users.size
67 69 assert_equal 'John', users.first.firstname
68 70 end
69 71
70 72 def test_index_with_group_filter
71 73 get :index, :group_id => '10'
72 74 assert_response :success
73 75 assert_template 'index'
74 76 users = assigns(:users)
75 77 assert users.any?
76 78 assert_equal([], (users - Group.find(10).users))
77 79 assert_select 'select[name=group_id]' do
78 80 assert_select 'option[value=10][selected=selected]'
79 81 end
80 82 end
81 83
82 84 def test_show
83 85 @request.session[:user_id] = nil
84 86 get :show, :id => 2
85 87 assert_response :success
86 88 assert_template 'show'
87 89 assert_not_nil assigns(:user)
88 90
89 91 assert_tag 'li', :content => /Phone number/
90 92 end
91 93
92 94 def test_show_should_not_display_hidden_custom_fields
93 95 @request.session[:user_id] = nil
94 96 UserCustomField.find_by_name('Phone number').update_attribute :visible, false
95 97 get :show, :id => 2
96 98 assert_response :success
97 99 assert_template 'show'
98 100 assert_not_nil assigns(:user)
99 101
100 102 assert_no_tag 'li', :content => /Phone number/
101 103 end
102 104
103 105 def test_show_should_not_fail_when_custom_values_are_nil
104 106 user = User.find(2)
105 107
106 108 # Create a custom field to illustrate the issue
107 109 custom_field = CustomField.create!(:name => 'Testing', :field_format => 'text')
108 110 custom_value = user.custom_values.build(:custom_field => custom_field).save!
109 111
110 112 get :show, :id => 2
111 113 assert_response :success
112 114 end
113 115
114 116 def test_show_inactive
115 117 @request.session[:user_id] = nil
116 118 get :show, :id => 5
117 119 assert_response 404
118 120 end
119 121
120 122 def test_show_should_not_reveal_users_with_no_visible_activity_or_project
121 123 @request.session[:user_id] = nil
122 124 get :show, :id => 9
123 125 assert_response 404
124 126 end
125 127
126 128 def test_show_inactive_by_admin
127 129 @request.session[:user_id] = 1
128 130 get :show, :id => 5
129 131 assert_response 200
130 132 assert_not_nil assigns(:user)
131 133 end
132 134
133 135 def test_show_displays_memberships_based_on_project_visibility
134 136 @request.session[:user_id] = 1
135 137 get :show, :id => 2
136 138 assert_response :success
137 139 memberships = assigns(:memberships)
138 140 assert_not_nil memberships
139 141 project_ids = memberships.map(&:project_id)
140 142 assert project_ids.include?(2) #private project admin can see
141 143 end
142 144
143 145 def test_show_current_should_require_authentication
144 146 @request.session[:user_id] = nil
145 147 get :show, :id => 'current'
146 148 assert_response 302
147 149 end
148 150
149 151 def test_show_current
150 152 @request.session[:user_id] = 2
151 153 get :show, :id => 'current'
152 154 assert_response :success
153 155 assert_template 'show'
154 156 assert_equal User.find(2), assigns(:user)
155 157 end
156 158
157 159 def test_new
158 160 get :new
159
160 161 assert_response :success
161 162 assert_template :new
162 163 assert assigns(:user)
163 164 end
164 165
165 166 def test_create
166 167 Setting.bcc_recipients = '1'
167 168
168 169 assert_difference 'User.count' do
169 170 assert_difference 'ActionMailer::Base.deliveries.size' do
170 171 post :create,
171 172 :user => {
172 173 :firstname => 'John',
173 174 :lastname => 'Doe',
174 175 :login => 'jdoe',
175 176 :password => 'secret',
176 177 :password_confirmation => 'secret',
177 178 :mail => 'jdoe@gmail.com',
178 179 :mail_notification => 'none'
179 180 },
180 181 :send_information => '1'
181 182 end
182 183 end
183 184
184 185 user = User.first(:order => 'id DESC')
185 186 assert_redirected_to :controller => 'users', :action => 'edit', :id => user.id
186 187
187 188 assert_equal 'John', user.firstname
188 189 assert_equal 'Doe', user.lastname
189 190 assert_equal 'jdoe', user.login
190 191 assert_equal 'jdoe@gmail.com', user.mail
191 192 assert_equal 'none', user.mail_notification
192 193 assert user.check_password?('secret')
193 194
194 195 mail = ActionMailer::Base.deliveries.last
195 196 assert_not_nil mail
196 197 assert_equal [user.mail], mail.bcc
197 198 assert_mail_body_match 'secret', mail
198 199 end
199 200
200 201 def test_create_with_preferences
201 202 assert_difference 'User.count' do
202 203 post :create,
203 204 :user => {
204 205 :firstname => 'John',
205 206 :lastname => 'Doe',
206 207 :login => 'jdoe',
207 208 :password => 'secret',
208 209 :password_confirmation => 'secret',
209 210 :mail => 'jdoe@gmail.com',
210 211 :mail_notification => 'none'
211 212 },
212 213 :pref => {
213 214 'hide_mail' => '1',
214 215 'time_zone' => 'Paris',
215 216 'comments_sorting' => 'desc',
216 217 'warn_on_leaving_unsaved' => '0'
217 218 }
218 219 end
219 220 user = User.first(:order => 'id DESC')
220 221 assert_equal 'jdoe', user.login
221 222 assert_equal true, user.pref.hide_mail
222 223 assert_equal 'Paris', user.pref.time_zone
223 224 assert_equal 'desc', user.pref[:comments_sorting]
224 225 assert_equal '0', user.pref[:warn_on_leaving_unsaved]
225 226 end
226 227
227 228 def test_create_with_failure
228 229 assert_no_difference 'User.count' do
229 230 post :create, :user => {}
230 231 end
231
232 232 assert_response :success
233 233 assert_template 'new'
234 234 end
235 235
236 236 def test_edit
237 237 get :edit, :id => 2
238
239 238 assert_response :success
240 239 assert_template 'edit'
241 240 assert_equal User.find(2), assigns(:user)
242 241 end
243 242
244 243 def test_update
245 244 ActionMailer::Base.deliveries.clear
246 put :update, :id => 2, :user => {:firstname => 'Changed', :mail_notification => 'only_assigned'}, :pref => {:hide_mail => '1', :comments_sorting => 'desc'}
247
245 put :update, :id => 2,
246 :user => {:firstname => 'Changed', :mail_notification => 'only_assigned'},
247 :pref => {:hide_mail => '1', :comments_sorting => 'desc'}
248 248 user = User.find(2)
249 249 assert_equal 'Changed', user.firstname
250 250 assert_equal 'only_assigned', user.mail_notification
251 251 assert_equal true, user.pref[:hide_mail]
252 252 assert_equal 'desc', user.pref[:comments_sorting]
253 253 assert ActionMailer::Base.deliveries.empty?
254 254 end
255 255
256 256 def test_update_with_failure
257 257 assert_no_difference 'User.count' do
258 258 put :update, :id => 2, :user => {:firstname => ''}
259 259 end
260
261 260 assert_response :success
262 261 assert_template 'edit'
263 262 end
264 263
265 264 def test_update_with_group_ids_should_assign_groups
266 265 put :update, :id => 2, :user => {:group_ids => ['10']}
267
268 266 user = User.find(2)
269 267 assert_equal [10], user.group_ids
270 268 end
271 269
272 270 def test_update_with_activation_should_send_a_notification
273 271 u = User.new(:firstname => 'Foo', :lastname => 'Bar', :mail => 'foo.bar@somenet.foo', :language => 'fr')
274 272 u.login = 'foo'
275 273 u.status = User::STATUS_REGISTERED
276 274 u.save!
277 275 ActionMailer::Base.deliveries.clear
278 276 Setting.bcc_recipients = '1'
279 277
280 278 put :update, :id => u.id, :user => {:status => User::STATUS_ACTIVE}
281 279 assert u.reload.active?
282 280 mail = ActionMailer::Base.deliveries.last
283 281 assert_not_nil mail
284 282 assert_equal ['foo.bar@somenet.foo'], mail.bcc
285 283 assert_mail_body_match ll('fr', :notice_account_activated), mail
286 284 end
287 285
288 286 def test_update_with_password_change_should_send_a_notification
289 287 ActionMailer::Base.deliveries.clear
290 288 Setting.bcc_recipients = '1'
291 289
292 290 put :update, :id => 2, :user => {:password => 'newpass', :password_confirmation => 'newpass'}, :send_information => '1'
293 291 u = User.find(2)
294 292 assert u.check_password?('newpass')
295 293
296 294 mail = ActionMailer::Base.deliveries.last
297 295 assert_not_nil mail
298 296 assert_equal [u.mail], mail.bcc
299 297 assert_mail_body_match 'newpass', mail
300 298 end
301 299
302 300 def test_update_user_switchin_from_auth_source_to_password_authentication
303 301 # Configure as auth source
304 302 u = User.find(2)
305 303 u.auth_source = AuthSource.find(1)
306 304 u.save!
307 305
308 306 put :update, :id => u.id, :user => {:auth_source_id => '', :password => 'newpass', :password_confirmation => 'newpass'}
309 307
310 308 assert_equal nil, u.reload.auth_source
311 309 assert u.check_password?('newpass')
312 310 end
313 311
314 312 def test_destroy
315 313 assert_difference 'User.count', -1 do
316 314 delete :destroy, :id => 2
317 315 end
318 316 assert_redirected_to '/users'
319 317 assert_nil User.find_by_id(2)
320 318 end
321 319
322 320 def test_destroy_should_be_denied_for_non_admin_users
323 321 @request.session[:user_id] = 3
324 322
325 323 assert_no_difference 'User.count' do
326 324 get :destroy, :id => 2
327 325 end
328 326 assert_response 403
329 327 end
330 328
331 329 def test_create_membership
332 330 assert_difference 'Member.count' do
333 331 post :edit_membership, :id => 7, :membership => { :project_id => 3, :role_ids => [2]}
334 332 end
335 333 assert_redirected_to :action => 'edit', :id => '7', :tab => 'memberships'
336 334 member = Member.first(:order => 'id DESC')
337 335 assert_equal User.find(7), member.principal
338 336 assert_equal [2], member.role_ids
339 337 assert_equal 3, member.project_id
340 338 end
341 339
342 340 def test_create_membership_js_format
343 341 assert_difference 'Member.count' do
344 342 post :edit_membership, :id => 7, :membership => {:project_id => 3, :role_ids => [2]}, :format => 'js'
345 343 end
346 344 assert_response :success
347 345 assert_select_rjs :replace_html, 'tab-content-memberships'
348 346 member = Member.first(:order => 'id DESC')
349 347 assert_equal User.find(7), member.principal
350 348 assert_equal [2], member.role_ids
351 349 assert_equal 3, member.project_id
352 350 end
353 351
354 352 def test_create_membership_js_format_with_failure
355 353 assert_no_difference 'Member.count' do
356 354 post :edit_membership, :id => 7, :membership => {:project_id => 3}, :format => 'js'
357 355 end
358 356 assert_response :success
359 357 assert @response.body.match(/alert/i), "Alert message not sent"
360 358 assert @response.body.match(/role can't be empty/i), "Error message not sent"
361 359 end
362 360
363 361 def test_update_membership
364 362 assert_no_difference 'Member.count' do
365 363 put :edit_membership, :id => 2, :membership_id => 1, :membership => { :role_ids => [2]}
366 364 end
367 365 assert_redirected_to :action => 'edit', :id => '2', :tab => 'memberships'
368 366 assert_equal [2], Member.find(1).role_ids
369 367 end
370 368
371 369 def test_update_membership_js_format
372 370 assert_no_difference 'Member.count' do
373 371 put :edit_membership, :id => 2, :membership_id => 1, :membership => {:role_ids => [2]}, :format => 'js'
374 372 end
375 373 assert_response :success
376 374 assert_select_rjs :replace_html, 'tab-content-memberships'
377 375 end
378 376
379 377 def test_destroy_membership
380 378 assert_difference 'Member.count', -1 do
381 379 delete :destroy_membership, :id => 2, :membership_id => 1
382 380 end
383 381 assert_redirected_to :action => 'edit', :id => '2', :tab => 'memberships'
384 382 assert_nil Member.find_by_id(1)
385 383 end
386 384
387 385 def test_destroy_membership_js_format
388 386 assert_difference 'Member.count', -1 do
389 387 delete :destroy_membership, :id => 2, :membership_id => 1, :format => 'js'
390 388 end
391 389 assert_response :success
392 390 assert_select_rjs :replace_html, 'tab-content-memberships'
393 391 end
394 392 end
General Comments 0
You need to be logged in to leave comments. Login now