Allow approvers to bypass the rule that you can't flag a post again if it was flagged less than 3 days ago. This rule was intended to prevent flag warring among regular users, which hopefully shouldn't be a problem among approvers. It was also useless because approvers could always just directly delete the post even if they couldn't flag it. Allowing approvers to reflag posts allows them to reinstate flags that were accidentally approved.
119 lines
4.2 KiB
Ruby
119 lines
4.2 KiB
Ruby
require 'test_helper'
|
|
|
|
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)
|
|
|
|
assert_nothing_raised do
|
|
create_list(:post_flag, 6, creator: @user, status: :pending)
|
|
end
|
|
end
|
|
end
|
|
|
|
context "a user with unlimited flags" do
|
|
should "be able to flag an unlimited number of posts" do
|
|
@user = create(:user)
|
|
create_list(:post_flag, 30, status: :succeeded, creator: @user)
|
|
|
|
assert_equal(true, @user.has_unlimited_flags?)
|
|
assert_equal(false, @user.is_flag_limited?)
|
|
|
|
assert_nothing_raised do
|
|
create_list(:post_flag, 6, creator: @user, status: :pending)
|
|
end
|
|
end
|
|
end
|
|
|
|
context "a basic user" do
|
|
should "be able to flag up to 5 posts at once" do
|
|
@user = create(:user)
|
|
@flags = create_list(:post_flag, 5, creator: @user, status: :pending)
|
|
@flag = build(:post_flag, creator: @user, status: :pending)
|
|
|
|
assert_equal(false, @flag.valid?)
|
|
assert_equal(["have reached your flag limit"], @flag.errors[:creator])
|
|
end
|
|
|
|
should "have early rejected flags count against their flag limit" do
|
|
@user = create(:user)
|
|
|
|
create(:post_flag, creator: @user, status: :pending)
|
|
assert_equal(1, @user.post_flags.active.count)
|
|
|
|
create(:post_flag, creator: @user, status: :rejected)
|
|
assert_equal(2, @user.post_flags.active.count)
|
|
|
|
create(:post_flag, creator: @user, status: :succeeded)
|
|
assert_equal(2, @user.post_flags.active.count)
|
|
|
|
create(:post_flag, creator: @user, status: :rejected, created_at: 4.days.ago)
|
|
assert_equal(2, @user.post_flags.active.count)
|
|
end
|
|
end
|
|
|
|
context "a user" do
|
|
should "not be able to flag a post more than once" do
|
|
@user = create(:user)
|
|
@post = create(:post)
|
|
@post_flag = create(:post_flag, post: @post, creator: @user)
|
|
@post_flag = build(:post_flag, post: @post, creator: @user)
|
|
|
|
assert_equal(false, @post_flag.valid?)
|
|
assert_equal(["have already flagged this post"], @post_flag.errors[:creator_id])
|
|
end
|
|
|
|
should "not be able to flag a deleted post" do
|
|
@post = create(:post, is_deleted: true)
|
|
@post_flag = build(:post_flag, post: @post)
|
|
|
|
assert_equal(false, @post_flag.valid?)
|
|
assert_equal(["Post is deleted and cannot be flagged"], @post_flag.errors.full_messages)
|
|
end
|
|
|
|
should "not be able to flag a pending post" do
|
|
@post = create(:post, is_pending: true)
|
|
@flag = build(:post_flag, post: @post)
|
|
|
|
assert_equal(false, @flag.valid?)
|
|
assert_equal(["Post is pending and cannot be flagged"], @flag.errors.full_messages)
|
|
end
|
|
|
|
should "not be able to flag a post in the cooldown period" do
|
|
@mod = create(:moderator_user)
|
|
@users = create_list(:user, 2)
|
|
@post = create(:post)
|
|
@flag1 = create(:post_flag, post: @post, creator: @users.first)
|
|
create(:post_approval, post: @post, user: @mod)
|
|
|
|
travel_to(Danbooru.config.moderation_period.from_now - 1.minute) do
|
|
@flag2 = build(:post_flag, post: @post, reason: "something", creator: @users.second)
|
|
assert_equal(false, @flag2.valid?)
|
|
assert_match(/cannot be flagged more than once/, @flag2.errors[:post].join)
|
|
end
|
|
|
|
travel_to(Danbooru.config.moderation_period.from_now + 1.minute) do
|
|
@flag3 = create(:post_flag, post: @post, reason: "something", creator: @users.second)
|
|
assert(@flag3.errors.empty?)
|
|
end
|
|
end
|
|
|
|
should "be able to flag a post in the cooldown period if they're a mod" do
|
|
@post = create(:post)
|
|
@flag1 = create(:post_flag, post: @post)
|
|
|
|
create(:post_approval, post: @post)
|
|
assert_equal(false, @post.reload.is_pending?)
|
|
|
|
travel_to(Danbooru.config.moderation_period.from_now - 1.minute) do
|
|
@flag2 = create(:post_flag, post: @post, reason: "something", creator: create(:approver))
|
|
|
|
assert_equal(true, @flag2.valid?)
|
|
assert_equal(true, @post.reload.is_flagged?)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|