From 974062f16169f6d07f2289564be6d72610b8770e Mon Sep 17 00:00:00 2001 From: erdgeist Date: Tue, 4 Aug 2026 05:40:54 +0200 Subject: Witness every promotion and demotion made through the roles form --- test/controllers/users_controller_test.rb | 46 +++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) (limited to 'test/controllers/users_controller_test.rb') 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 assert_redirected_to new_elevation_path assert_equal ["admin", "redaktion"], users(:aaron).reload.roles.sort end + + test "promoting through the roles form leaves a log entry" do + login_as :aaron + elevate_session! + target = users(:redella) + target.update_column(:otp_secret, ROTP::Base32.random) + + assert_difference -> { NodeAction.where(:action => "admin_grant").count }, 1 do + put :update, params: { :locale => "de", :id => target.id, + :user => { :roles => ["", "redaktion", "admin"] } } + end + + assert_redirected_to user_path(target) + assert_equal %w[admin redaktion], target.reload.roles.sort + end + + test "a refused promotion re-renders with an error and changes nothing" do + login_as :aaron + elevate_session! + target = users(:quentin) + + assert_no_difference -> { NodeAction.count } do + put :update, params: { :locale => "de", :id => target.id, + :user => { :roles => ["", "admin"] } } + end + + assert_response :success + assert_empty target.reload.roles + assert_not_nil flash[:error] + assert_nil flash[:notice] + end + + test "a validation failure leaves no promotion behind" do + login_as :aaron + elevate_session! + target = users(:redella) + target.update_column(:otp_secret, ROTP::Base32.random) + + assert_no_difference -> { NodeAction.count } do + put :update, params: { :locale => "de", :id => target.id, + :user => { :email => "", :roles => ["", "redaktion", "admin"] } } + end + + assert_response :success + assert_equal %w[redaktion], target.reload.roles + end end -- cgit v1.3