summaryrefslogtreecommitdiff
path: root/test/controllers/users_controller_test.rb
diff options
context:
space:
mode:
authorerdgeist <erdgeist@erdgeist.org>2026-08-04 05:40:54 +0200
committererdgeist <erdgeist@erdgeist.org>2026-08-04 05:40:54 +0200
commit974062f16169f6d07f2289564be6d72610b8770e (patch)
treeb18f297a9d4326a3ce36f5192fbc4992fcb28e7d /test/controllers/users_controller_test.rb
parentbe2cdea85177ac016e56dcce6cbe6015d754adf5 (diff)
Witness every promotion and demotion made through the roles form
Diffstat (limited to 'test/controllers/users_controller_test.rb')
-rw-r--r--test/controllers/users_controller_test.rb46
1 files changed, 46 insertions, 0 deletions
diff --git a/test/controllers/users_controller_test.rb b/test/controllers/users_controller_test.rb
index 69c535f5..aeff9bc7 100644
--- a/test/controllers/users_controller_test.rb
+++ b/test/controllers/users_controller_test.rb
@@ -357,4 +357,50 @@ class UsersControllerTest < ActionController::TestCase
357 assert_redirected_to new_elevation_path 357 assert_redirected_to new_elevation_path
358 assert_equal ["admin", "redaktion"], users(:aaron).reload.roles.sort 358 assert_equal ["admin", "redaktion"], users(:aaron).reload.roles.sort
359 end 359 end
360
361 test "promoting through the roles form leaves a log entry" do
362 login_as :aaron
363 elevate_session!
364 target = users(:redella)
365 target.update_column(:otp_secret, ROTP::Base32.random)
366
367 assert_difference -> { NodeAction.where(:action => "admin_grant").count }, 1 do
368 put :update, params: { :locale => "de", :id => target.id,
369 :user => { :roles => ["", "redaktion", "admin"] } }
370 end
371
372 assert_redirected_to user_path(target)
373 assert_equal %w[admin redaktion], target.reload.roles.sort
374 end
375
376 test "a refused promotion re-renders with an error and changes nothing" do
377 login_as :aaron
378 elevate_session!
379 target = users(:quentin)
380
381 assert_no_difference -> { NodeAction.count } do
382 put :update, params: { :locale => "de", :id => target.id,
383 :user => { :roles => ["", "admin"] } }
384 end
385
386 assert_response :success
387 assert_empty target.reload.roles
388 assert_not_nil flash[:error]
389 assert_nil flash[:notice]
390 end
391
392 test "a validation failure leaves no promotion behind" do
393 login_as :aaron
394 elevate_session!
395 target = users(:redella)
396 target.update_column(:otp_secret, ROTP::Base32.random)
397
398 assert_no_difference -> { NodeAction.count } do
399 put :update, params: { :locale => "de", :id => target.id,
400 :user => { :email => "", :roles => ["", "redaktion", "admin"] } }
401 end
402
403 assert_response :success
404 assert_equal %w[redaktion], target.reload.roles
405 end
360end 406end