diff options
Diffstat (limited to 'test/controllers')
| -rw-r--r-- | test/controllers/users_controller_test.rb | 46 |
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 | ||
| 360 | end | 406 | end |
