summaryrefslogtreecommitdiff
path: root/test/controllers
diff options
context:
space:
mode:
authorerdgeist <erdgeist@erdgeist.org>2026-08-03 23:00:28 +0200
committererdgeist <erdgeist@erdgeist.org>2026-08-03 23:00:28 +0200
commitbe2cdea85177ac016e56dcce6cbe6015d754adf5 (patch)
tree17de8f7474f8d2104f1342c8fe4e1ef7d3058c2e /test/controllers
parentf026f07d891bc0055ae3cb5160263ca03ad2e32a (diff)
Require elevation before editing another account
Diffstat (limited to 'test/controllers')
-rw-r--r--test/controllers/users_controller_test.rb55
1 files changed, 55 insertions, 0 deletions
diff --git a/test/controllers/users_controller_test.rb b/test/controllers/users_controller_test.rb
index a1812cb7..69c535f5 100644
--- a/test/controllers/users_controller_test.rb
+++ b/test/controllers/users_controller_test.rb
@@ -105,6 +105,7 @@ class UsersControllerTest < ActionController::TestCase
105 105
106 test "get edit of another user being logged in as admin user" do 106 test "get edit of another user being logged in as admin user" do
107 login_as :aaron 107 login_as :aaron
108 elevate_session!
108 get :edit, params: { :id => User.find_by_login("quentin").id } 109 get :edit, params: { :id => User.find_by_login("quentin").id }
109 assert_response :success 110 assert_response :success
110 end 111 end
@@ -129,6 +130,7 @@ class UsersControllerTest < ActionController::TestCase
129 test "updating an user when being login in as admin user" do 130 test "updating an user when being login in as admin user" do
130 user = User.find_by_login("quentin") 131 user = User.find_by_login("quentin")
131 login_as :aaron 132 login_as :aaron
133 elevate_session!
132 put :update, params: { :id => user.id, :user => {:login => "random"} } 134 put :update, params: { :id => user.id, :user => {:login => "random"} }
133 assert_redirected_to user_path(user) 135 assert_redirected_to user_path(user)
134 assert_equal "random", user.reload.login 136 assert_equal "random", user.reload.login
@@ -302,4 +304,57 @@ class UsersControllerTest < ActionController::TestCase
302 assert_equal User.find_by(:login => "newcomer").id, 304 assert_equal User.find_by(:login => "newcomer").id,
303 entry.action_participants.first.subject_id 305 entry.action_participants.first.subject_id
304 end 306 end
307
308 test "editing another account without elevation prompts for a code" do
309 login_as :aaron
310 get :edit, params: { :locale => "de", :id => users(:quentin).id }
311 assert_redirected_to new_elevation_path
312 end
313
314 test "editing your own account needs no elevation" do
315 login_as :aaron
316 get :edit, params: { :locale => "de", :id => users(:aaron).id }
317 assert_response :success
318 end
319
320 test "a role change submitted without elevation is refused, not silently dropped" do
321 login_as :aaron
322 target = users(:quentin)
323 assert_empty target.roles
324
325 put :update, params: { :locale => "de", :id => target.id,
326 :user => { :roles => ["", "redaktion"] } }
327
328 assert_redirected_to new_elevation_path
329 assert_empty target.reload.roles
330 assert_nil flash[:notice]
331 end
332
333 test "a role change with elevation goes through" do
334 login_as :aaron
335 elevate_session!
336 target = users(:redella)
337 target.update_column(:otp_secret, ROTP::Base32.random)
338
339 put :update, params: { :locale => "de", :id => target.id,
340 :user => { :roles => ["", "redaktion", "admin"] } }
341
342 assert_redirected_to user_path(target)
343 assert_equal ["admin", "redaktion"], target.reload.roles.sort
344 end
345
346 test "editing your own account without elevation does not prompt" do
347 login_as :aaron
348 put :update, params: { :locale => "de", :id => users(:aaron).id,
349 :user => { :roles => ["", "admin", "redaktion"] } }
350 assert_redirected_to user_path(users(:aaron))
351 end
352
353 test "changing your own roles without elevation is refused" do
354 login_as :aaron
355 put :update, params: { :locale => "de", :id => users(:aaron).id,
356 :user => { :roles => [""] } }
357 assert_redirected_to new_elevation_path
358 assert_equal ["admin", "redaktion"], users(:aaron).reload.roles.sort
359 end
305end 360end