Files
danbooru/test/functional/admin/users_controller_test.rb
evazion c82e05d828 users: add stricter checks for user promotions.
New rules for user promotions:

* Moderators can no longer promote other users to moderator level. Only
  Admins can promote users to Mod level. Mods can only promote up to Builder level.
* Admins can no longer promote other users to Admin level. Only Owners
  can promote users to Admin. Admins can only promote up to Mod level.
* Admins can no longer demote themselves or other admins.

These rules are being changed to account for the new Owner user level.

Also change it so that when a user upgrades their account, the promotion
is done by DanbooruBot. This means that the inviter and the mod action
will show DanbooruBot as the promoter instead of the user themselves.
2020-12-13 21:21:08 -06:00

64 lines
2.1 KiB
Ruby

require 'test_helper'
class Admin::UsersControllerTest < ActionDispatch::IntegrationTest
context "Admin::UsersController" do
setup do
@mod = create(:moderator_user)
@user = create(:user)
@admin = create(:admin_user)
end
context "#edit" do
should "render" do
get_auth edit_admin_user_path(@user), @mod
assert_response :success
end
end
context "#update" do
context "on a basic user" do
should "succeed" do
put_auth admin_user_path(@user), @mod, params: {:user => {:level => "30"}}
assert_redirected_to(edit_admin_user_path(@user))
assert_equal(30, @user.reload.level)
assert_equal(@mod.id, @user.inviter_id)
end
should "promote the user to unrestricted uploads" do
put_auth admin_user_path(@user), @mod, params: { user: { level: User::Levels::BUILDER, can_upload_free: true }}
assert_redirected_to(edit_admin_user_path(@user.reload))
assert_equal(true, @user.is_builder?)
assert_equal(true, @user.can_upload_free?)
assert_equal(false, @user.can_approve_posts?)
end
should "promote the user to approver" do
put_auth admin_user_path(@user), @mod, params: { user: { level: User::Levels::BUILDER, can_approve_posts: true }}
assert_redirected_to(edit_admin_user_path(@user.reload))
assert_equal(true, @user.is_builder?)
assert_equal(false, @user.can_upload_free?)
assert_equal(true, @user.can_approve_posts?)
end
context "promoted to an admin" do
should "fail" do
put_auth admin_user_path(@user), @mod, params: {:user => {:level => "50"}}
assert_response(403)
assert_equal(20, @user.reload.level)
end
end
end
context "on an admin user" do
should "fail" do
put_auth admin_user_path(@admin), @mod, params: {:user => {:level => "30"}}
assert_response(403)
assert_equal(50, @admin.reload.level)
end
end
end
end
end