Skip to content

Commit d0e1bec

Browse files
committed
feat: update role assignment logic for superadmin and add controller tests
1 parent 38467db commit d0e1bec

3 files changed

Lines changed: 58 additions & 1 deletion

File tree

app/controllers/admin/users_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ def user_params
3939
end
4040

4141
def assign_role_if_allowed
42-
return unless current_user&.superadmin?
42+
return unless current_user&.role_superadmin?
4343

4444
requested_role = params.dig(:user, :role).to_s
4545
return if requested_role.blank?

app/views/admin/users/index.html.erb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
background-color: #dc3545;
2828
}
2929

30+
3031
.action-buttons {
3132
padding: 5px;
3233
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
require "test_helper"
2+
require "securerandom"
3+
4+
class Admin::UsersControllerTest < ActionDispatch::IntegrationTest
5+
setup do
6+
@target_user = create_user(name: "Target User", role: :user)
7+
end
8+
9+
test "superadmin can update another user's role" do
10+
superadmin = create_user(name: "Super Admin", role: :superadmin)
11+
sign_in_as(superadmin)
12+
13+
patch admin_user_url(@target_user), params: {
14+
user: {
15+
name: @target_user.name,
16+
slack_id: @target_user.slack_id,
17+
ysws_eligible: "1",
18+
role: "admin"
19+
}
20+
}
21+
22+
assert_redirected_to admin_users_url
23+
assert_equal "admin", @target_user.reload.role
24+
end
25+
26+
test "admin cannot escalate another user's role" do
27+
admin = create_user(name: "Admin User", role: :admin)
28+
sign_in_as(admin)
29+
30+
patch admin_user_url(@target_user), params: {
31+
user: {
32+
name: "Updated Name",
33+
slack_id: @target_user.slack_id,
34+
ysws_eligible: "0",
35+
role: "superadmin"
36+
}
37+
}
38+
39+
assert_redirected_to admin_users_url
40+
@target_user.reload
41+
assert_equal "user", @target_user.role
42+
assert_equal "Updated Name", @target_user.name
43+
end
44+
45+
private
46+
47+
def create_user(name:, role:)
48+
User.create!(
49+
name: name,
50+
slack_id: "U#{SecureRandom.hex(4)}",
51+
verified: 1,
52+
ysws_eligible: false,
53+
role: role
54+
)
55+
end
56+
end

0 commit comments

Comments
 (0)