- Implement user destroy action in UsersController - Add admin check for user deletion - Update user view to include delete link for admins - Add migration to add admin attribute to users - Update tests to cover new admin functionality This commit introduces the ability for admin users to delete other users from the system. It includes necessary checks to ensure that only admins can perform this action, along with updates to the user interface and tests to validate the new behavior.
65 lines
1.7 KiB
Ruby
65 lines
1.7 KiB
Ruby
require "test_helper"
|
|
|
|
class UsersControllerTest < ActionDispatch::IntegrationTest
|
|
def setup
|
|
@user = users(:michael)
|
|
@other_user = users(:archer)
|
|
end
|
|
test "should get new" do
|
|
get signup_path
|
|
assert_response :success
|
|
end
|
|
|
|
test "should redirect index when not logged in" do
|
|
get users_path
|
|
assert_redirected_to login_url
|
|
end
|
|
|
|
test "Should get sign up title" do
|
|
get signup_path
|
|
assert_response :success
|
|
assert_select "title", full_title("Sign up")
|
|
end
|
|
|
|
test "should redirect edit when logged in as wrong user" do
|
|
log_in_as(@other_user)
|
|
get edit_user_path(@user)
|
|
assert flash.empty?
|
|
assert_redirected_to root_url
|
|
end
|
|
|
|
test "should redirect update when logged in as wrong user" do
|
|
log_in_as(@other_user)
|
|
patch user_path(@user), params: { user: { name: @user.name,
|
|
email: @user.email } }
|
|
assert flash.empty?
|
|
assert_redirected_to root_url
|
|
end
|
|
|
|
test "should not allow the admin attribute to be edited via the web" do
|
|
log_in_as(@other_user)
|
|
assert_not @other_user.admin?
|
|
patch user_path(@other_user), params: {
|
|
user: { password: "password",
|
|
password_confirmation: "password",
|
|
admin: true }
|
|
}
|
|
assert_not @other_user.reload.admin?
|
|
end
|
|
|
|
test "should redirect destroy when not logged in" do
|
|
assert_no_difference "User.count" do
|
|
delete user_path(@user)
|
|
end
|
|
assert_redirected_to login_url
|
|
end
|
|
|
|
test "should redirect destroy when logged in as a non-admin" do
|
|
log_in_as(@other_user)
|
|
assert_no_difference "User.count" do
|
|
delete user_path(@user)
|
|
end
|
|
assert_redirected_to root_url
|
|
end
|
|
end
|