Users: add Contributor and Approver user levels

This commit is contained in:
nonamethanks
2022-10-21 14:59:15 +02:00
parent f092bc28ee
commit ca31e7a47c
29 changed files with 105 additions and 251 deletions

View File

@@ -12,64 +12,30 @@ FactoryBot.define do
end
factory(:restricted_user) do
level {10}
level {User::Levels::RESTRICTED}
requires_verification { true }
is_verified { false }
end
factory(:member_user) do
level {20}
end
User.level_hash.each do |level_name, level_value|
# allows create(:moderator_user), create(:approver) etc
next if level_name == "Restricted" # already defined above
factory(:gold_user) do
level {30}
end
factory(level_name.downcase) do
level {level_value}
end
factory(:platinum_user) do
level {31}
end
factory(:builder_user) do
level {32}
end
factory(:contributor_user) do
level {32}
can_upload_free {true}
end
factory(:contrib_user) do
level {32}
can_upload_free {true}
end
factory(:moderator_user) do
level {40}
can_approve_posts {true}
factory("#{level_name.downcase}_user") do
level {level_value}
end
end
factory(:mod_user) do
level {40}
can_approve_posts {true}
end
factory(:admin_user) do
level {50}
can_approve_posts {true}
end
factory(:owner_user) do
level { User::Levels::OWNER }
can_approve_posts {true}
level {User::Levels::MODERATOR}
end
factory(:uploader) do
created_at { 2.weeks.ago }
end
factory(:approver) do
level {32}
can_approve_posts {true}
end
end
end

View File

@@ -22,37 +22,7 @@ class Admin::UsersControllerTest < ActionDispatch::IntegrationTest
assert_redirected_to(edit_admin_user_path(@user))
assert_equal(30, @user.reload.level)
assert_match(/promoted "#{@user.name}":\/users\/#{@user.id} from Member to Gold/, ModAction.last.description)
assert_equal(@user, ModAction.last.subject)
assert_equal(@mod, ModAction.last.creator)
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?)
assert_match(/granted unlimited upload privileges to "#{@user.name}":\/users\/#{@user.id}/, ModAction.first.description)
assert_match(/promoted "#{@user.name}":\/users\/#{@user.id} from Member to Builder/, ModAction.last.description)
assert_equal(@user, ModAction.first.subject)
assert_equal(@mod, ModAction.first.creator)
assert_equal(@user, ModAction.last.subject)
assert_equal(@mod, ModAction.last.creator)
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?)
assert_match(/granted approval privileges to "#{@user.name}":\/users\/#{@user.id}/, ModAction.first.description)
assert_match(/promoted "#{@user.name}":\/users\/#{@user.id} from Member to Builder/, ModAction.last.description)
assert_equal(@user, ModAction.first.subject)
assert_equal(@mod, ModAction.first.creator)
assert_match(%r{promoted "#{@user.name}":/users/#{@user.id} from Member to Gold}, ModAction.last.description)
assert_equal(@user, ModAction.last.subject)
assert_equal(@mod, ModAction.last.creator)
end

View File

@@ -522,8 +522,8 @@ class PostsControllerTest < ActionDispatch::IntegrationTest
context "with everything" do
setup do
@admin = create(:admin_user, can_approve_posts: true)
@builder = create(:builder_user, can_approve_posts: true)
@admin = create(:admin_user)
@approver = create(:approver_user)
as(@user) do
@post.update!(tag_string: "1girl solo highres blah 2001")
@@ -545,7 +545,7 @@ class PostsControllerTest < ActionDispatch::IntegrationTest
#create(:post_appeal, post: @post, creator: @user)
create(:post_vote, post: @post, user: @user)
create(:favorite, post: @post, user: @user)
create(:moderation_report, model: @comment, creator: @builder)
create(:moderation_report, model: @comment, creator: @approver)
end
end
@@ -560,7 +560,7 @@ class PostsControllerTest < ActionDispatch::IntegrationTest
end
should "render for a builder" do
get_auth post_path(@post), @builder
get_auth post_path(@post), @approver
assert_response :success
end
@@ -570,7 +570,7 @@ class PostsControllerTest < ActionDispatch::IntegrationTest
end
should "render for a builder with a search query" do
get_auth post_path(@post, q: "tagme"), @builder
get_auth post_path(@post, q: "tagme"), @approver
assert_response :success
end

View File

@@ -9,7 +9,7 @@ class UsersControllerTest < ActionDispatch::IntegrationTest
context "index action" do
setup do
@mod_user = create(:moderator_user, name: "yukari")
@other_user = create(:builder_user, can_upload_free: true, inviter: @mod_user, created_at: 2.weeks.ago)
@other_user = create(:contributor_user, inviter: @mod_user, created_at: 2.weeks.ago)
@uploader = create(:user, created_at: 2.weeks.ago)
end
@@ -41,7 +41,6 @@ class UsersControllerTest < ActionDispatch::IntegrationTest
should respond_to_search({}).with { [@uploader, @other_user, @mod_user, @user, User.system] }
should respond_to_search(min_level: User::Levels::BUILDER).with { [@other_user, @mod_user, User.system] }
should respond_to_search(can_upload_free: "true").with { @other_user }
should respond_to_search(name_matches: "yukari").with { @mod_user }
context "using includes" do
@@ -114,7 +113,7 @@ class UsersControllerTest < ActionDispatch::IntegrationTest
context "show action" do
setup do
# flesh out profile to get more test coverage of user presenter.
@user = create(:user, can_approve_posts: true, created_at: 2.weeks.ago)
@user = create(:approver, created_at: 2.weeks.ago)
as(@user) do
create(:saved_search, user: @user)
create(:post, uploader: @user, tag_string: "fav:#{@user.name}")

View File

@@ -3,13 +3,13 @@ require 'test_helper'
class ApproverPrunerTest < ActiveSupport::TestCase
context "ApproverPruner" do
setup do
@approver = create(:user, can_approve_posts: true)
@approver = create(:approver)
end
should "demote inactive approvers" do
assert_equal([@approver.id], ApproverPruner.inactive_approvers.map(&:id))
assert_nothing_raised { ApproverPruner.prune! }
assert_equal(false, @approver.reload.can_approve_posts)
assert_equal(User::Levels::CONTRIBUTOR, @approver.reload.level)
end
should "not demote active approvers" do
@@ -22,7 +22,7 @@ class ApproverPrunerTest < ActiveSupport::TestCase
should "not demote recently promoted approvers" do
as(create(:admin_user)) do
@user = create(:user)
@user.promote_to!(User::Levels::BUILDER, can_approve_posts: true)
@user.promote_to!(User::Levels::APPROVER)
end
assert_not_includes(ApproverPruner.inactive_approvers.map(&:id), @user.id)

View File

@@ -43,7 +43,7 @@ class PostAppealTest < ActiveSupport::TestCase
context "for users with unrestricted uploads" do
should "should not have an appeal limit" do
@user = create(:user, can_upload_free: true)
@user = create(:contributor)
create_list(:post_appeal, 10, creator: @user)
assert_equal(15, @user.upload_limit.upload_slots)

View File

@@ -5,7 +5,7 @@ class PostApprovalTest < ActiveSupport::TestCase
setup do
@user = create(:user, created_at: 2.weeks.ago)
@post = create(:post, uploader: @user, is_pending: true)
@approver = create(:user, can_approve_posts: true)
@approver = create(:approver)
end
context "a pending post" do

View File

@@ -4,7 +4,7 @@ class PostFlagTest < ActiveSupport::TestCase
context "PostFlag: " do
context "an approver" do
should "be able to flag an unlimited number of posts" do
@user = create(:user, can_approve_posts: true)
@user = create(:approver)
assert_nothing_raised do
create_list(:post_flag, 6, creator: @user, status: :pending)