Fix #4587: "Max 5 flags per 3 days" should account for reapproved flags.
This commit is contained in:
@@ -25,6 +25,7 @@ class PostFlag < ApplicationRecord
|
|||||||
scope :by_system, -> { where(creator: User.system) }
|
scope :by_system, -> { where(creator: User.system) }
|
||||||
scope :in_cooldown, -> { by_users.where("created_at >= ?", Danbooru.config.moderation_period.ago) }
|
scope :in_cooldown, -> { by_users.where("created_at >= ?", Danbooru.config.moderation_period.ago) }
|
||||||
scope :expired, -> { pending.where("post_flags.created_at < ?", Danbooru.config.moderation_period.ago) }
|
scope :expired, -> { pending.where("post_flags.created_at < ?", Danbooru.config.moderation_period.ago) }
|
||||||
|
scope :active, -> { pending.or(rejected.in_cooldown) }
|
||||||
|
|
||||||
module SearchMethods
|
module SearchMethods
|
||||||
def creator_matches(creator, searcher)
|
def creator_matches(creator, searcher)
|
||||||
|
|||||||
@@ -356,7 +356,7 @@ class User < ApplicationRecord
|
|||||||
|
|
||||||
def is_flag_limited?
|
def is_flag_limited?
|
||||||
return false if has_unlimited_flags?
|
return false if has_unlimited_flags?
|
||||||
post_flags.pending.count >= 5
|
post_flags.active.count >= 5
|
||||||
end
|
end
|
||||||
|
|
||||||
# Flags are unlimited if you're an approver or you have at least 30 flags
|
# Flags are unlimited if you're an approver or you have at least 30 flags
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ class PostFlagTest < ActiveSupport::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
context "a basic user" do
|
context "a basic user" do
|
||||||
should "be able to flag up to 5 posts" do
|
should "be able to flag up to 5 posts at once" do
|
||||||
@user = create(:user)
|
@user = create(:user)
|
||||||
@flags = create_list(:post_flag, 5, creator: @user, status: :pending)
|
@flags = create_list(:post_flag, 5, creator: @user, status: :pending)
|
||||||
@flag = build(:post_flag, creator: @user, status: :pending)
|
@flag = build(:post_flag, creator: @user, status: :pending)
|
||||||
@@ -35,6 +35,22 @@ class PostFlagTest < ActiveSupport::TestCase
|
|||||||
assert_equal(false, @flag.valid?)
|
assert_equal(false, @flag.valid?)
|
||||||
assert_equal(["have reached your flag limit"], @flag.errors[:creator])
|
assert_equal(["have reached your flag limit"], @flag.errors[:creator])
|
||||||
end
|
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
|
end
|
||||||
|
|
||||||
context "a user" do
|
context "a user" do
|
||||||
|
|||||||
Reference in New Issue
Block a user